批量同步、批量更新,这应该是做运维的朋友们经常做的工作,rsync是linux下一款非常强大的同步工具,采用差异同步的方法,只上传文件/文件夹的不同部分,同时可以对上传部分先进行压缩,所以rsync的传输效率是很高的但rsync也有缺点,最大的问题就是每次执行rsync命令都会遍历目标目录,当文件不多时,这没什么问题,一旦文件数到了一定规模,那么每次遍历都会消耗很多资源。
如果只对经常改动的目录进行同步,也可以忽略这个问题,如果每次改动的目录多较大,那么就要用到inotify了,Inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,Linux内核从2.6.13起,加入了对Inotify的支持,通过Inotify可以监控文件系统中的添加、删除、修改、移动等各种事件,但inotify只提供了C语言接口,不方便调用,所以我们需要先安装inotify-tools
系统环境
CentOS_5.7-x86_64
更新源服务器:192.168.9.227
目的服务器:192.168.9.226 192.168.9.228 ...
目的服务器配置
192.168.9.226 192.168.9.228(rsync服务端):
检查rsync是否安装
如果没有发装,执以下命令进行安装
定义rsync配置文件/etc/rsyncd.conf
192.168.9.226:
192.168.9.228:
rsyncd.conf配置文件详解
建立认证文件/etc/www1.pwd
此文件须与配置文件中指定文件名保持一致
此处格式为:username:password,安全问题,并不建议实际使用中使用root用户
192.168.9.226:
192.168.9.228:
并且我们需要设置此文件的权限为600
建立motd文件(可有可无)
rsyncd.motd记录了rsync服务的欢迎信息,你可以在其中输入任何文本信息,如:
启动rsync
更新源服务器配置
192.168.9.227 (rsync客户端)
inotify 可以监视的文件系统事件包括
注:上面所说的文件也包括目录。
安装inotify-tools
在安装inotify-tools前请先确认你的linux内核是否打到了2.6.13,并且在编译时开启了CONFIG_INOTIFY选项,也可以通过以下命令检测
如果有 max_queued_events,max_user_instances,max_user_watches 三项就说明支持
编写rsync监控脚本
建立认证文件 (rsync客户端认证文件只用加入密码)
同步测试
在更新源服务器上新建一个文件,运行以下的命令,看文件是否可以正常同步,看有无报错信息
将要更新的文件提交到更新源服务器中,这样就通过inotify+rsync批量的将更新文件同步到所有的目的服务器中,相当方便快捷
https://www.linuxprobe.com/batch-update-of-linux-files.html