写在前面:如果此文有幸被某位朋友看见并发现有错的地方,希望批评指正。如有不明白的地方,愿可一起探讨。
rsync是Linux下一款非常强大的同步工具,其最大的劣势在于每次执行rsync命令都会遍历目标目录。想象一下这样一种情况:当目录下改动的文件数量并不多且目录下本身文件数量达到一定规模时,每次遍历都会消耗很多资源。那么有没有这样一种工具,当某文件改动后,主动触发rsync命令去同步修改过的文件呢?答案是肯定的,要不然就没有这篇文章了,这个工具就是:inotify。
接下来,本文就利用rsync+inotify来简单实现主从服务器数据同步,其解决方案图形如下:
配置从服务器
安装xinetd和rsync并设置其开机启动:
# yum -y install xinetd
默认情况下,rsync已经安装
# chkconfig xinetd on
# chkconfig rsync on
为rsync提供配置文件:
# vim /etc/rsyncd.conf
其内容如下:
# Global Settings
uid = nobody
gid = nobody
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
log file = /var/run/rsyncd.log
# Directory to be rsynced
[rsync-dst]
path = /home/www
ignores errors = yes
read only = no
write only = no
hosts allow = 10.170.2.0/255.255.252.0
hosts deny = *
list = true
uid = root
gid = root
auth users = rsync-user
secrets file = /etc/rsync-dst.passwd
创建密码文件/etc/rsync-dst.passwd
# vim /etc/rsync-dst.passwd
# echo "rsync-user:******" > /etc/rsync-dst.passwd
# chmod 600 /etc/rsync-dst.passwd
启动xinetd服务
# service xinetd start
配置主服务器
下载inotify-tools-3.14:
下载路径:http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
本文将所下载的inotify-tools-3.14.tar.gz放到了/tmp目录下
安装inotify-tools-3.14:
# tar xf inotify-tools-3.14.tar.gz
# cd inotify-tools-3.14
# ./configure --prefix=/usr/local
# make && make install
创建rsync同步密码文件并修改其权限:
# vim /etc/rsync-src.passwd
# echo "******" > /etc/rsync.passwd
# chmod 600 /etc/rsync-src.passwd
创建rsync同步脚本:
# mkdir -pv /home/muluhe/rsync-src
# vim /etc/init.d/rsyncd.sh
其脚本如下:
#!/bin/bash
src=/home/muluhe/rsync-src
dst=rsync-user@10.170.2.80::rsynce-dst
/usr/local/bin/inotifywait -mrq --timeout ‘%d/%m%y %H:%M‘ --format ‘%T %w %f‘ \
-e modify,delete,create,attrib ${src} | while read files
do
/usr/bin/rsync -avz --delete --progress ${src} ${dst} \
--password-file=/etc/rsync-src.passwd &> /dev/null
echo "${files} has been rsynced... OK" >> /var/log/rsync.log
done
修改rsyncd.sh脚本的权限并使其自启动:
# chmod +x /etc/init.d/rsyncd.sh
# echo "/etc/init.d/rsyncd.sh" >> /etc/rc.local
测试主从数据同步
开启主服务的终端
其中一个终端执行:
# bash /etc/init.d/rsyncd.sh
另外一个终端进行如下操作:
切换到主服务器中的/home/muluhe/rsync-src/目录
# cd /home/muluhe/rsync-src/
创建一个新文件
# touch test.txt
复制一个文件
# cp /etc/fstab ./
在执行bash /etc/init.d/rsyncd.sh 命令的终端下可以看到如下结果
利用rsync+inotify实现主从服务器数据同步的简单案例
原文地址:http://muluhe.blog.51cto.com/9152490/1543924