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/创建或修改文件,来触发实时同步任务
转载于:https://blog.51cto.com/wyg11/1772008