linux sync server 1对多同步实例linux
需求:
vim
线上也业务需求,意思就是N台机器须要维护各自机器上的一个目录,而且他们都是相同滴。so,这两天想了下,决定使用rsync server+inotify来解决这个问题。固然有的人会用自动化工具来推,可是我这里这个文件可能每次只改里面1小点内容,推个一百来兆的东西(这句话有错也莫喷了亲 = =)。。反正出于种种缘由决定要使用 rsyncbash
做业环境:服务器
CentOS 6.3
ide
rsync version 3.0.6 (为系统自带版本 = = 固然编译的下面会说)工具
inotify-tools 3.14测试
-------------------ui
首先说明:google
其实rsync和inotify-tools使用yum或者系统自带的均可以的。spa
inotify须要注意内核是否支持:(ls /proc/sys/fs/inotify 下是否有max_queued_events max_user_instances max_user_watches三个文件)
rsync的编译安装也不过多介绍了,tar xf *** && cd *** && ./configure && make && make install
-------------------
场景说明:
我这里是1台server(rsync+inotify)来主动推送文件到N台机器(rsync守护进程),而且我N台机器配置文件配置都同样(喊密码认证文件)。
-------------------
server端配置:
mkdir /data/sync-server cd /data/sync-server yum -y install inotify-tools rsync #而后编写inotify-tools脚本 vim sync.sh #!/bin/bash # source /etc/profile &>/dev/null basedir=$(cd `dirname $0`;pwd) log="$basedir/sync.log" synclog="$basedir/result.log" file="$basedir/iplist" /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib,move /data/karaf-sync/ccms-build/ \ |while read file do while read line do echo "$line sync start..." /usr/bin/rsync -vzrtopg --delete --progress /data/karaf-sync/ccms-build/ ccms@$line::ccms --password-file=/data/karaf-sync/scripts/pwd &>> $log if [ $? -eq 0 ];then echo "`date +%F-%H:%M` $line was rsynced Success !!!" &>> $synclog echo "-----------------------------------------------------------" &>> $synclog echo "" &>> $synclog else echo "`date +%F-%H:%M` $line was rsynced Failed !!!" &>> $synclog echo "-----------------------------------------------------------" &>> $synclog echo "" &>> $synclog fi done < $basedir/iplist #我外面有相关的定时同步iplist的操做 done
inotifywait: -r, --recursive递归查询目录。 -q, --quiet,打印出监控事件。 -e, --event,指定要监控的事件,常见的事件有move、modify、delete、create、attrib等。全量:(access、modify、 attrib、 close_write、 close_nowrite、close、open、 moved_to、 moved_from、move、 move_self、 create、delete、delete_self、unmount) --timefmt:时间的输出格式 --format:指定变化文件的详细信息 ------------------------------------------------------ inotify 能够监视的文件系统事件包括: IN_ACCESS,即文件被访问 IN_MODIFY,文件被 write IN_ATTRIB,文件属性被修改,如 chmod、chown、touch 等 IN_CLOSE_WRITE,可写文件被 close IN_CLOSE_NOWRITE,不可写文件被 close IN_OPEN,文件被 open IN_MOVED_FROM,文件被移走,如 mv IN_MOVED_TO,文件被移来,如 mv、cp IN_CREATE,建立新文件 IN_DELETE,文件被删除,如 rm IN_DELETE_SELF,自删除,即一个可执行文件在执行时删除本身 IN_MOVE_SELF,自移动,即一个可执行文件在执行时移动本身 IN_UNMOUNT,宿主文件系统被 umount IN_CLOSE,文件被关闭,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) IN_MOVE,文件被移动,等同于(IN_MOVED_FROM | IN_MOVED_TO) 注:上面所说的文件也包括目录。 rsync的命令请另外搜索。。
client端配置:
vim /etc/rsyncd.conf uid = root #运行RSYNC守护进程的用户 gid = root #运行RSYNC守护进程的组 port = 873 #监听端口 use chroot = no #不使用chroot max connections = 100 #最大链接数,0为不限制 timeout = 600 #经过该选项能够覆盖客户指定的IP超时时间.经过该选项能够确保rsync服务器不会永远等待一个崩溃的客户端.超时单位为秒钟,0表示没有超时定义,这也是默认值.对于匿名rsync服务器来讲,一个理想的数字是600. pid file = /var/run/rsyncd.pid lock file = /var/run/rsyncd.lock log file = /var/log/rsyncd.log #log format --- google [ccms] path = /data/ccms-build/ #须要同步的路径 comment = ccms dir #名称 ignore errors #能够忽略一些无关的IO错误 read only = no list = no #不容许列文件 hosts allow = 192.168.***.***/255.255.255.0 #容许的客户端 auth users = ccms #认证用户 secrets file = /etc/rsync.pwd #密码文件:600 vim /etc/rsync.pwd ccms:******** #同server端相同 chmod 600 /etc/rsync.pwd
启动进程
/usr/bin/rsync --daemon echo "/usr/bin/rsync --daemon" >> /etc/init.d/rc.local
到这里就差很少了,我这里使用的是screen 启动以前的server的脚本,而后就能够两边写文件进行测试了。
另一些命令的具体用法 ,能够搜一下,做为参考,这里就再也不详细说明了,抱歉!