rsync+inotify-tools实现文件远程实时备份

rsync的优点与不足:
      与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出更高的求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的。而且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。其次,rsync不能实时的去监测、同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。基于以上原因,rsync+inotify组合出现了!

       Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,通过Inotify可以监控文件系统中添加、删除,修改、移动、权限等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异 ,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决了同步数据的实时性问题。


测试环境

    hostname       IP                       用途
    rac1               172.18.1.106        主服务器
    rac2               172.18.1.108        备份服务器,当主服务器有数据更新时实时同步到备份服务器

rac1主服务器操作如下:

step1:安装rsync

yum -y install rsync
rpm -qa | grep rsync


step2:安装inotify-tools

注意:在安装inotify-tools前请先确认你的linux内核是否支持inotify,并且在编译时开启了        CONFIG_INOTIFY选项,可以通过以下命令检测:
 ls /proc/sys/fs/inotify/

#输出结果为max_queued_events max_user_instances max_user_watches这表示支持此功能

下载inotify-tools 软件包
 tar zxvf inotify-tools-3.14.tar.gz
 cd inodify-tools-3.14
 ./configure
 make && make install

 step3:创建密码认证文件
 vim /etc/rsyncd.passwd
 rootroot
 wq

 step4:修改权限为600,否者会报错
 chmod 600 /etc/rsyncd.passwd | ls -l /etc/rsyncd.passwd
 -rw-------. 1 root root 30 5月   9 12:07 /etc/rsyncd.passwd

 step5:创建同步目录用于测试,也可以直接使用网站目录/var/www/html/
 mkdir -p /data/www/

 step6:创建rsync.sh脚本,并给脚本执行权限
 vim /rsync.sh
 #!/bin/bash
 host=192.168.1.108
 src=/var/www/html/
 des=web
 user=root
 /usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib ${src}  | while read  files
 do
 /usr/bin/rsync -vzrtopg --delete --progress ${src} ${usr}@${host}::${des} --password-file=/etc/rsyncd.passwd && echo "${files} was rsynced">>/tmp/rsync.log 2>&1
 echo "---------------------------------------------------"
done

chmod +x /rsync.sh | ls -l /rsync.sh

rac2备份服务器操作如下:

step1:安装rsync
yum install -y rsync

step2:创建并定义rsync配置文件
vim /etc/rsyncd.conf
uid=root
gid=root
use chroot=no
max connections=100
timeout=600
pid file=/var/run/rsyncd.pid
lock file=/var/log/rsyncd.lock
log file=/var/log/rsyncd.log
[web]
path=/var/www/html/
comment files=web files
ignore errors=yes
read only=no
list=no
hosts allow=192.168.1.0/16
hosts deny=*
auth users=root
secrets file=/etc/rsyncd.passwd
wq

step3:创建密码认证文件,路径及文件名与rsyncd.conf中一致,并且修改权限为600
vim /etc/rsyncd.passwd
root:rootroot
wq

chmod 600 /etc/rsyncd.passwd  | ls -l /etc/rsyncd.passwd

启动rsync,并设置开机自启动
rsync --daemon   若rsyncd.conf文件不在/etc/目录下则需要指明路径如rsync --daemon --config=/etc/rsync/rsycnd.conf
echo "/usr/bin/rsync --daemon">>/etc/rc.local

rac1操作:
在rac2上配置完后,需在rac1上执行rsync.sh脚本在后台运行,并添加到开机自启动中
[root@rac1 ~]# sh /rsync.sh
[root@rac1 /]# echo "/bin/sh /rsync.sh ">> /etc/rc.local

完成以上操作后,rac1上的/var/www/html/目录下的文件,并不会立刻同步到rac2上,而需要在rac1上的/var/www/html/创建或修改文件,来触发实时同步任务

你可能感兴趣的:(备份,rsync+inotify)