rsync

    rsync是lunix系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。

优点:

1)、可以镜像保存整个目录树和文件系统。

2)、可以很容易做到保持原来文件的权限、时间、软硬链接等等。

3)、无须特殊权限即可安装。

4)、快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。

5)、安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。6)、支持匿名传输,以方便进行网站镜象。

缺点:

1)、同步数据,需要扫描所有文件进行对比,才进行差量传输。如果文件数量达到百万甚至千万级,扫描文件对比文件将非常耗时,降低了rsync效率。

2)、rsync不能实时地区监测、同步数据。虽然可以通过守护进程方式触发同步,但两次动作间有时间差,导致数据不一致,无法应对出现故障时完全恢复数据。


inotify

    inotify 是Linux 的一个内核特性,是一种强大的、细粒度的、异步的文件系统事件监控机制。它可以监控文件系统中的添加、删除、修改、移 动等各种细微事件,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。


rsync+inotify

    rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决了rsync同步数据的实时性问题。



搭建环境

拓扑图如图1所示

blob.png

                     图1


开始配置


1、先把两台机的防火墙和selinux关闭,两台机之间配置ssh免密钥通信,并配置时间同步

##配置ssh免密钥通信

[root@centos1 ~]# ssh-keygen 
[root@centos1 ~]# ssh-copy-id 192.168.15.12
##配置时间同步
[root@centos1 ~]# yum install -y ntpdate
[root@centos1 ~]# crontab -e
* * * * * ntpdate -u 0.pool.ntp.org


2、在两台服务器上安装rsync

[root@centos1 ~]# yum install -y rsync
[root@centos2 ~]# yum install -y rsync


3、配置rsync文件

(1)、在CentOS1上配置


[root@centos1 ~]# mkdir /rsync     ##创建目录(需要同步的内容)
[root@centos1 ~]# vim /etc/rsyncd.conf   ##配置主配置文件
uid = root
gid = root
usechroot = no
max connections = 20
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[web_log]
path = /rsync/  ##修改为刚刚创建的目录
ignore errors
read only = false
writeonly = false
list = false
hosts allow = 192.168.15.0/24
hosts deny = 0.0.0.0/32
auth users = backuser
secrets file = /etc/rsync.passwd


[root@centos1 ~]# cat /etc/rsync.passwd       ##配置密码文件
123456
[root@centos1 ~]# chmod 600 /etc/rsync.passwd   ##给密码文件授权
[root@centos1 ~]# rsync --daemon        ##启动rsync
[root@centos1 ~]# ps -ef | grep rsync     ##查看rsync是否启动成功
root       1304      1  0 09:25 ?        00:00:00 rsync --daemon
root       1330   1083  0 09:29 pts/0    00:00:00 grep --color=auto rsync


(2)、在CentOS2上配置

[root@centos1 ~]# mkdir /rsync
[root@centos1 ~]# vim /etc/rsyncd.conf
uid = root                            
gid = root                            
usechroot = no                    
max connections = 20           
timeout = 600                      
pid file = /var/run/rsyncd.pid           
lock file = /var/run/rsync.lock          
log file = /var/log/rsyncd.log            
[web_log]                           
path = /rsync/            
ignore errors                        
read only = false                   
writeonly = false                   
list = false                           
hosts allow = 192.168.15.0/24    
hosts deny = 0.0.0.0/32                    
auth users = backuser               
secrets file = /etc/rsync.password

[root@centos2 ~]# cat /etc/rsync.password     ##创建密码
backuser:123456
[root@centos2 ~]# chmod 600 /etc/rsync.password    ##授权
[root@centos2 ~]# rsync --daemon       ##启动
[root@centos2 ~]# ps -ef | grep rsync
root      10732      1  0 09:29 ?        00:00:00 rsync --daemon
root      10734   1085  0 09:29 pts/0    00:00:00 grep --color=auto rsync


(3)、推送测试

##在CentOS1上创建文件
[root@centos1 ~]# cd /rsync/
[root@centos1 rsync]# touch {1..10}.txt
[root@centos1 rsync]# ls
10.txt  1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt
##到CentOS2上查看
[root@centos2 ~]# cd /rsync/
[root@centos2 rsync]# ls

推送测试如图2所示

1.PNG

                                                                 图2

到CentOS2上查看,如图3所示

blob.png

                     图3

至此,rsync就已经配置完成了,接下来配置inotify了


4、配置inotify

(1)、安装inotify

[root@centos1 src]# wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz     ##下载安装包
[root@centos1 src]# tar -xf inotify-tools-3.14.tar.gz 
[root@centos1 src]# cd inotify-tools-3.14
[root@centos1 inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify
[root@centos1 inotify-tools-3.14]# make && make install
[root@centos1 inotify-tools-3.14]# ln -s /usr/local/src/inotify-tools-3.14 /usr/local/inotify


(2)、配置监控脚本


[root@centos1 src]# cat inotify.sh 
#!/bin/bash
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib /rsync/ | while read file
do
/usr/bin/rsync -vzrtopg --progress /rsync/ backuser@192.168.15.12::web_log --password-file=/etc/rsync.password
/usr/bin/rsync -vzrtopg --delete --progress /rsync/ backuser@192.168.15.12::web_log --password-file=/etc/rsync.password
echo "${files} was rsynced" >> /var/log/rsync.log 2>&1
done

[root@centos1 src]# chmod a+x inotify.sh     ##给执行权限
[root@centos1 src]# crontab -e               ##加入计划任务
* * * * * bash /usr/local/src/inotify.sh


5、测试脚本

(1)、添加文件

在CentOS1上执行脚本,再另外开一个终端登录到CentOS1上,创建文件,如图4和图5所示;在CentOS2上查看,如图6所示

blob.png

                                         图4

blob.png

                                               图5

blob.png

                      图6


(2)、删除文件

在CentOS1上执行脚本,再另外开一个终端登录到CentOS1上删除文件,如图7和图8所示;在CentOS2上查看,如图9所示

blob.png

                                                    图7

blob.png

                                                     图8

blob.png

                                                     图9

通过对比,我们发现当CentOS1添加文件时,同时也会把文件同步到CentOS2,当CentOS1删除某个文件时,CentOS2上相对应的文件也会被删除。


6、测试

在CentOS1上创建文件名为1-5的txt文本,如图10所示,同时在CentOS2上查看,如图11所示,我们可以发现添加的计划任务已经成功了,可以实现两台机之间的实时同步。

blob.png

                    图10

blob.png

                    图11