您的位置:首页 > 其它

sersync+rsync实现文件实时同步

2014-09-23 11:27 525 查看
需求:实现mysql服务器的异地备份,将linux上的mysql数据库导出的备份,同步到异地windows服务器上,来达到异地备份的效果

实现思路:sersync+rsync

mysql服务器作为 主服务器将监控文件路径中的文件同步到异地目标服务器,因此需要在mysql服务器上架设sersync,在异地目标服务器上配置rsync。



实现步骤:

1.在主服务上安装sersync

tar -zxvf sersync.tar.gz

cd GNU-Linux-x86

vim confxml.xml

修改如下部分:

<localpath watch="/root/sjzqWeb/WebTemp"/>

<remote ip="10.10.2.1" name="sjzqWeb"/>

<remote ip="10.10.2.2" name="sjzqWeb"/>

<remote ip="10.10.2.3" name="sjzqWeb"/>

</localpath>

表明要将主服务器上本地的/root/sjzq/WebTemp 路径下的文件,同步到远程服务器 10.10.2.1 ,10.10.2.2,10.10.2.3上的sjzqWeb模块。

由于rsync需要密码验证,因此需要将目标服务器上的rsync子模块sjzqWeb的密码文件保存到主服务器上,此处为/opt/1.pas,并将其权限改为600

<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="8008"></host>  "本地主机地址,hostip和port是针对插件的保留字段,对同步功能没有任何作用,保留默认即可."
<debug start="false"/><span style="white-space:pre">	</span>"是否打开调试信息"
<fileSystem xfs="false"/><span style="white-space:pre">	</span>"是否支持xfs文件系统"
<filter start="false"><span style="white-space:pre">	</span>"过滤,是否排除名称中含有制定字符串的文件的同步"
<exclude expression="(.*)\.bat"></exclude>
</filter>
<inotify><span style="white-space:pre">	</span>"本段是对内核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="/root/sjzqWeb/WebTemp"><span style="white-space:pre">	</span>"本地要监视的目录"
<remote ip="10.10.2.1" name="sjzqWeb"/><span style="white-space:pre">	</span>"目标端ip和rsync同步的模块"
<remote ip="10.10.2.2" name="sjzqWeb"/><span style="white-space:pre">	</span>
<remote ip="10.10.2.3" name="sjzqWeb"/><span style="white-space:pre">	</span>
</localpath>
<rsync><span style="white-space:pre">	</span>"sersync调用rsync时的参数配置"
<commonParams params="-artu"/>
<auth start="true" users="RemoteBackup" passwordfile="/opt/1.pas"/><span style="white-space:pre">	</span>"目标端rsync同步的模块sjzqWeb中的用户名以及验证的密码文件,需要保存到主服务器本地且权限600"
<userDefinedPort start="true" port="873"/><!-- port=874 --><span style="white-space:pre">	</span>"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--><span style="white-space:pre">	</span>"指定如果同步失败,记录到哪个文件,以便在60分钟后尝试连接"
<crontab start="false" schedule="600"><!--600mins--><span style="white-space:pre">	</span>"指定多长间隔执行一次完整同步"
<crontabfilter start="false"><span style="white-space:pre">	</span>"过滤文件,同上"
<exclude expression="*.bat"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync>

<plugin name="command"><span style="white-space:pre">	</span>"扩展插件功能的配置举例"
<param prefix="/bin/sh" suffix="" ignoreError="true"/>  <!--prefix /opt/tongbu/mmm.sh suffix-->
<filter start="false">
<include expression="(.*)\.php"/>
<include expression="(.*)\.sh"/>
</filter>
</plugin>
</head>

要注意的有这么几个地方:

1,本地IP和端口

2,本地同步路径

3,远程主机的IP

4,是否开启密码认证

5,重试间隔

6,如果有多个目录需要监视和同步,则建立多个xml配置文件,用sersync -o file.xml分别执行

运行Sersync与Sersync启动参数

sersync会对目录进行监控,将变化的目录或文件同步到远程服务器。sersync是递归监控的,如果有多级目录,都会同步到远程服务器。常用启动方式如下:

1).在主服务器上开启sersync守护进程,使sersync在后台运行,开启实时同步。

./sersync -d

过程如下:

[root@localhost GNU-Linux-x86]# ls

confxml.xml sersync2

[root@localhost GNU-Linux-x86]# ./sersync2 -d

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

daemon thread num: 10

parse xml config file

host ip : localhost host port: 8008

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)

please according your cpu ,use -n param to adjust the cpu rate

run the sersync:

watch path is: /root/sjzqWeb/WebTemp表明,sersync已经开启,可以在本地监控路径下建立文件,查看远程是否同步成功。

2).在开启实时监控的之前对主服务器目录与远程目标机目录进行一次整体同步

./sersync -r

如果需要将sersync运行前,已经存在的所有文件或目录全部同步到远程,要以-r参数运行sersync,将本地与远程整体同步一次。

如果设置了过滤器,即在xml文件中,filter为true,则暂时不能使用-r参数进行整体同步。-r参数将会无效

3).查看启动参数帮助

./sersync --help

4).指定配置文件

./sersync -o XXXX.xml

对于sersync使用可执行文件目录下的默认配置文件confxml.xml,如果需要使用另一个配置文件,可以使用-o参数指定其它配置文件。

5).指定默认的线程池的线程总数

./sersync -n num

例如 ./sersync -n 5 则指定线程总数为5,如果不指定,默认启动线程池数量是10,如果cpu使用过高,可以通过这个参数调低,如果机器配置较高,可以用-n跳高线程总数。

6).不进行同步,只运行插件

./sersync -m pluginName

例如./sersync -m command,则在监控到文件事件后,不对远程目标服务器进行同步,而是直接运行command插件。

7).多个参数可以配合使用

./sersync -n 8 -o abc.xml -r -d

表示,设置线程池工作线程为8个,指定abc.xml作为配置文件,在实时监控前作一次整体同步,以守护进程方式在后台运行。

8).通常情况下,对本地到远程整体同步一遍后,在后台运行实时同步。

./sersync -r -d

2.目标服务器端rsync配置

由于此处的目标服务器为windows,因此需要安装cygwin才能利用rsync,在此cygwin不作介绍。

C:\cygwin\etc\rsyncd.conf如下:

#cygrunsrv.exe -I "Rsync" -p /bin/rsync.exe -a "--config=/etc/rsyncd.conf --daemon --no-detach" -f "Rsync daemon service"
uid = 0
gid = 0
use chroot =false
strict modes = false
hosts allow = *
log file = /cygdrive/d/rsyncd.log

[sjzqWeb]
path = /cygdrive/d/Temp
read only = no
auth users = RemoteBackup
secrets file = /cygdrive/c/cygwin/home/Administrator/bb.pas
上面配置文件,表明允许主服务器(假设ip为192.168.0.100)访问,rsync同步模块名为[sjzqWeb],将同步过来的文件放入path指定的目录/cygdrive/d/Temp

如果有多台目标服务器,则每一台都需要进行类似的配置。

配置好之后,使用如下命令,开启rsync守护进程:

rsync --daemon

最后在防火墙中放开873端口,linux服务器关闭selinux
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: