- 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
配置文件
从服务器在配置文件,指向主服务器
主服务器在配置文件,指向多个从服务器
配置分俩部分
第一部分设置指向的服务器
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
=>users
填rsync
的auth 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台服务器全部实时同步