目录
sersync介绍
案例信息
操作步骤
服务端部署
客户端部署
创建存储目录
安装sersync
修改配置文件
启动服务
停止服务
测试
sersync介绍
sersync是一个基于inotify+rsync的实时文件同步工具,通过监控目录的变动达到实时同步的目的。
案例信息
拓扑图:
需求说明:
客户端监控/data文件夹,在该文件夹文件变动时同步到服务器。
操作步骤
服务端部署
rsync服务端具体部署步骤请参考我的另外一篇文章。rsync备份服务案例-CSDN博客https://blog.csdn.net/wangweinan_5566/article/details/143210674
客户端部署
创建存储目录
创建用来存储数据的目录/data,并创建一些文件充当数据。
mkdir /data
touch {1..10}.txt
安装sersync
sersync包中只有脚本文件和xml配置文件,不需要安装,根据需要自行放置软件的位置。
sersync软件下载链接:
https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gzhttps://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz
软件包上传到服务器中并解压。
[root@nfs01 ~]# tar -zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz
GNU-Linux-x86/
GNU-Linux-x86/sersync2
GNU-Linux-x86/confxml.xml
创建用于存放软件的目录,并将软件复制到目录中。
[root@nfs01 ~]# mkdir -p /app/tools/sersync/{bin,conf}
[root@nfs01 ~]# cp GNU-Linux-x86/sersync2 /app/tools/sersync/bin/
[root@nfs01 ~]# cp GNU-Linux-x86/confxml.xml /app/tools/sersync/conf/
[root@nfs01 ~]# tree /app
/app
└── tools
└── sersync
├── bin
│ └── sersync2
└── conf
└── confxml.xml
修改配置文件
修改/app/tools/sersync/confxml.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="8008"></host>
<debug start="false"/>
<fileSystem xfs="false"/>
<filter start="false">
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="false"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="false"/>
<modify start="false"/>
</inotify>
<sersync>
<localpath watch="/data"><!--watch:监控目录-->
<remote ip="172.16.1.41" name="sync"/><!--ip:服务器地址 name:rsync服务器模块名-->
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-avz"/><!--params:rsync命令参数-->
<auth start="true" users="rsync_backup" passwordfile="/etc/rsync.client"/><!--start:用户验证 users:用户名 passwordfile:密码文件-->
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/var/rsync_fail_log" timeToExecute="60"/><!--default every 60mins execute once--><!--path:失败日志文件-->
<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>
<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>
启动服务
查看启动选项
[root@nfs01 bin]# ./sersync2 -h
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
_______________________________________________________
参数-d:启用守护进程模式
参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
c参数-n: 指定开启守护线程的数量,默认为10个
参数-o:指定配置文件,默认使用confxml.xml文件
参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
参数-m:单独启用其他模块,使用 -m socket 开启socket模块
参数-m:单独启用其他模块,使用 -m http 开启http模块
不加-m参数,则默认执行同步程序
启动服务
[root@nfs01 conf]# /app/tools/sersync/bin/sersync2 -rdo /app/tools/sersync/conf/confxml.xml
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
option: -r rsync all the local files to the remote servers before the sersync work
option: -d run as a daemon
option: -o config xml name: /app/tools/sersync/conf/confxml.xml
daemon thread num: 10
parse xml config file
host ip : localhost host port: 8008
daemon start,sersync run behind the console
use rsync password-file :
user is rsync_backup
passwordfile is /etc/rsync.client
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
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /data && rsync -avz -R --delete ./ rsync_backup@172.16.1.41::sync --password-file=/etc/rsync.client >/dev/null 2>&1
run the sersync:
watch path is: /data
设置开机启动,修改/etc/rc.local文件
[root@backup sync]# echo "/app/tools/sersync/bin/sersync2 -rdo /app/tools/sersync/conf/confxml.xml" >> /etc/rc.local
注:
因为没有给sersync服务写systemctl配置文件,所以不能通过systemctl命令进行管理
停止服务
先查找服务的进程号,再kill进程。
[root@nfs01 conf]# ps -ef | grep sersync2
root 8606 1 0 17:44 ? 00:00:00 /app/tools/sersync/bin/sersync2 -rdo /app/tools/sersync/conf/confxml.xml
root 8708 4854 0 17:49 pts/0 00:00:00 grep --color=auto sersync2
[root@nfs01 conf]# kill -9 8606
测试
启动服务后,客户端会直接将/data下的文件传输到服务端。
[root@backup sync]# ls
10.txt 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
客户端创建文件,查看服务端是否更新
#客户端创建20.txt文件
[root@nfs01 conf]# touch 20.txt /data
[root@nfs01 conf]# ls /data
10.txt 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
#服务端自动更新
[root@backup sync]# ls
10.txt 1.txt 20.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
客户端删除文件,查看服务端是否更新
#客户端删除1-5.txt文件
[root@nfs01 conf]# rm -rf /data/{1..5}.txt
[root@nfs01 conf]# ls /data/
10.txt 20.txt 6.txt 7.txt 8.txt 9.txt
#服务端自动更新
[root@backup sync]# ls
10.txt 20.txt 6.txt 7.txt 8.txt 9.txt