Linux使用sersync监控并同步服务器文件

  • 内容
  • 评论
  • 相关

规矩了,楼顶放猫。

简单说一下sersync的作用,背景我就不介绍了,有兴趣的自行了解吧。sersync是结合了inotify监控以及rsync同步的一个工具。

inotify:监控目录变化
rsync:同步目录所有文件

如果单单使用rsync去同步的目录的话,就需要每次都重新将目录同步一遍,当目录内容较多的话,这种做法明显是低效率和浪费性能的。我们实际上要做的是,仅仅将目录中变化的文件做一个同步就行了,所以就需要两者结合。一个监控目录中那些文件发生了变化,一个只需要对变化的文件进行同步。没时间解释了,开车吧!

# 解压目录,这里你自己爱放哪就放哪,只是个例子
cd /usr/local

# 下载sersync:
wget https://github.com/wsgzao/sersync/raw/master/sersync2.5.4_64bit_binary_stable_final.tar.gz

# 解压
tar xzf sersync2.5.4_64bit_binary_stable_final.tar.gz

# 改下目录名字吧兄弟
mv GNU-Linux-x86/ sersync

cd sersync

进入解压目录后,可以看见两个文件:
confxml.xml   //监控配置文件
sersync2      //增量同步全靠这货

我们先来设置主动同步的服务器的配置文件:

<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
    <host hostip="localhost" port="8008"></host>
    <debug start="false"/>
    <fileSystem xfs="true"/>
    <filter start="false">
		<exclude expression="application/sessions/*"></exclude>
		<exclude expression="application/log/*"></exclude>
    </filter>
    <inotify>
		<delete start="true"/>
		<createFolder start="true"/>
		<createFile start="true"/>
		<closeWrite start="true"/>
		<moveFrom start="true"/>
		<moveTo start="true"/>
		<attrib start="false"/>
		<modify start="true"/>
    </inotify>

    <sersync>
		<localpath watch="/web/">
		    <remote ip="192.168.0.24" name="sersync_test"/>
		</localpath>
		<rsync>
		    <commonParams params="-artuz"/>
		    <auth start="false" users="root" passwordfile="/etc/rsync.pas"/>
		    <userDefinedPort start="false" port="874"/><!-- 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>
</head>
配置一目了然:
debug:调试模式,一般会直接输出执行日志
filter:过滤规则,定义了过滤规则之后会过滤这种目录
inotify:监控开关,文件增删查改监控的开关
sersync:文件同步设置
--watch:监控本地目录的路径
--remote
----ip:需要同步文件的目标服务器ip
----name:目标服务器rsyncd.conf定义同步的模块名
下面还有一些其他配置,根据自己的需要添加,这里不一一叙述了

然后我们去目标服务器里面设置rsync的同步模块,并开启rsync服务

# 编辑rsync
sudo vim /etc/rsyncd.conf
uid=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

# 同步模块,刚才主实例配置的模块名就是这里的模块名
[sersync_test]
path=/web/
comment = rsync passport
ignore errors = yes
read only = no
hosts allow = *
hosts deny = *
# 通过守护进程的方式启动目标服务器的rsync
/usr/bin/rsync --daemon

回到主实例,开启sersync服务

# 通过守护进程的方式开启sersync
sudo /usr/local/sersync/sersync2 -o /usr/local/sersync/confxml.xml -d > /dev/null 2 > &1

开启之后可以在监控同步的目录中增加、编辑或删除文件,然后看看目标服务器对应的同步目录是否有正常更新。