rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。它使用所谓的“Rsync演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。所以通常可以作为备份工具来使用。
运行Rsync server的机器也叫backup server,一个Rsync server可同时备份多个client的数据;也可以多个Rsync server备份一个client的数据。Rsync可以搭配ssh甚至使用daemon模式。Rsync server会打开一个873的服务通道(port),等待对方rsync连接。连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。
基本特点:
可以镜像保存整个目录树和文件系统;
可以很容易做到保持原来文件的权限、时间、软硬链接等;
无须特殊权限即可安装;
优化的流程,文件传输效率高;
可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接;
支持匿名传输。
Inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。学习如何将 inotify 集成到您的应用程序中,并发现一组可用来进一步自动化系统治理的命令行工具。
二、服务端安装及配置
1、系统环境
操作系统: CentOS Linux release 7.4.1708 (Core)
服务器: 172.16.8.240
客户端: 172.16.8.111
2、查看Rsync所需安装包
rpm -aq |grep xinetd
rpm -aq |grep rsync
3、rsync安装
yum -y install rsync xinetd
4、创建配置文件
vim /etc/xinetd.d/rsync
service rsync
{
disable = no
flags = IPv6
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
5、修改配置文件发布共享目录
配置说明
#/etc/rsyncd.conf
#设置服务器信息提示文件名称,在该文件中编写提示信息
motd file = /etc/rsyncd.motd
#开启Rsync数据传输日志功能
transfer logging = yes
#设置日志文件名称,可以通过log format参数设置日志格式
log file =/var/log/rsyncd.log
#设置Rsync进程号保存文件名称
pid file =/var/run/rsyncd.pid
#设置锁文件名称
lock file =/var/run/rsync.lock
#设置服务器监听的端口号,默认为873
port = 873
#设置服务器所监听网卡接口的IP地址,这里服务器IP地址为192.168.0.254
address = 192.168.0.254
#设置进行数据传输时所使用的账户名称或ID号,默认使用nobody
uid = nobody
#设置进行数据传输时所使用的组名称或GID号,默认使用nobody
gid = nobody
#设置user chroot为yes后,rsync会首先进行chroot设置,将根映射到path参数路径下,对客户
#端而言,系统的根就是path参数所指定的路径。但这样做需要root权限,并且在同步符号
#连接资料时仅会同步名称,而内容将不会同步。
use chroot = no
#是否允许客户端上传数据,这里设置为只读。
read only = yes
#设置并发连接数,0代表无限制。超出并发数后,如果依然有客户端连接请求,则将会收
#到稍后重试的提示消息
max connections = 10
#模块,Rsync通过模块定义同步的目录,模块以[name]的形式定义,这与Samba定义共
#享目录是一样的效果。在Rsync中也可以定义多个模块
[common]
#comment定义注释说明字串
comment = Web content
#同步目录的真实路径通过path指定
path = /common
#忽略一些IO错误
ignore errors
#exclude可以指定例外的目录,即将common目录下的某个目录设置为不同步数据
#exclude = test/
#设置允许连接服务器的账户,账户可以是系统中不存在的用户
auth users = tom,jerry
#设置密码验证文件名称,注意该文件的权限要求为只读,建议权限为600,仅在设置auth users
#参数后有效
secrets file = /etc/rsyncd.secrets
#设置允许哪些主机可以同步数据,可以是单个IP,也可以是网段,多个IP与网段之间使用空
#格分隔
hosts allow=192.168.0.0/255.255.255.0
#设置拒绝所有(除hosts allow定义的主机外)
hosts deny=*
#客户端请求显示模块列表时,本模块名称是否显示,默认为true
list= false
接下来,通过echo的方式创建密码文件/etc/rsyncd.secrets,在该文件中输入两个账户:tom账户的密码是pass,jerry账户的密码是111。需要注意的是,密码文件不可以对所有的人开放可读权限,为了安全,建议设置权限为600。
创建服务器提示信息文件并向该文件中导入欢迎词。由于Rsync默认不是开机启动服务,为了实现开机启动Rsync服务,我们可以通过echo将rsync --daemon追加至开机启动文件/etc/rc.local。最后通过设置防火墙开启873端口的入站数据请求。
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# configuration example:
# uid = nobody
# gid = nobody
# use chroot = yes
# max connections = 4
# pid file = /var/run/rsyncd.pid
# exclude = lost+found/
# 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
[test]
path = /test
auth user = test
secrets file = /etc/rsyncd.secrets
6、启动服务xinetd
systemctl restart xinetd
7、创建安全用户
vim /etc/rsyncd.secrets
test:test123
8、创建共享目录并进行测试
mkdir /test
touch /test/data{1..50}
执行结果:
[root@localhost test]# ls
data1 data12 data15 data18 data20 data23 data26 data29 data31 data34 data37 data4 data42 data45 data48 data50 data8
data10 data13 data16 data19 data21 data24 data27 data3 data32 data35 data38 data40 data43 data46 data49 data6 data9
data11 data14 data17 data2 data22 data25 data28 data30 data33 data36 data39 data41 data44 data47 data5 data7
9、客户端服务器进行测试(172.16.8.111)
[root@devops-zabbix-node1 date]# rsync -a 172.16.8.240::
test
测试结果
[root@devops-zabbix-node1 data]# pwd
/data
[root@devops-zabbix-node1 data]# rsync -av test@172.16.8.240::test /data
receiving incremental file list
./
data1
data10
data11
data12
data13
data14
data15
data16
data17
data18
data19
data2
data20
data21
data22
data23
data24
data25
data26
data27
data28
data29
data3
data30
data31
data32
data33
data34
data35
data36
data37
data38
data39
data4
data40
data41
data42
data43
data44
data45
data46
data47
data48
data49
data5
data50
data6
data7
data8
data9
sent 979 bytes received 2368 bytes 6694.00 bytes/sec
total size is 0 speedup is 0.00
表示同步成功
三、inotify客户安装及配置
1、下载地址
inotify
wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
2、安装软件inotify
tar -xvf inotify-tools-3.14.tar.gz -C /opt/
cd /opt/inotify-tools-3.14/
./configure --prefix=/usr/local/inotify-tools-3.14
make && make install
ln -s /usr/local/inotify-tools-3.14 /usr/local/inotify
3、创建客户端目录
mkdir /backup1
touch /backup1/testfile{1..10}
# cd /backup1/
[root@devops-zabbix-node1 backup1]# ll
总用量 0
-rw-r--r-- 1 root root 0 2月 1 23:10 testfile1
-rw-r--r-- 1 root root 0 2月 1 23:10 testfile10
-rw-r--r-- 1 root root 0 2月 1 23:10 testfile2
-rw-r--r-- 1 root root 0 2月 1 23:10 testfile3
-rw-r--r-- 1 root root 0 2月 1 23:10 testfile4
-rw-r--r-- 1 root root 0 2月 1 23:10 testfile5
-rw-r--r-- 1 root root 0 2月 1 23:10 testfile6
-rw-r--r-- 1 root root 0 2月 1 23:10 testfile7
-rw-r--r-- 1 root root 0 2月 1 23:10 testfile8
-rw-r--r-- 1 root root 0 2月 1 23:10 testfile9
4、客户端脚本
vim test.sh
#!/bin/bash
USER_N=`whoami`
DATE_N=`date "+%Y-%m-%d %H:%M:%S"`
LOGFILE=/var/log/rsync.log
/usr/local/inotify/bin/inotifywait -mrq -e modify,create,move,delete,attrib /backup1 |while read events
do
rsync -a --delete /backup1 172.16.8.240::backup
echo "$DATE_N $USER_N $events" >>"$LOGFILE" 2>&1
done
5、服务器创建目录
mkdir /backup2
6、服务器配置文件rsync
vim /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# configuration example:
# uid = nobody
# gid = nobody
# use chroot = yes
# max connections = 4
# pid file = /var/run/rsyncd.pid
# exclude = lost+found/
# 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
#[test]
# path = /test
# auth user = test
# secrets file = /etc/rsyncd.secrets
[backup]
path = /backup2/
read only = false
uid = root
gid = root
7、启动服务xinetd
systemctl restart xinetd
8、脚本执行过程
[root@devops-zabbix-node1 data]# sh -x test.sh
++ whoami
+ USER_N=root
++ date '+%Y-%m-%d %H:%M:%S'
+ DATE_N='2018-02-01 23:18:06'
+ LOGFILE=/var/log/rsync.log
+ /usr/local/inotify/bin/inotifywait -mrq -e modify,create,move,delete,attrib /backup1
+ read events
[root@devops-zabbix-node1 data]# sh -x test.sh
++ whoami
+ USER_N=root
++ date '+%Y-%m-%d %H:%M:%S'
+ DATE_N='2018-02-01 23:19:44'
+ LOGFILE=/var/log/rsync.log
+ read events
+ /usr/local/inotify/bin/inotifywait -mrq -e modify,create,move,delete,attrib /backup1
+ rsync -a --delete /backup1 172.16.8.240::backup
+ echo '2018-02-01 23:19:44 root /backup1/ CREATE hhe'
+ read events
+ rsync -a --delete /backup1 172.16.8.240::backup
+ echo '2018-02-01 23:19:44 root /backup1/ ATTRIB hhe'
+ read events
9、日志记录
tail -f /var/log/rsync.log
2018-02-01 23:19:44 root /backup1/ CREATE hhe
2018-02-01 23:19:44 root /backup1/ ATTRIB hhe
2018-02-01 23:19:44 root /backup1/ CREATE,ISDIR test
2018-02-01 23:19:44 root /backup1/ MODIFY testfile1
2018-02-01 23:19:44 root /backup1/ MODIFY testfile2
2018-02-01 23:19:44 root /backup1/ MODIFY testfile3
2018-02-01 23:19:44 root /backup1/ MODIFY testfile4
2018-02-01 23:19:44 root /backup1/ MODIFY testfile5
2018-02-01 23:19:44 root /backup1/ MODIFY testfile6
2018-02-01 23:19:44 root /backup1/ MODIFY testfile7
2018-02-01 23:19:44 root /backup1/ MODIFY testfile8
2018-02-01 23:19:44 root /backup1/ MODIFY testfile9
2018-02-01 23:19:44 root /backup1/ MODIFY testfile10
2018-02-01 23:19:44 root /backup1/ CREATE testfile11
2018-02-01 23:19:44 root /backup1/ MODIFY testfile11
2018-02-01 23:19:44 root /backup1/ CREATE testfile12
2018-02-01 23:19:44 root /backup1/ MODIFY testfile12
2018-02-01 23:19:44 root /backup1/ CREATE testfile14
2018-02-01 23:19:44 root /backup1/ MODIFY testfile14
2018-02-01 23:19:44 root /backup1/ CREATE testfile13
2018-02-01 23:19:44 root /backup1/ MODIFY testfile13
2018-02-01 23:19:44 root /backup1/ CREATE testfile15
2018-02-01 23:19:44 root /backup1/ MODIFY testfile15
2018-02-01 23:19:44 root /backup1/ DELETE hhe
2018-02-01 23:19:44 root /backup1/ DELETE,ISDIR test
10、数据对比
客服端数据
[root@devops-zabbix-node1 backup1]# ll
总用量 60
-rw-r--r-- 1 root root 5 2月 1 23:22 testfile1
-rw-r--r-- 1 root root 5 2月 1 23:23 testfile10
-rw-r--r-- 1 root root 5 2月 1 23:23 testfile11
-rw-r--r-- 1 root root 5 2月 1 23:23 testfile12
-rw-r--r-- 1 root root 5 2月 1 23:23 testfile13
-rw-r--r-- 1 root root 5 2月 1 23:23 testfile14
-rw-r--r-- 1 root root 5 2月 1 23:23 testfile15
-rw-r--r-- 1 root root 5 2月 1 23:22 testfile2
-rw-r--r-- 1 root root 5 2月 1 23:22 testfile3
-rw-r--r-- 1 root root 5 2月 1 23:22 testfile4
-rw-r--r-- 1 root root 5 2月 1 23:22 testfile5
-rw-r--r-- 1 root root 5 2月 1 23:22 testfile6
-rw-r--r-- 1 root root 5 2月 1 23:22 testfile7
-rw-r--r-- 1 root root 5 2月 1 23:22 testfile8
-rw-r--r-- 1 root root 5 2月 1 23:22 testfile9
[root@devops-zabbix-node1 backup1]# ll |wc -l
16
服务器数据
[root@localhost backup1]# ll
total 60
-rw-r--r-- 1 root root 5 Feb 1 23:22 testfile1
-rw-r--r-- 1 root root 5 Feb 1 23:23 testfile10
-rw-r--r-- 1 root root 5 Feb 1 23:23 testfile11
-rw-r--r-- 1 root root 5 Feb 1 23:23 testfile12
-rw-r--r-- 1 root root 5 Feb 1 23:23 testfile13
-rw-r--r-- 1 root root 5 Feb 1 23:23 testfile14
-rw-r--r-- 1 root root 5 Feb 1 23:23 testfile15
-rw-r--r-- 1 root root 5 Feb 1 23:22 testfile2
-rw-r--r-- 1 root root 5 Feb 1 23:22 testfile3
-rw-r--r-- 1 root root 5 Feb 1 23:22 testfile4
-rw-r--r-- 1 root root 5 Feb 1 23:22 testfile5
-rw-r--r-- 1 root root 5 Feb 1 23:22 testfile6
-rw-r--r-- 1 root root 5 Feb 1 23:22 testfile7
-rw-r--r-- 1 root root 5 Feb 1 23:22 testfile8
-rw-r--r-- 1 root root 5 Feb 1 23:22 testfile9
[root@localhost backup1]# ll |wc -l
16