线上服务器应用--文件同步方案Rsync+sersync

前言:

需求:3台服务器,其中1主2备,实现主服务器实时推送文件至2台备份服务器

一、为什么要用Rsync+sersync架构?

1、sersync是基于Inotify开发的,类似于Inotify-tools的工具

2、sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的这个文件或者这个目录。

二、Rsync+Inotify-tools与Rsync+sersync这两种架构有什么区别?

1、Rsync+Inotify-tools

(1):Inotify-tools只能记录下被监听的目录发生了变化(包括增加、删除、修改),并没有把具体是哪个文件或者哪个目录发生了变化记录下来;

(2):rsync在同步的时候,并不知道具体是哪个文件或者哪个目录发生了变化,每次都是对整个目录进行同步,当数据量很大时,整个目录同步非常耗时(rsync要对整个目录遍历查找对比文件),因此,效率很低。

2、Rsync+sersync

(1):sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字;

(2):rsync在同步的时候,只同步发生变化的这个文件或者这个目录(每次发生变化的数据相对整个同步目录数据来说是很小的,rsync在遍历查找比对文件时,速度很快),因此,效率很高。

小结:当同步的目录数据量不大时,建议使用Rsync+Inotify-tools;当数据量很大(几百G甚至1T以上)、文件很多时,建议使用Rsync+sersync。

三、sersync安装配置

3.1sersync同步逻辑图

当前版本的sersync依赖于rsync进行数据同步;

原理步骤:

  1. 在同步服务器(主服务器Master)上开启sersync服务,sersync负载监控配置路径中的文件系统事件变化;
  2. 调用rsync命令把更新的文件同步到目标服务器(S1 和 S2);
  3. 需要在主服务器配置sersync,在同步目标服务器配置rsync server(注意:是rsync服务)

同步原理:

1.  用户实时的往sersync服务器(M)上写入更新文件数据;

2.  此时需要在同步主服务器(M)上配置sersync服务;

3.  在S1 和S2上开启rsync守护进程服务,以同步拉取来自sersync服务器(M)上的数据;

通过rsync的守护进程服务后可以发现,实际上sersync就是监控本地的数据写入或更新事件;然后,在调用rsync客户端的命令,将写入或更新事件对应的文件通过rsync推送到目标服务器(S1 和S2),如此简单;

3.2 安装环境准备

1.系统资源列表


角色


服务器配置


操作系统版本


IP


机器名


sersync服务(M)


VM


CentOS6.6


172.16.1.28


sersync


rsync服务(S1)


VM


CentOS6.6


172.16.1.25


WEB1


rsync服务(S2)


VM


CentOS6.6


172.16.1.26


WEB2

2.系统环境 64位centos 6.5


3.3 配置同步服务器

1.slave上(备机)部署rsync服务  yum -y install rsync   多台目标服务器要求版本一样 3.0.6

2.部署rsync服务

确定S1和S2服务器版本一致,(S1,S2)上配置如下,yum安装完没有配置文件,需要添加如下:

vim /etc/rsyncd.conf
#Rsync server
uid = root
gid = root
use chroot = no                         # 安全相关
max connections = 2000                  # 并发连接数
timeout = 600                           # 超时时间(秒)
pid file =/var/run/rsyncd.pid           # 指定rsync的pid目录
lock file =/var/run/rsync.lock          # 指定rsync的锁文件【重要】
log file = /var/log/rsyncd.log          # 指定rsync的日志目录
ignore errors
read only = false
list = false
hosts allow = 223.1.1.84
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file =/etc/rsync.password
#################################################
[mofiweb]                                   # 模块 
comment = mofiweb
path = /wqdata/mofibak
#################################################
#[bbs]
#comment = bbs
#path = /data/bbs/
#################################################
#[blog]
#comment = blog
#path = /data/blog/
#rsync_config____________end


特别提示: S1,S2的机器 同时部署上述服务;


面rsync服务的配置文件,表面允许sersync主服务器(ip:223.1.1.84)访问rsync同步模块名为
[mofiweb] ,将同步过来的文件分别放入对应的path指定的目录/wqdata/mofibak 下面;
如果有多台目标服务器,则每一台都需要进行类似的rsync服务配置,上面的uid、gid要换成您服务器的相应的同步用户;注意,rsync服务账户
(本文用的是root)要有对被同步目录(/data/)的写入更新权限;

3.创建rsync同步密码文件,并设置权限为600

echo "rsync_backup:lntz">/etc/rsync.password
cat /etc/rsync.password
chmod 600 /etc/rsync.password

4.启动守护进程,并写入开机自启动

[[email protected] ~]# rsync --daemon
[[email protected] ~]# lsof -i:873
COMMAND  PID USER  FD   TYPE   DEVICE SIZE/OFF NODE NAME
rsync   1070 root   4u  IPv4 17190189      0t0 TCP *:rsync (LISTEN)
[[email protected] ~]# 
[[email protected] ~]# netstat -nulpt| grep rsync
tcp        0     0 0.0.0.0:873                0.0.0.0:*                   LISTEN      1070/rsync
设置开机自启动【写入到/etc/rc.local里面】
[[email protected] ~]# vim /etc/rc.local
# rsync server progress
/usr/bin/rsync --daemon

5. 创建相关待同步的目录

mkdir -p /wqdata/mofibak
提示: 此步骤在S1,S2都要执行,否则rsync服务会因为没有PATH路径而无法启动


3.4 Master(主服务器)上配置rsync客户端

在master上配置rsync客户端相关权限认证:

echo "lntz">/etc/rsync.password
chmod 600 /etc/rsync.password
ll /etc/rsync.password

3.4.1 master(主服务器)上 手工测试rsync同步情况

特别提示:此步非常关键,如果测试不成功,后面的sersync配好了也不会同步数据;

1)分别创建待同步数据

mkdir -p /wqdata/mofi   里面随便建点文件或文件夹

2)执行同步命令

rsync -avzP /wqdata/mofi/ [email protected]::mofiweb/ --password-file=/etc/rsync.password
sending incremental file list
welcome_重命名_2015-4-7-16-20-49.html
         345 100%    0.00kB/s    0:00:00 (xfer#1, to-check=1075/1110)

sent 1877487 bytes  received 555 bytes  751216.80 bytes/sec
total size is 3215058996  speedup is 1711.92
  
提示: 
在后面进行部署sersync之前,sersync主服务器上必须要确保手工可以把文件推送到S1,S2上,
这样后续sersync才能调用这些命令来自动推送
在推送前关闭iptables或打开873端口

3)推送的命令是在 master端(也就是 sersync服务器上)操作的,同步后查看S1,S2

进备份服务器S1备份文件夹查看,或用du 命令对比大小 ,或者直观点用xftp看列表


3.5Mster上开始部署sersync服务

1、下载sersync  sersync2.5.4_64bit_binary_stable_final.tar.gz

百度或

wget http://dd.jb51.net:81/201111/tools/sersync_64bit_binary_stable_final.tar.gz

2、配置sersync tar包解压并改名放到/usr/local/sersync

更改优化sersync配置文件:

a) 修改24--28行

 24         <localpathwatch="/opt/tongbu">     # 定义本地要同步的目录
 25             <remote ip="127.0.0.1"name="tongbu1"/>
 26             <!--<remoteip="192.168.8.39" name="tongbu"/>-->        # 同步到哪台机器上 tongbu模块rsync端模块名字
 27             <!--<remoteip="192.168.8.40" name="tongbu"/>-->        # 同步到哪台机器上 tongbu模块
 28         </localpath>

b)修改31--34行,认证部分【rsync密码认证】

修改后的内容如下:

        <rsync>             <commonParamsparams="-artuz"/>
             <auth start="true"users="rsync_backup" passwordfile="/etc/rsync.password"/>
             <userDefinedPortstart="false" port="874"/><!-- port=874 -->
             <timeout start="true" time="100"/><!--timeout=100 -->
             <sshstart="false"/>
        </rsync>
# ***这块注意,密码文件和几个true开关,否则后面同步不了。
修改内容为 rsync的密码文件以及 同步所使用的账号类似:
rsync -avzP /data/www/[email protected]::www/ --password-file=/etc/rsync.password

c)修改37行

修改后如下:

  <failLog path="/usr/local/sersync/logs/rsync_fail_log.sh"timeToExecute="60"/>
  <!--default every 60mins execute once--># 
  当同步失败后,日志记录到/usr/local/sersync/logs/rsync_fail_log.sh文件中,
  并且每60分钟对失败的log进行重新同步

修改后的配置文件为:所有修改部分

 <sersync>
        <localpath watch="/wqdata/mofi">
            <remote ip="218.24.71.26" name="mofiweb"/>
            <!--<remote ip="192.168.8.39" name="tongbu"/>-->
            <!--<remote ip="192.168.8.40" name="tongbu"/>-->
        </localpath>
        <rsync>
            <commonParams params="-artuz"/>
            <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>
            <userDefinedPort start="false" port="874"/><!-- port=874 -->
            <timeout start="true" time="100"/><!-- timeout=100 -->
            <ssh start="false"/>
        </rsync>
        <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
        <crontab start="false" schedule="600"><!--600mins-->
            <crontabfilter start="false">
                <exclude expression="*.php"></exclude>
                <exclude expression="info/*"></exclude>
            </crontabfilter>
        </crontab>
        <plugin start="false" name="command"/>
    </sersync>

3、开启sersync守护进程同步数据

启动命令

/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml
echo"PATH=$PATH:/usr/local/sersync/" >> /etc/profile
source /etc/profile
sersync2   如果执行不了进目录里执行

启动命令后返回结果如下为正常:

[[email protected] sersync]# sersync2 
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
daemon thread num: 10
parse xml config file
host ip : localhost    host port: 8008
use rsync password-file :
user is    rsync_backup
passwordfile is     /etc/rsync.password
config xml parse success
please set /etc/rsyncd.conf max connections=0 Manually
sersync working thread 12  = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads) 
Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
run the sersync: 
watch path is: /wqdata/mofi

补充: 多实例情况

1、配置多个confxml.xml文件(比如:www、bbs、blog....等等)

2、根据不同的需求同步对应的实例文件

/usr/local/sersync/sersync2  -d -o /usr/local/sersync/www_confxml.xml

/usr/local/sersync/sersync2  -d -o /usr/local/sersync/bbs_confxml.xml

/usr/local/sersync/sersync2  -d -o /usr/local/sersync/blog_confxml.xml

# 多实例初始化同步命令:

/usr/local/sersync/sersync2 -r-d -o /usr/local/sersync/www_confxml.xml

/usr/local/sersync/sersync2 -r-d -o /usr/local/sersync/bbs_confxml.xml

/usr/local/sersync/sersync2 -r-d -o /usr/local/sersync/blog_confxml.xml

/bin/cp /etc/rc.local/etc/rc.local_$(data +%F)

cat>>/etc/rc.local<<EOF

#sync data to 25 26

/usr/local/sersync/sersync2  -d -o /usr/local/sersync/www_confxml.xml

/usr/local/sersync/sersync2  -d -o /usr/local/sersync/bbs_confxml.xml

/usr/local/sersync/sersync2  -d -o /usr/local/sersync/blog_confxml.xml

EOF


优化与监控脚本  见 http://www.osyunwei.com/archives/7447.html

本文主要参考 http://liubao0312.blog.51cto.com/2213529/1677586

时间: 2024-10-17 00:31:47

线上服务器应用--文件同步方案Rsync+sersync的相关文章

企业实时同步方案----Rsync+Sersync

在博文企业实时同步方案----Sersync介绍中我们详细介绍了Sersync的原理,设计架构以及和 Inotify 等等的优势区别.这里我就带大家一起来做一下 Rsync +Sersync 这个同步分发架构案例. 实验环境介绍: 内核版本:2.6.32-431.el6.x86_64 系统采用最小化安装,系统经过了基本优化,selinux为关闭状态,iptables为无限制模式 源码包存放位置:/root Rsync客户端+Sersync服务器(SERSYNC),承担角色MASTER,IP:17

linux系统中Rsync文件同步方案

linux服务器下Rsync文件同步配置 Rsync(remote synchronize) 远程数据同步工具,可以使用"Rsync算法"同步本地和远程主机之间的文件.Rsync的好处是只同步两个文件不同的部分,相同的部分不在传递.类似于增量备份,这使的在服务器传递备份文件或者同步文件. crontab配合rsync 使用可达到定时备份同步任务. Rsync部署环境1.服务器准备| Host | IP | ----------|| Server | 192.168.60.110 | -

烂泥:linux文件同步之rsync学习(一)

本文由秀依林枫提供友情赞助,首发于烂泥行天下. 这几天刚好有空就打算开始学习linux下的文件同步软件rsync,在学习rsync时,我们可以分以下几个步骤进行: 1. rsync是什么 2. rsync的工作原理 3. rsync优点 4. rsync认证方式 5. 安装rsync 6. rsync命令参数详解 7. 配置rsync 8. rsync的启动与关闭 9. rsync同步实例 说明:rsync服务器与客户端使用的OS均为:centos 6.5 64bit. 一.rsync是什么 在

Linux文件同步工具-rsync

Linux文件同步工具-rsync 安装包 yum install -y rsync rsync常用选项 -a:归档模式,表示递归方式传输文件,并保持所有属性:通-rlptgoD:-r:同步目录时要加上,类似cp时加R:-v:同步时显示一些信息,让我们知道同步国创:-l:保留软链接:-L:同步软链接时会把源文件给同步:-p:保持文件权限属性:-o:保持文件的属主:-g:保持文件的属组:-D:保持设备文件信息:-t:保持文件的时间属性:--delte:删除DEST中SRC没有的文件:--exclu

Netty简单应用与线上服务器部署_netty视频

Netty简单应用与线上服务器部署 课程学习地址:http://www.xuetuwuyou.com/course/198 课程出自学途无忧网:http://www.xuetuwuyou.com 一.开发环境 4.1.11.Final   jdk1.8 maven 3.2 Spring 4.3.9 二.适合人群 ①想深入学习java ClassLoader ②想在线上linux服务器上运行netty或Springboot服务 三.课程目标 ①掌控ClassLoader ②学会编写shell脚本

关于线上优化服务器视频笔记1-----快速部署线上服务器

线上linux服务器优化经验 2.线上服务器网络安全配置与系统登录安全配置 2.1.授权用户登录与sudo的设定 /etc/sudoers 文件 <user list> <host list> = <operator list> <tag list> <command list> 常见配置: Mbb ALL=(ALL) NOPASSWD:ALL 2.2.ssh登陆登陆经验 备份sshd配置文件 Cp /etc/ssh/sshd_config /e

关于线上优化服务器视频笔记1-----调优线上服务器

linux服务器调优的经验 目录: 1.系统故障排除思路 重视报错信息 永远不要忘记日志文件 分析.定位.解决问题 2.影响linux性能的因素 服务器硬件因素 操作系统的相关因素 程序因素 3.系统性能优化工具 Cpu性能优化工具 vmstat,iosta,sar 内存性能检测工具 free,top,sar,pidstat 磁盘性能评估工具 iostat,sar 网络性能分析工具 ping,mtr,netstat 4.系统性能分析与标准 5.性能调优的思路与技巧分享 几个故障鼓励案例和性能优化

记录一次linux线上服务器被黑事件

1.原因:本来在家正常休息了,我们放在上海托管机房的线上服务器突然蹦了远程不了,服务启动不了,然后让上海机房重启了一次,还是直接挂了,一直到我远程上才行. 2.现象:远程服务器发现出现这类信息 Hi, please view: http://pastie.org/pastes/10800563/text?key=hzzm4hk4ihwx1jfxzfizzq for further information in regards to your files!Hi, please view: http

Node.js线上服务器部署与发布

第1章 课程预热对整个部署思路进行全流程介绍,通过 5 个不同类型项目,来演示从本地的仓库到最终线上稳定运行的整个项目部署发布流程,来帮助始终编程在一线的前端或者后端工程师,甚至是有 Coding 能力的产品经理,从操作流程和架构形态上,掌握从零开始的项目上线环节,掌握这关键一步,跨过去前端到后端,本地到线上,开发到生产...1-1 为什么是全栈最后一公里1-2 搭建线上生产环境需要做什么 第2章 待部署的 5 个本地 Nodejs 项目分别介绍五个技术架构和产品形态的项目背景,一个 Nodej