• 21.09.03 补充

不建议这么搞。Sersync 作者不维护了,而且也不能同步 .开头的系统文件,原因是linux系统在编辑文件时会生成点开头的临时文件,Sersync把 .*的文件过滤了不会同步

本文参考资料

rsync安装
rsync+sersync多台同步
sersync高级配置说明

实现效果

三台服务器任意一台增删文件, 三台服务器文件均保持实时一致

服务器架构

服务器为主从架构 :

  • 主服务器 A : 172.16.0.1
  • 从服务器 B : 172.16.0.2
  • 从服务器 C : 172.16.0.3

文件同步逻辑:

主服务器 A 增删文件,向服务器 B 和 C 推送,文件保持一致


从服务器 B 增删文件,向主服务器 A 推送,A 增删后向 C 推送


从服务器 C 增删文件,向主服务器 A 推送,A 增删后向 B 推送

Rsync安装使用

ubuntu自带了rsync服务,我们把它放到 xinetd里面
所有的服务器都要先配置好 Rsync!

安装xinetd

apt-get install xinetd

修改rsync的运行方式

改为inetd

RSYNC_ENABLE=inetd

/etc/default/rsync 

修改一下rsync的启动配置文件

service rsync
{
    disable         = no
    wait            = no
    socket_type     = stream
    user            = root
    server          = /usr/bin/rsync
    server_args     = --daemon
    log_on_failure += USERID
}

/etc/xinetd.d/rsync

重启xinetd

/etc/init.d/xinetd restart

开始配置rsync

如果 /etc/ 目录下没有rsyncd.conf配置文件 先复制一份样本文件

cp /usr/share/doc/rsync/examples/rsyncd.conf /etc/

先说一下重要的几个点

[abc] 
# 括号内是 某一个同步文件夹的“名称”,这意味着可以有多个文件夹用不同名称进行同步
path  
# 需要同步的文件夹路径
read only 
# 需要删文件请填 no
uid 
# 设置用户 建议root 不然同步过来的文件权限会变,不介意权限的可以选其他用户
gid 
# 设置所属组
auth users 
# 需要授权的话 填自定义用户名, 要在下面密码文件内,
secrets file = /etc/rsyncd.secrets
# 格式:username:secret
strict modes = yes
# 注意 这个设置了yes后,密码文件要只能被程序读的权限才可以,不然会授权失败 ps:程序以root用户运行,该文件就只能被root读取才可以

上配置文件,详细深度化设置百度

[ftp]

comment = public archive
path = /var/www/pub
use chroot = yes
lock file = /var/lock/rsyncd
read only = no
list = yes
uid = root
gid = root
auth users = u01
secrets file = /etc/rsyncd.secrets
strict modes = yes
ignore errors = no
ignore nonreadable = yes
transfer logging = no
timeout = 600
refuse options = checksum dry-run
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

/etc/rsyncd.conf

测试Rsync

在另一台服务器(可能还没配置)上 测试配置好的服务器,依次用下面命令全部测试一遍,直到所有服务器的 Rsync正常

rsync -vzrtopg --progress  172.16.0.1::ftp ./ 
# 开启授权的话,输入密码文件中的密码
# 把172.16.0.1名称为 ftp 下的文件同步到当前目录下

Sersync使用

下载

https://code.google.com/archive/p/sersync/
[备份] GNU-Linux-x86.zip

解压后得到一个二进制文件和一个配置xml文件

配置文件

从服务器在配置文件,指向主服务器
主服务器在配置文件,指向多个从服务器

配置分俩部分
第一部分设置指向的服务器

  • localpath => watch: 需要 监视/同步 的目录
  • remote => ip: 指向的服务器

如果你要指向多个服务器(比如主服务器的配置需要指向多个从服务器)就按照注释掉的格式添加多个remote即可

  • remote => name: 指向服务器的 rsync 的名称
<sersync>
    <localpath watch="/var/www/pub">
        <remote ip="172.17.195.98" name="ftp"/>
        <!--<remote ip="192.168.8.39" name="tongbu"/>-->
        <!--<remote ip="192.168.8.40" name="tongbu"/>-->
    </localpath>
......
</sersync>

./confxml.xml 

第二部分设置连接指向服务器的rsync的参数

  • rsync如果设置了授权, 以下的 auth=>start 要设置为 true, 否则保持false即可
  • auth=>usersrsyncauth users用户名
  • auth=>passwordfile 填密码文件的路径,同样的要只读权限,注意这里要新建一个密码文件,因为里面只放密码,不要用户名
<sersync>
    ......
    <rsync>
        <commonParams params="-artuz"/>
        <auth start="true" users="u01" passwordfile="/etc/rsyncd.key"/>
        <userDefinedPort start="false" port="874"/><!-- port=874 -->
        <timeout start="false" time="100"/><!-- timeout=100 -->
        <ssh start="false"/>
    </rsync>
    ......
</sersync>

./confxml.xml 

将所有的服务器按此配置完毕

测试 sersync+rsync效果

首先检查防火墙对应端口是否放行!
然后依次启动各个服务器的sersync 下面的路径取决于你把他们放在哪

运行参数

  • -d daemon模式运行
  • -r 递归模式运行
  • -o 指定配置文件

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

运行成功后, 在各个服务器的同步文件夹内 依次创建 删除文件 3台服务器全部实时同步