最近在做测试,服务器上的包要一台一台的上传,实在太麻烦,就想到了用rsync+sersync做个同步目录。
一、rsync介绍
RSYNC=remote sync 远程同步,高效。和scp类似,不过rsync可以边复制,边统计、比较,而scp则不能。
1. 特性:(1) 能保持原来文件的权限,时间,软硬链接等
(2) 第一次rsync会复制所有文件,第二次只复制修改过的文件,节省资源和时间。
(3) 传输过程中能实行压缩、解压缩操作,使用更少带宽。
(4) 安全,支持匿名传输。
2.数据同步方式
推:push 一台主机把数据推送给其他主机,服务器开销大,适合后端服务器少的情况。
拉:pull 所有主机定时去找服务器拉数据,会导致数据缓慢。
3.服务安装
将数据上传到test1服务器上,通过push 的方式推到test2服务器上。所以在test2上安装服务端和xinetd(超级互联网守护 进程服务)。如果rsync进来的是873端口,xinetd会通知它所管辖的rsync服务来做回应,之后就是两个rsync之间的通讯。
常用参数:-a (保存当前权限等信息)
-v (输出信息)
-z (资料传输时进行压缩)
服务端:test2
[root@test2 ~]# yum install rsync xinetd -y
[root@test2 ~]# rsync --daemon //启动rsync服务
客户端:test1
[root@test1 ~]# yum install rsync -y
测试:
[root@test1 ~]# useradd ksidc; echo ksidc:123456 | chpasswd //新建用户
[root@test1 ~]# setfacl -R -m user:ksidc:rwx /rsync-data/ //赋予权限
[root@test1 ~]# setfacl -R -m default:ksidc:rwx /rsync-data/
[root@test2 ~]# useradd ksidc; echo ksidc:123456 | chpasswd //新建用户
[root@test2 ~]# chown ksidc:ksidc /opt/
传输测试:
[root@test1 ~]# rsync -avz /rsync-data/ [email protected]:/opt/
4.非系统用户备份
使用系统配置文件/etc/rsyncd.conf来备份数据,创建备份账户,共享模块,最后把rsync以daemon方式允许。
配置文件:全局参数,模块参数
全局参数:对rsync服务器生效,如果和参数模块冲突,冲突的参数模块生效。
模块参数:定义需要通过rsync输出的目录定义的参数
[root@test2 ~]# vim /etc/rsyncd.conf
[root@test2 ~]# vim /etc/rsync.passwd
rsyncuser:123456
[root@test2 ~]# chmod 600 !$
测试:
[root@test2 ~]# pkill rsync //杀掉进程
[root@test2 ~]# systemctl start xinetd
[root@test2 ~]# systemctl enable xinetd
[root@test2 ~]# rsync --daemon --config=/etc/rsyncd.conf //加载配置文件
复制:
[root@test1 ~]# rsync -avz /rsync-data/ r[email protected]::test
密码处理:用参数指定密码文件,以后可不用输入密码
[root@test1 ~]# vim /etc/rsync.passwd
123456
[root@test1 ~]# rsync -avz --delete /rsync-data/ [email protected]::test
--password-file=/etc/rsync.passwd //红色参数意为去重
二、sersync介绍
sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或者某一个目录的名字,然后使用 rsync同步的时候,只同步发生变化的文件或者目录
1. rsync+inotify-tools
a、inotify只能记录下被监听的目录发生了变化(增,删,改)并没有把具体是哪个文件或者哪个目录发生了变化记录下来;
b、rsync在同步的时候,并不知道具体是哪个文件或目录发生了变化,每次都是对整个目录进行同步,当数据量很大时,整个目录同步非常耗时(rsync要对整个目录遍历查找对比文件),因此效率很低。
2. rsync+sersync
a、sersync可以记录被监听目录中发生变化的(增,删,改)具体某个文件或目录的名字;
b、rsync在同步时,只同步发生变化的文件或目录(每次发生变化的数据相对整个同步目录数据来说很小,rsync在遍历查找对比文件时,速度很快),因此效率很高。
3. 同步过程和原理:
1. 用户实时的往sersync服务器上写入更新文件数据;
2. 此时需要在同步主服务器上配置sersync服务;
3. 在另一台服务器开启rsync守护进程服务,以同步拉取来自sersync服务器上的数据;
通过rsync的守护进程服务后可以发现,实际上sersync就是监控本地的数据写入或更新事件;然后,在调用rsync客户端的 命令,将写入或更新事件对应的文件通过rsync推送到目标服务器
4. 配置sersync
[root@test1 ~]# tar -xf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/ //解压
[root@test1 ~]# cd /usr/local/
[root@test1 local]# mv GNU-Linux-x86/ sersync //将解压后的目录改名
[root@test1 local]# cd sersync/
[root@test1 sersync]# vim confxml.xm //编辑配置文件
line24 :本地目录
line25:rsync IP,共享模块名称
line31:用户和路径
开启sersync守护进程同步数据
[root@test1 sersync]# ./sersync2 -d -r -o /usr/local/sersync/confxml.xml
此时,数据已经同步
5. 添加脚本监控sersync是否正常运行
vim /opt/check_sersync.sh #编辑,添加以下代码
#!/bin/sh
sersync="/usr/local/sersync/sersync2"
confxml="/usr/local/sersync/confxml.xml"
status=$(ps aux |grep 'sersync2'|grep -v'grep'|wc -l)
if [ $status -eq 0 ];
then
$sersync -d -r -o $confxml &
else
exit 0;
fi
chmod +x /opt /check_sersync.sh #添加脚本执行权限
6. 补充:多实例情况
1、配置多个confxml.xml文件(比如:www、bbs、blog....等等)
2、根据不同的需求同步对应的实例文件
/usr/local/sersync/sersync2
-d -o /usr/local/sersync/www_confxml.xml
/usr/local/sersync/sersync2
-d -o /usr/local/sersync/bbs_confxml.xml