rsync+inotify企业应用案例
服务器地址分配:
Web1:192.168.1.103 (rsync server)
Web2:192.168.1.104 (rsync client、inotify)
同步的目录是 /mnt ,自动同步顺序为 web2——web1。我们讲 web1 配置成 rsync 的服务器即可。
一、 配置 rsync 服务器端 (web1)
1. 先使用 rpm –qa 命令查看系统中是否已经安装了 rsync 软件包,如果有我们可以不用进行安装,如果没有我们可以挂载上 CentOS 的系统光盘进行安装(当然,我们也可以选择使用源码包编译安装)
[root@Web1 ~]# rpm -qa | grep rsync rsync-3.0.6-4.el5_7.1 [root@Web1 ~]# |
2. Rsync 安装好之后没自己的配置文件,因此我们需要手动创建 rsync 的配置文件(配置文件的详解我会在文档的附录中给出)
[root@Web1 ~]#vi /etc/rsyncd.conf uid = root gid = root use chroot = 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 = /data/web_log/ ignore errors read only = false list = false hosts allow = 222.35.91.0/24 hosts deny = 0.0.0.0/32 auth users = backuser secrets file = /etc/rsync.password #_________________ |
3. 建立 rsync 用户名和密码文件
[root@Web1 ~]# echo "backuser:123" >> /etc/rsync.password |
/opt/tomcat_gw/webapps/
4. 为 /etc/rsync.password 授权为 600(这个文件的权限必须是 600)
[root@Web1 ~]# chmod -R 600 /etc/rsync.password |
到此,服务器端配置完成
二、 客户端配置:
1. 设置 rsync 客户端的密码文件,客户端只需要设置 rsync 同步的密码即可,不用设置用户名
[root@Web2 ~]#echo "123" > /etc/rsync.password |
2. 将密码文件的权限设置成 600(这个文件的权限必须是 600)
[root@Web2 ~]#chmod -R 600 /etc/rsync.password |
三、配置 Inotify(在 web2上配置)
http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
1. 安装 inotify 软件包
[root@Web2 ~]# tar zxf inotify-tools-3.14.tar.gz [root@Web2 ~]# cd inotify-tools-3.14 [root@Web2 ~]# ./configure && make && make install && echo "Install OK" |
2. 为了保证 .mnt 目录被自动同步,配置好web2 的 inotify 后,写一个 inotify 的监控脚本,内容如下:
#!/bin/bash src=/mnt/ des=web_log ip=192.168.1.103
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib $src | while read file
do
rsync -vzrtopg --delete --progress $src backuser@$ip::$des --password-file=/etc/rsync.password > /dev/null 2>&1 && echo "$src was rsynced"
done |
脚本相关解释如下:
--timefmt:
指定时间的输出格式。
--format:
指定变化文件的详细信息。
这个脚本的作用就是通过Inotify监控文件目录的变化,进而触发rsync进行同步操作。由于这个过程是一种主动触发操作,是通过系统内核完成的,所以,比起那些遍历整个目录的扫描方式来,效率要高很多。
然后我们将此脚本放入后台运行,输入如下命令即可:
Sh /root/rsync.sh&