sersync+rsync代码增量同步部署

参考: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 [email protected]::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: -

你可能感兴趣的:(Linux)