Centos7.x Rsync+Inotify实现数据实时同步

一、概述
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端口的入站数据请求。

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 

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值