参考:https://blog.csdn.net/benma12345/article/details/83754428
https://blog.csdn.net/z13615480737/article/details/80985157
https://blog.csdn.net/sj349781478/article/details/79612138
https://www.cnblogs.com/gdou123czh/p/5713283.html
环境及目标:
系统:centos7
服务器:
目标服务器web2(rsync):
172.19.14.248
源服务器web1(sersync):172.19.14.249
目标:需要将web1 172.19.14.249
上的 /var/www/app_m/web
目录(包括子目录)实时同步到 web2 172.19.14.248 的/var/www/app_m/web
下
架构:rsync+sersync
rsync 为数据同步工具,sersync为目录监听工具,可监听到目录的增删改操作,两个工具同步可以实现实时增量同步目录。
安装步骤
(一)目标服务器(rsync):172.19.14.248
1、安装rsync
yum -y install rsync
2、创建rsyncd.conf配置文件
# vi /etc/rsyncd.conf
uid = root
gid = root
max connections = 10
address = 172.19.14.248
port = 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
[web]
path = /var/www/app_m/web
comment = Mirror to test
ignore errors = yes
use chroot = no
read only = no
list = yes
hosts allow = 172.19.14.249
[test] #此为测试,不需理会
path = /var/www/app_m/web2
comment = Mirror to test
ignore errors = yes
use chroot = no
read only = no
list = yes
hosts allow = 172.19.14.249
[xc] #此为测试,不需理会
path = /var/www/app_m/xc
comment = Mirror to test
ignore errors = yes
use chroot = no
read only = no
list = yes
hosts allow = 172.19.14.249
注:path后一定不要有空格
~~~
3、启动服务
/usr/bin/rsync --daemon /etc/rsyncd.conf
二)源服务器(sersync): 172.19.14.249
1、安装rsync
yum -y install rsync
2、同步数据 测试同步文件
rsync -avzP /var/www/app_m/web2 root@172.19.14.248::test/
--/var/www/app_m/web2 同步目录
--172.19.14.248 目的服务器,安装并配置完毕rsync
--test 模块自定义名称,即目的服务器的rsync配置文件中配置的
备注:如果手动同步失败,检查防火墙
,看看目标和源服务器的873端口是否开放
3、安装sersync
工具,实时触发rsync进行同步
#cd /usr/local/src
#wget https://sersync.googlecode.com/files/sersync2.5.4_64bit_binary_stable_final.tar.gz
#tar zxvf sersync2.5_32bit_binary_stable_final.tar.gz
GNU-Linux-x86/
GNU-Linux-x86/sersync2
GNU-Linux-x86/confxml.xml
#mv /usr/local/src/GNU-Linux-x86/ /usr/local/sersync/
#vi /usr/local/sersync/confxml.xml
备注:下载不到可另找网站下载上传到对应目录即可,迅雷
下载OK
需要修改如下几个地方:
<sersync>
<localpath watch="/var/www/app_m/web2">
<remote ip="172.19.14.248" name="test"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-artzuopg"/>
<!-- <auth start="false" users="root" passwordfile="/etc/rsync.pas"/> -->
<auth start="true" users="root" passwordfile="/etc/rsyncd.secret"/>
<userDefinedPort start="true" port="873"/><!-- port=874 -->
<timeout start="false" 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>
注:如果目的服务器的rsync有配置账号密码时,这里需要配置/etc/rsyncd.secret
4、启动sersync
/usr/local/sersync/sersync2 -r -d -o /usr/local/sersync/confxml.xml
此刻,可以测试~~~
匹配正则:
<filter start="true">
<exclude expression="^(.*)/Runtime/*"></exclude> 这是缓存目录,忽略掉,不监控
<exclude expression="^\.(.*)"></exclude>
<exclude expression="(.*)\.tmp"></exclude>
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
计划任务检测:
root@izuf64f1q2m5ld4tobwvkzz sancell-shop-server-php]# more /usr/local/sersync/check_sersyncweb.sh
#!/bin/sh
sersync="/usr/local/sersync/sersync2"
confxml="/usr/local/sersync/confxml_web.xml"
status=$(ps aux |grep 'sersync2'|grep -v 'grep'|wc -l)
if [ $status -eq 0 ];
then
$sersync -d -r -o $confxml &
else
exit 0;
fi
注意:
该文件检测同步是根据 linux中文件的三种time(atime,mtime,ctime)
简名 全名 中文名 含义
atime access time 访问时间 文件中的数据库最后被访问的时间
mtime modify time 修改时间 文件内容被修改的最后时间
ctime change time 变化时间 文件的元数据发生变化。比如权限,所有者等
如果涉及还原 用unzip -o
压缩覆盖时,文件的mtime将会回到之前,此刻,rsync的远程端将无法进行同步,需要去掉,因此建议配置文件中 去掉 u的参数
-u --update :仅在源mtime比目标已存在文件的mtime新时才拷贝。注意,该选项是接收端判断的,不会影响删除行为。
[root@izuf64f1q2m5ld4tobwvkzz xc]# stat xx.txt
File: ‘xx.txt’
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 1180166 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-12-10 09:58:07.000000000 +0800
Modify: 2019-12-09 17:57:47.000000000 +0800
Change: 2019-12-10 10:10:50.382686244 +0800
Birth: -