rsync + Sersync 实现增量同步
需求:同步服务器数据到本地
环境:已配置openvpn 让服务器与本地服务器可以处在同一网络环境
服务器:客户端(192.168.0.67) 服务端(192.168.0.66)
解决方案:监听服务器端文件夹增删改,推送实时变化数据到客户端,达到备份服务端数据的需求
客户端配置
需安装rsync
-
首先卸载本机rsync
yum remove -y rsync
-
安装rsync
yum install -y rsync # 查看当前版本 rsync --version
-
编辑相应配置文件
vim /etc/rsyncd.conf # 配置文件如下 #rsyncd.conf start## uid = root gid = root use chroot = no max connections = 200 timeout = 300 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log ignore errors read only = false list = false auth users = rsync_backup secrets file = /etc/rsyncd.secrets [backup] # 需要备份的路径 path = /backup ##rsync_config____________end
-
写登录验证密码文件
echo "rsync_bakup:123456" /etc/rsyncd.secrets # 更改文件权限 chmod 600 /etc/rsyncd.secrets
-
启动服务
rsync --daemon # 关闭服务 pkill rsync
-
开放873 端口访问权限
firewall-cmd --zone=public --add-port=873/tcp --permanent # 重启防火墙 firewall-cmd --reload
-
添加访问主机host
vim /etc/hosts # 添加: '192.168.0.66 local-66' 到文件末尾
-
文件传输失败查看日志,并相应解决
tail -f /var/log/rsyncd.log
客户端配置结束
服务端配置
需安装rsync ,sersync
-
首先卸载本机rsync
yum remove -y rsync
-
安装rsync
yum install -y rsync
-
写登录密码文件(没有文件先进行创建)
echo "123456" /etc/rsyncd.password # 设置密码文件权限 chmod 600 /etc/rsyncd.password
-
下载sersync
wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz # 若无法下载则到浏览器下载然后再复制到服务器
-
解压并将对应文件拷贝至对应文件夹
mkdir -p /application/sersync/{bin,conf,logs} tar zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz mv GNU-Linux-x86/sersync2 /application/sersync/bin mv GNU-Linux-x86/confxml.xml /application/sersync/conf
-
配置环境变量
vim /etc/profile.d/sersync.sh # 添加如下内容
#!/bin/sh export PATH=$PATH:/application/sersync/bin
source /etc/profile.d/sersync.sh
-
备份配置文件然后修改
cp /application/sersync/conf/confxml.xml /application/sersync/conf/confxml.xmlbk vim /application/sersync/conf/confxml.xml # 修改成如下内容
<?xml version="1.0" encoding="ISO-8859-1"?> <head version="2.5"> <!--设置本地IP和端口--> <host hostip="localhost" port="8008"></host> <!-- 开启DUBUG模式--> <debug start="false"/> <!-- 开启xfs文件系统--> <fileSystem xfs="false"/> <!-- 同步时忽略推送的文件(正则表达式),默认关闭--> <filter start="false"> <exclude expression="(.*)\.svn"></exclude> <exclude expression="(.*)\.gz"></exclude> <exclude expression="^info/*"></exclude> <exclude expression="^static/*"></exclude> </filter> <!-- 设置要监控的事件--> <inotify> <!-- 若不监听删除操作 设置为false--> <delete start="false"/> <!-- 设置为false 将不会监听到文件夹下发生的变化--> <createFolder start="true"/> <!-- inotify监控参数,对于大多数应用,可以把createFile设置为false来提高性能,减少rsync通讯,因为拷贝文件到监控目录会产生create事件与close_write事件,所以如果关闭create事件,只监控文件拷贝时结束的事件close_write,同样可以实现文件完整同步。--> <createFile start="false"/> <closeWrite start="true"/> <moveFrom start="true"/> <moveTo start="true"/> <attrib start="false"/> <modify start="false"/> </inotify> <sersync> <!-- 本地监视目录路径 --> <localpath watch="/application/rsync/data"> <!--定义同步Server ip和模块 --> <remote ip="192.168.0.67" name="backup"/> </localpath> <rsync> <!-- rsync指令参数 --> <commonParams params="-artuz"/> <!-- rsync同步认证 --> <auth start="true" users="rsync_backup" passwordfile="/etc/rsyncd.password"/> <!-- 设置rsync远程服务端口,非默认端口需要打开自定义(若开启rsync+ssh, 则这里需定义SSH端口) --> <userDefinedPort start="false" port="874"/><!-- port=874 --> <!-- 设置超时时间 --> <timeout start="false" time="100"/><!-- timeout=100 --> <!-- 设置rsync+ssh加密传输模式,默认关闭,开启需设置SSH加密证书 --> <ssh start="false"/> </rsync> <!-- sersync传输失败日志脚本路径,每隔60会重新执行该脚本,执行完毕会自动清空。--> <failLog path="/application/sersync/logs/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once--> <!-- 设置rsync定时传输,默认关闭 --> <crontab start="false" schedule="600"><!--600mins--> <crontabfilter start="false"> <exclude expression="*.php"></exclude> <exclude expression="info/*"></exclude> </crontabfilter> </crontab> <!-- 设置sersync传输后调用name指定的插件脚本,默认关闭 --> <plugin start="false" name="command"/> </sersync> <!-- 插件脚本范例 --> <plugin name="command"> <param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix--> <filter start="false"> <include expression="(.*)\.php"/> <include expression="(.*)\.sh"/> </filter> </plugin> <!-- 插件脚本范例 --> <plugin name="socket"> <localpath watch="/opt/tongbu"> <deshost ip="192.168.138.20" port="8009"/> </localpath> </plugin> <plugin name="refreshCDN"> <localpath watch="/data0/htdocs/cms.xoyo.com/site/"> <cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/> <sendurl base="http://pic.xoyo.com/cms"/> <regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/> </localpath> </plugin> </head>
-
启动Sersync
/application/sersync/bin/sersync2 -d -r -o /application/sersync/conf/confxml.xml
-
测试
cd /application/rsync/data for f in `seq 10`;do touch $f;done # 完成后查看服务端对应模块路径下是否有相应文件,若同步表示成功。
服务端配置结束