金山的一个居于inotify+rsync进行二次开发实现文件同步的小工具sersync,能够很方便的实现文件触发式同步

Inotify 是基于inode级别的文件系统监控技术,是一种强大的、细粒度的、异步的机制,它满足各种各样的文件监控需要,不仅限于安全和性能,内核要求2.6.13以上,inotify能监控非常多的文件系统事件,通过监控这些事件来监控文件是否发生变更,然后通过rsync来更新发生变更的文件

rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好

sersync利用inotify与rsync对服务器进行实时同步,其中inotify用于监控文件系统事件,rsync是目前广泛使用的同步算法,其优点是只对文件不同的部分进行操作,所以其优势大大超过使用挂接文件系统的方式进行镜像同步。由金山的周洋开发完成,是目前使用较多的文件同步工具之一。该工具和其他的工具相比有如下优点:

  • sersync是使用c++编写,由于只同步发生更改的文件,因此比其他同步工具更节约时间、带宽;
  • 安装方便、配置简单;
  • 使用多线程进行同步,能够保证多个服务器实时保持同步状态;
  • 自带出错处理机制,通过失败队列对出错的文件重新出错,如果仍旧失败,则每10个小时对同步失败的文件重新同步;
  • 自带crontab功能,只需在xml配置文件中开启,即可按您的要求,隔一段时间整体同步一次;
  • 自带socket与http协议扩展,你可以方便的进行二次开发;

步骤

1.主和从服务器都安装rsync,然后rsync的配置文件和密码文件配置都需要自己建立

vim /etc/rsyncd.conf 内容范例如下

id=root
gid=root
max connections=36000
use chroot=no
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock

[tlw.kk22.com]
path=/data0/web/tlw.kk22.com
#comment = 0019 web sersync
ignore errors = yes
read only = no
hosts allow = 192.168.1.237 192.168.1.238
hosts deny = *
auth users = root
secrets file = /etc/rsyncd.passwd

vim /etc/rsyncd.passwd 内容范例如下:

root:123456

需要设置密码文件为600权限,不然同步的时候可能会报错

2.启动rsync服务,一般有两种方式启动,通过daemon的方式启动或者xinetd集成启动方式

/usr/bin/rsync --daemon --config=/etc/rsyncd.conf

查看进程是否启动

ps -ef | grep rsync

3.安装sersync

下载sersync包,sersync2.5_64bit_binary_stable_final.tar.gz

解压后拷贝到安装路径   mv GNU-Linux-x86/*   /usr/local/sersync

4.serysnc配置文件设置,vim /usr/local/sersync/confxml.xml

......

<sersync>

<localpath watch="/data0/web/tlw.kk22.com">

<!—-设置监控的目录-->

<remote ip="192.168.1.227" name="tlw.kk22.com"/>

<!—设置从服务器的IP-->

<!--<remote ip="192.168.8.39" name="tongbu"/>-->

<!--<remote ip="192.168.8.40" name="tongbu"/>-->

</localpath>

<rsync>

<commonParams params="-artuz"/>

<auth start="true" users="root" passwordfile="/etc/rsyncd.secret"/>

<!—-设置同步的用户名和密码文件-->

<userDefinedPort start="true" port="873"/><!-- port=874 -->

<!—-设置rsync的端口,要和从那边开启的端口一致-->

<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="true" schedule="300"><!--600mins-->

<!—-设置300分钟全部同步一次-->

5.sersync密码文件配置

vim /etc/rsyncd.secret

123456

主服务器的密码配置文件不需要用户,如果添加用户的话同步的时候会报错

6.启动sersync

/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml

查看进程

ps -ef | grep sersync

将上面的命令添加进/etc/rc.local,以后开机自动启动

7.测试是否触发同步

8.脚本自动监控,防止sersync脚本关掉,自动的去检测该进程是否存在,不存在就启动,脚本内容如下:

#!/bin/bash

SERSYNC="/usr/local/sersync/sersync2"

CONF_FILE="/usr/local/sersync/confxml.xml"

STATUS=$(ps aux |grep 'sersync2'|grep -v 'grep'|wc -l)

if [ $STATUS -eq 0 ];

then

$SERSYNC -d -r -o $CONF_FILE &

else

exit 0;

fi

脚本写好以后,添加到计划任务中去

*/5 * * * * /var/script/check_sersync.sh > /dev/null 2>&1

9.skill掉sersync,测试脚本自动启动

04-29 04:19