linux运维笔记:sersync实现数据实时同步
1-Sersync简介
Sersync是利用 inotify 技术实现所有服务器数据实时同步的解决方案,其中监控 sersync 所在服务器上文件系统的事件变化,rsync 是目前广泛使用的本地及异地数据同步工具,其优点是只对发生变化的目录数据操作,甚至是一个文件不同的部分进行同步,所以其优势大大超过使用挂接文件系统或scp 等方式进行镜像同步。
目前使用比较多的同步程序版本是 inotify-tools,另外一个是 Google 开源项目 openduckbill(依赖于 inotify-tools),这两个都是基于脚本语言编写的,其设计思路同样是采用 inotify + rsync 命令。
2-sersync优点
1.使用 C++编写,对 linux 系统文件产生的临时文件和重复的文件操作会进行过滤,在结合rsync同步的时候,会减少运行时消耗的本地及网络资源,因此速度更快。
2.相比其他项目,sersync 配置起来简单:在 http://code.google.com/p/sersync/downloads/list 处下载源码(分为 32 位版本和 64 位版本),其中 bin 目录下是已经编译好的二进制文件,配合 bin目录下的 xml 文件直接使用即可。
3.使用多线程同步(即可以并发同步多个不同文件),尤其在同步较大文件时,能够保证多个服务器实时保持同步状态。
4.Sersync自带出错处理机制,通过失败队列对出错的文件重新同步,如果仍旧失败,则每 10 个小时对同步失败的文件再重新同步。
5.Sersync自带crontab功能,只需在xml 配置文件中开启,即可按预先的配置,隔一段时间整体同步一次。
6.Sersync自带socket与http的协议扩展,可以满足有特殊需求的公司二次开发。
3-环境准备:
主机backup,配置好rsync服务端
主机nfs01,配置好rsync客户端
sersync安装在nfs01
4-软件包上传到/usr/local/下
[root@nfs01 ~]# cd /usr/local/sersync/bin/
[root@nfs01 bin]# tree /usr/local/sersync/
/usr/local/sersync/
├── bin
│ └── sersync
├── conf
│ ├── confxml.xml
│ └── confxml.xml.ori
└── logs
5-编辑配置文件
[root@nfs01 bin]# vim /usr/local/sersync/conf/confxml.xml
6-11行表示排除同步的数据,等价于 --exclude 功能,表示排除
<filter start="false">
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
12-21行是利用inotify的功能监控指定的事件,等价于 -e create,delete…… 表示指定监控事件信息
<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>
24-28行:推送到哪里 ,name=模块,ip是rsync服务器地址
<localpath watch="/ning"> #监控nfs01客户端目录
<remote ip="172.16.1.41" name="backup"/> #服务端backup的共享目录
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
29-35行 定义rsync推送时的参数信息,注意:不要有单词拼写错误 (true),否则程序不能正常启动,卡死
<rsync>
<commonParams params="-az"/>
<auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
6-启动sersync
[root@nfs01 bin]# chmod a+x sersync
[root@nfs01 bin]# ll
total 1768
-rwxr-xr-x. 1 root root 1810128 Oct 26 2011 sersync
[root@nfs01 bin]# ./sersync -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 bin]# ./sersync -dro /usr/local/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: -d run as a daemon
option: -r rsync all the local files to the remote servers before the sersync work
option: -o config xml name: /usr/local/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.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
chmod: cannot access `/application/logs/rsync_fail_log.sh': No such file or directory
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /ning && rsync -avz -R --delete ./ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password >/dev/null 2>&1
run the sersync:
watch path is: /ning
7-测试
[root@nfs01 bin]# touch /ning/ccc.png
[root@nfs01 bin]# ls /ning/
111.txt aaa.jpg bbb.jpg ccc.png
[root@backup ~]# ls /backup/
111.txt aaa.jpg bbb.jpg ccc.png