sersync 是 周洋 童鞋写的一个利用 inotify 与 rsync 对服务器进行实时同步软件,相对于直接使用 rsync 来同步来说,它在有大量文件需要同步的时候表现得更加快速,因使用了 inotify 用于监控文件系统事件,省去大量对比文件的时间。这个方案最大的优点就是只针对文件不同的部分进行同步,同时支持使用多线程进行同步,尤其在同步较大文件时,能够保证向多个节点服务器实时保持同步状态。还可以根据需要开启隔一段时间整体同步一次的选项。
起初在文件量小大、而且对实时性要求不高的时候,单独的 rsync 可以很好的满足需求。随便数据量的增大,对数据的实时性提出的新要求,开始全面采用 sersync 来实时向服务器的同步。
一、节点服务器端配置:
数据同步的目标服务器需要开启 rsync
6 | log file = /var/log/rsyncd.log |
7 | pid file = /var/run/rsyncd.pid |
8 | lock file =/var/run/rsyncd.lock |
14 | hosts allow = 192.168.1.3 |
运行 rsync 的守护进程,默认是加载 /etc/rsyncd.conf 默认不存在,需要新建。
1 | rsync --daemon --config=/etc/rsyncd.conf |
二、主服务器端配置:
下载编译好成二进制的 sersync 解压之后,有两个文件 confxml.xml sersync2 。其中 confxml.xml 是默认的配置文件
最初只有一台数据同步的目标服务器,用下面的配置就可以轻松实现
3 | < localpath watch = "/var/www/html1" > |
4 | < remote ip = "192.168.1.2" name = "html1" /> |
启动 sersync2 ,让sersync 实时同步之前先全部同步一次数据
需要向多个服务器同步时,只需要在目标服务器上启动 rsync 的守护进程,并把IP加到下面就可以了
2 | < localpath watch = "/var/www/html1" > |
3 | < remote ip = "192.168.1.2" name = "html1" /> |
4 | < remote ip = "192.168.8.5" name = "html1" />--> |
开始一直很错误地认为,可以用下面的配置来实时多个目录向多个服务器进行实时同步。后来仔细阅读了一下介绍,这个方法是行不通的,如果需要向多个不同的目录向多个不同的服务器同步,需要写多个配置文件,启动多个 sersync 进程并加载相应的配置文件。
3 | < localpath watch = "/var/www/html1" > |
4 | < remote ip = "192.168.1.2" name = "html1" /> |
8 | < localpath watch = "/var/www/html2" > |
9 | < remote ip = "192.168.1.3" name = "html2" /> |
13 | < localpath watch = "/var/www/html3" > |
14 | < remote ip = "192.168.1.4" name = "html3" /> |
比如有两个不同的目录, a 和 b ,需要相应的两个 sersync 的配置文件,启动两个 sersync 就可以实现