rsync-sersync配置

创建数据源服务器

1
docker run -itd --name nginx-source -v /websource:/www -p 80:80 -p 443:443 -p 873:873 nginx

安装 rsync

1
2
docker exec -it nginx-source bash
apt install rsync -y

创建密码文件

只存在于源服务器上,文件只保存密码,并且只有一行,不要有用户名,像amdin:123456是不对的,只保存123456即可

1
2
echo "123456" > /etc/rsync.verify
chmod 600 /etc/rsync.verify

配置备份服务器

需要与源服务器同步的多个服务器都按如下这样配置

创建备份端服务器

1
docker run -itd --name nginx-back -v /webback:/wwwback -p 81:80 -p 444:443 -p 874:873 nginx

在备份服务器上安装

1
2
docker exec -it nginx-back bash
apt -y install rsync

创建rsyncd.conf配置文件

rsyncd.conf配置文件在备份服务器上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#设置运行rsync 进程的用户
uid = root
#运行进程的组
gid = root
#ip这里指本机ip,即备份服务器的ip,可以省略
#address = 100.17.10.3
#本机端口,这里是875服务器的端口,如888,870等等只要不被占用,防火墙开启就可以
port = 873
#如果"use chroot"指定为true,那么rsync在传输文件以前首先chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺 点是需要以roots权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true(或yes)。
use chroot = yes
#最大连接数
max connections = 5
#CentOS7中yum安装不需指定pid file 否则报错
#pid file = /var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
#日志文件
log file = /var/log/rsyncd.log
#不同步的文件
#exclude = lost+found/
transfer logging = yes
#超时时间
timeout = 900
#同步时跳过没有权限的目录
ignore nonreadable = yes
#传输时不压缩的文件
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

#规则模块,可以多个规则模块,不可以重名
[wwwroot]
#同步的路径提前在备份服务器中创建好
path = /wwwback/
#规则描述,随便写
comment = rsync test
#忽略错误
ignore errors
#是否可以pull 设置服务端文件读写权限
read only = false
#是否可以push
#write only = false
#不显示服务端资源列表
list = false
#下面配置同步时候的身份,注意该身份是在rsync里面定义的,并非是本机实际用户。
#客户端获取文件的身份此用户并不是本机中确实存在的用户
#该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块
auth users = admin ljs
#用来认证客户端的秘钥文件 格式 USERNAME:PASSWORD
#秘钥文件权限一定需要改为600,这里配置填写的是备份服务器的账户文件。
secrets file = /etc/rsync.password
#允许的主机访问 *代表所有
hosts allow = *
#创建rsyncd.conf配置文件 结束

原理:在备份服务器上使用配置文件 /etc/rsyncd.conf 来启动rsync,创建备份账户(像admin:123456的形式),最后把rsync以deamon方式运行(往下看有运行方法)

自定义账户及密码,格式为user:password,每行一个
这个用户是虚拟用户,不是系统用户,只是用来验证同步操作是否合法

1
2
3
4
5
6
# 新建并添加一行
echo "admin:123456" > /etc/rsync.password
# 再增加一行
echo "ljs:123456" >> /etc/rsync.password
#设置权限
chmod 600 /etc/rsync.password

备份服务器上启动rsync

1
2
3
4
#加载备份服务器上的配置文件rsyncd.conf启动rsync服务
rsync --daemon --config=/etc/rsyncd.conf
#/etc/rsyncd.conf是缺省值,如果存在,则命令可以简写
rsync --daemon

备份测试

备份命令(在源服务器上执行同步命令)
把源服务器上的文件复制到备份服务器上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 注意:/www/ 表示同步www目录下的文件和文件夹,/www表示把www文件夹也同步过去
rsync -avz /www/ admin@100.17.10.3::wwwroot

# --delete 表示当备份服务器上有,而源服务器上没有的文件,在同步时会被删除
rsync -avz --delete /www/ admin@100.17.10.3::wwwroot

#后面的 --password-file=/etc/rsync.verify 就是源服务器上的密码验证文件
#此验证文件只存在源服务器上,记得开启600权限。
#如果不加此参数项,则要求自行输入密码123456
rsync -avz --delete /www/ admin@100.17.10.3::wwwroot --password-file=/etc/rsync.verify

#不需要同步的文件和目录可以加上参数 --exclude
rsync -avz /www/ --exclude=".svn" --exclude="bbb" admin@100.17.10.3::wwwroot

rsync -vzrtopg --progress /www/ admin@100.17.10.3::wwwroot --password-file=/etc/rsync.verify

到这里linux的rsync同步就配置成功了,接下来再介绍一款网上比较推荐的一个软件,rsync搭配sersync一起使用。

配置sersync

在源服务器上进行sersync的配置

1、上传sersync2.5.4_64bit_binary_stable_final.tar.gz到源服务器 /usr/local/ 目录下

1
2
3
4
5
6
7
cd /usr/local

#解压后在当前目录中会有一个 GNU-Linux-x86 文件夹
tar xvf sersync2.5.4_64bit_binary_stable_final.tar.gz

#文件夹名字改成sersync,里面有两个文件,一个是二进制文件sersync2 ,一个是配置文件confxml.xml
mv GNU-Linux-x86 sersync

2、修改confxml.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#修改sersync部分
<sersync>
#本地同步目录 监控源服务器上的目录变化
<localpath watch="/www/">
#rsync模块名称,可以配置多个
<remote ip="100.17.10.3" name="wwwroot"/>
<!--<remote ip="100.17.10.3" name="tongbu"/>-->
<!--<remote ip="130.170.10.31" name="py"/>-->
</localpath>
#修改rsync认证部分【rsync密码认证】
<rsync>
<commonParams params="-artuz"/>
<auth start="true" users="admin" passwordfile="/etc/rsync.verify"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
</sersync>

3、配置sersync开启sersync守护进程同步数据(运行如下命令)

1
2
3
4
5
/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml

# -o 指定/usr/local/sersync/confxml.xml作为配置文件
# -r 在实时监控前作一次整体同步
# -d 以守护进程方式在后台运行

4、测试
在源服务器上(watch=”/www/“)目录下添加文件 看备份服务器上有没有变化
5、sersync 参数项详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/usr/local/sersync/sersync2 -help
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
_______________________________________________________
参数-d:启用守护进程模式
参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
c参数-n: 指定开启守护线程的数量,默认为10个
参数-o:指定配置文件,默认使用confxml.xml文件
参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
参数-m:单独启用其他模块,使用 -m socket 开启socket模块
参数-m:单独启用其他模块,使用 -m http 开启http模块
不加-m参数,则默认执行同步程序

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

总结

1、源服务器上安装 sersync和rsync,其中rsync不需要配置文件/etc/rsyncd.conf,不需要后台运行,不需要用户名密码表文件/etc/rsync.password。sersync只需要配置文件confxml.xml和rsync密码验证文件/etc/rsync.verify

2、备份服务器上只安装rsync,只需要配置文件rsyncd.conf和用户名密码表/etc/rsync.password