rsync的优势与不足:
与传统的cp、tar备份方式相比,rsync具备安全性高、备份迅速、支持增量备份等优势,经过rsync能够解决对实时性要求不高的数据备份需求,例如按期的备份文件服务器数据到远端服务器,对本地磁盘按期作数据镜像等。随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出更高的求,rsync在高端业务系统中也逐渐暴露出了不少不足,首先,rsync同步数据时,须要扫描全部文件后进行比对,进行差量传输。若是文件数量达到了百万甚至千万量级,扫描全部文件将是很是耗时的。并且正在发生变化的每每是其中不多的一部分,这是很是低效的方式。其次,rsync不能实时的去监测、同步数据,虽然它能够经过linux守护进程的方式进行触发同步,可是两次触发动做必定会有时间差,这样就致使了服务端和客户端数据可能出现不一致,没法在应用故障时彻底的恢复数据。基于以上缘由,rsync+inotify组合出现了!html
Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,经过Inotify能够监控文件系统中添加、删除,修改、移动、权限等各类细微事件,利用这个内核接口,第三方软件就能够监控文件系统下文件的各类变化状况,而inotify-tools就是这样的一个第三方软件。rsync能够实现触发式的文件同步,可是经过crontab守护进程方式进行触发,同步的数据和实际数据会有差别 ,而inotify能够监控文件系统的各类变化,当文件有任何变更时,就触发rsync同步,这样恰好解决了同步数据的实时性问题。linux
测试环境
hostname IP 用途
rac1 172.18.1.106 主服务器
rac2 172.18.1.108 备份服务器,当主服务器有数据更新时实时同步到备份服务器
rac1主服务器操做以下:
step1:安装rsyncweb
yum -y install rsync
rpm -qa | grep rsyncvim
step2:安装inotify-tools安全
注意:在安装inotify-tools前请先确认你的linux内核是否支持inotify,而且在编译时开启了 CONFIG_INOTIFY选项,能够经过如下命令检测:
ls /proc/sys/fs/inotify/
bash
#输出结果为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/建立或修改文件,来触发实时同步任务
ide