服务器信息
系统:centos7.3
内核:3.10.0-514.el7.x86_64
selinux:关闭
iptables:开启
服务器 | IP |
---|---|
rsync-1 | 192.168.157.3 |
rsync-2 | 192.168.157.4 |
软件包信息
软件包 | 版本 |
---|---|
rsync | rsync-3.1.2-10.el7.x86_64 |
sersync | sersync2.5.4_64bit_binary_stable_final.tar.gz |
rsync
官网地址:https://rsync.samba.org/
官网最新版本:3.1.3
rsync是一个开源软件,提供了在类unix系统上的快速增量文件传输。
在文件传输过程中,rsync得益于自己的rsync算法,该算法通过扫描并计算出本地文件与远程文件之间的差异部分,仅将差异部分进行同步,这样尽可能的减少了同步时间。
rsync的功能点:
sersync
sersync2.5.4_64bit下载地址
sersync主要用于服务器同步,web镜像等功能。基于boost1.43.0,inotify api,rsync command.开发。目前常用的同步解决方案为rsync+inotify-tools
和google的开源项目Openduckbill
(依赖于inotify-tools),这两个都是基于脚本语言编写的。
sersync优点包括以下:
sersync2
,配合bin目录下的confxml.xml
配置文件,可以直接使用。confxml.xml
文件中配置开启即可按照时间段进行同步,而无需使用crontabsersync基于inotify开发,本质都是对目录,文件的监听,依赖于rsync进行文件同步。
sersync和inotify的区别与选择
sersync和inotify的区别详见该博主的博文https://www.xubaojin.com/post/35.html
,简单明了。
rsync的安装
在此使用centos自带的yum源进行安装
[root@rsync-1 ~]# rpm -qa | grep rsync
[root@rsync-1 ~]# yum install rsync -y
[root@rsync-1 ~]# rpm -qa | grep rsync
rsync-3.1.2-10.el7.x86_64
注:rsync-2同步安装
rsync的配置
因为是需要配合sersync进行使用的,需要将rsync配置为daemon方式运行。
一、修改rsync-1的配置文件/etc/rsyncd.conf
[root@rsync-1 ~]# cat /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# configuration example:
uid = root # 指定运行rsync daemon的用户
gid = root # 指定运行rsync daemon的组
use chroot = no
address = 192.168.157.3 # 指定监听地址
port = 873 # 默认监听端口
max connections = 0 #最大连接数,0为无限制
pid file = /var/run/rsyncd.pid # 指定pid文件
log file = /var/log/rsyncd.log # 指定日志文件
exclude = lost+found/ # 指定不同步的目录
ignore errors
#transfer logging = yes
#timeout = 900
#ignore nonreadable = yes
#dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
# [ftp]
# path = /home/ftp
# comment = ftp export area
[update] # update模块
path = /root/updatedir # update模块需要同步目录
comment = test rsync + sersync # update模块的简要说明
read only = no # 是否只读
list = no # 当用户查询该服务器上的可用模块时,是否列出该模块
auth users = rsync_daemon # 同步文件使用到的虚拟用户
secrets file = /etc/rsync_update.passwd # 指定该虚拟用户对应的密码文件,该文件权限为(400)
hosts allow = 192.168.157.4 # 指定可以连接该模块的主机(x.x.x.x x.x.x.x/x)
二、修改rsync-2的配置文件/etc/rsyncd.conf
[root@rsync-2 ~]# cat /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# configuration example:
uid = root # 指定运行rsync daemon的用户
gid = root # 指定运行rsync daemon的组
use chroot = no
address = 192.168.157.4 # 指定监听地址
port = 873 # 默认监听端口
max connections = 0 #最大连接数,0为无限制
pid file = /var/run/rsyncd.pid # 指定pid文件
log file = /var/log/rsyncd.log # 指定日志文件
exclude = lost+found/ # 指定不同步的目录
ignore errors
#transfer logging = yes
#timeout = 900
#ignore nonreadable = yes
#dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
# [ftp]
# path = /home/ftp
# comment = ftp export area
[update] # update模块
path = /root/updatedir # update模块需要同步目录
comment = test rsync + sersync # update模块的简要说明
read only = no # 是否只读
list = no # 当用户查询该服务器上的可用模块时,是否列出该模块
auth users = rsync_daemon # 同步文件使用到的虚拟用户
secrets file = /etc/rsync_update.passwd # 指定该虚拟用户对应的密码文件,该文件权限为(400)
hosts allow = 192.168.157.3 # 指定可以连接该模块的主机(x.x.x.x x.x.x.x/x)
注:在修改rsyncd.conf配置文件时,要去掉后面的 #开头注释语,或者另起一行,否则起不到注释作用
三、根据配置文件创建相应的目录、文件、防火墙规则
创建需要同步的目录
[root@rsync-1 ~]# mkdir /root/updatedir
[root@rsync-2 ~]# mkdir /root/updatedir
创建虚拟用户rsync_daemon
使用的密码文件/etc/rsync_update.passwd
该文件的权限必须为400
[root@rsync-1 ~]# echo "rsync_daemon:123456789" > /etc/rsync_update.passwd
[root@rsync-1 updatedir]# chmod 400 /etc/rsync_update.passwd
[root@rsync-2 ~]# echo "rsync_daemon:123456789" > /etc/rsync_update.passwd
[root@rsync-2 updatedir]# chmod 400 /etc/rsync_update.passwd
开通防火墙规则
[root@rsync-1 ~]# iptables -I INPUT -p tcp -m state --state NEW -m tcp -s 192.168.157.4 --dport 873 -j ACCEPT
[root@rsync-1 ~]# service iptables save
[root@rsync-2 ~]# iptables -I INPUT -p tcp -m state --state NEW -m tcp -s 192.168.157.3 --dport 873 -j ACCEPT
[root@rsync-2 ~]# service iptables save
启动rsyncd服务
[root@rsync-1 ~]# systemctl start rsyncd
[root@rsync-2 ~]# systemctl start rsyncd
查看端口
[root@rsync-1 ~]# ss -antuple | grep 873
tcp LISTEN 0 5 192.168.157.3:873 *:* users:(("rsync",pid=2320,fd=4)) ino:21550 sk:ffff880038b79f00 <->
简单测试
一、rsync-1
向rsync-2
同步
rsync-1服务器操作:
[root@rsync-1 updatedir]# ls
[root@rsync-1 updatedir]# touch file{1..5}
[root@rsync-1 updatedir]# rsync -av /root/updatedir/ [email protected]::update
Password:
sending incremental file list
./
file1
file2
file3
file4
file5
sent 314 bytes received 114 bytes 77.82 bytes/sec
total size is 0 speedup is 0.00
rsync-2服务器查看:
[root@rsync-2 updatedir]# ls
file1 file2 file3 file4 file5
二、rsync-2
向rsync-1
同步
rsync-2服务器操作:
[root@rsync-2 updatedir]# touch file{6..10}
[root@rsync-2 updatedir]# rsync -av /root/updatedir/ [email protected]::update
Password:
sending incremental file list
./
file10
file6
file7
file8
file9
sent 388 bytes received 114 bytes 111.56 bytes/sec
total size is 0 speedup is 0.00
rsync-1服务器查看:
[root@rsync-1 updatedir]# ls
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
至此,我们的rsync已经配置成功了。
安装完成了rsync后,我们需要配置sersync来对文件的变更进行实时监听,并触发rsync对变更的文件进行实时同步。
sersync安装
sersync下载
需要可以科学上网哦,或者在网上找别人下载好的资源。
获取到软件包后,上传到服务器解压。
[root@rsync-1 ~]# ls
sersync2.5.4_64bit_binary_stable_final.tar.gz updatedir
[root@rsync-1 ~]# tar zxf sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@rsync-1 ~]# ls GNU-Linux-x86/
confxml.xml sersync2
可以看到配置极其简单,一个二进制文件,一个配置文件。
sersync配置
一、rsync-1服务器配置:
[root@rsync-1 GNU-Linux-x86]# diff confxml.xml confxml.xml.origin
24,25c24,25
< <localpath watch="/root/updatedir">
< <remote ip="192.168.157.4" name="update"/>
---
> <localpath watch="/opt/tongbu">
> <remote ip="127.0.0.1" name="tongbu1"/>
31c31
< <auth start="true" users="rsync_daemon" passwordfile="/etc/rsync.pas"/>
---
> <auth start="false" users="root" passwordfile="/etc/rsync.pas"/>
密码文件配置
[root@rsync-1 GNU-Linux-x86]# echo 123456789 > /etc/rsync.pas
[root@rsync-1 GNU-Linux-x86]# chmod 400 /etc/rsync.pas
二、rsync-2服务器配置
[root@rsync-2 GNU-Linux-x86]# diff confxml.xml confxml.xml.origin
24,25c24,25
< <localpath watch="/root/updatedir">
< <remote ip="192.168.157.3" name="update"/>
---
> <localpath watch="/opt/tongbu">
> <remote ip="127.0.0.1" name="tongbu1"/>
31c31
< <auth start="true" users="rsync_daemon" passwordfile="/etc/rsync.pas"/>
---
> <auth start="false" users="root" passwordfile="/etc/rsync.pas"/>
密码文件配置
[root@rsync-2 GNU-Linux-x86]# echo 123456789 > /etc/rsync.pas
[root@rsync-2 GNU-Linux-x86]# chmod 400 /etc/rsync.pas
sersync启动
一、rsync-1服务器启动
[root@rsync-1 GNU-Linux-x86]# /root/GNU-Linux-x86/sersync2 -d -r -o /root/GNU-Linux-x86/confxml.xml
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
option: -d run as a daemon
option: -r rsync all the local files to the remote servers before the sersync work
option: -o config xml name: /root/GNU-Linux-x86/confxml.xml
daemon thread num: 10
parse xml config file
host ip : localhost host port: 8008
daemon start,sersync run behind the console
use rsync password-file :
user is rsync_daemon
passwordfile is /etc/rsync.pas
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)
Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /root/updatedir && rsync -artuz -R --delete ./ [email protected]::update --password-file=/etc/rsync.pas >/dev/null 2>&1
run the sersync:
watch path is: /root/updatedir
二、rsync-2服务器启动
[root@rsync-2 GNU-Linux-x86]# /root/GNU-Linux-x86/sersync2 -d -r -o /root/GNU-Linux-x86/confxml.xml
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
option: -d run as a daemon
option: -r rsync all the local files to the remote servers before the sersync work
option: -o config xml name: /root/GNU-Linux-x86/confxml.xml
daemon thread num: 10
parse xml config file
host ip : localhost host port: 8008
daemon start,sersync run behind the console
use rsync password-file :
user is rsync_daemon
passwordfile is /etc/rsync.pas
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)
Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /root/updatedir && rsync -artuz -R --delete ./ [email protected]::update --password-file=/etc/rsync.pas >/dev/null 2>&1
run the sersync:
watch path is: /root/updatedir
简单测试
[root@rsync-1 updatedir]# dd if=/dev/zero of=./rsync-1 bs=500M count=1
[root@rsync-2 updatedir]# dd if=/dev/zero of=./rsync-2 bs=300M count=1
查看两边服务器同步情况
rsync-1:
[root@rsync-1 updatedir]# du -sh *
500M rsync-1
300M rsync-2
rsync-2:
[root@rsync-2 updatedir]# du -sh *
500M rsync-1
300M rsync-2
至此,文件双向同步已经配置完成。