一: 工具简介
rsync
它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。 rsync是用 “rsync 算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送文件的变化部分,而不是每次都整体传送,因此速度相当快。
inotyify
inotify是Linux核心子系统之一,做为文件系统的附加功能,它可监控文件系统并将异动通知应用程序。于Linux核心2.6.13发布时,被正式纳入Linux内核。所以内核版本在2.6.13之前的用户,就只能通过给内核打补丁的方式来使用此功能了。
二:rsync
1)rsync工作模式
第一种模式:shell模式,也称作本地模式;
第二种模式:远程shell模式,可以利用ssh协议承载其远程传输过程;
第三种模式:列表模式,仅列出源中的内容,-nv
第四种模式:服务模式,此时rsync工作为守护进程,能接收客户端的数据同步请求
rsync命令的选项
-n: 同步测试,不执行真正的同步过程; -v: 详细输出模式 -q: 静默模式 -c: checksum,开启校验功能 -r: 递归复制 -a: 归档,保留文件的原有属性; -p: 保留文件的权限; -t: 保留文件的时间戳; -l: 保留符号链接 -g: 保留属组 -o: 保留属主 -D:保留设备文件 -e ssh: 使用ssh作为传输承载; -z: 压缩后传输; --progress: 显示进度条 --stats: 显示如何执行压缩和传输
注意:rsync命令中,如果源路径是目录,且给复制路径时末尾有/,则会复制目录中的内容,而非目录本向;如果末尾没有/,则会同步目录本身及目录中的所有文件;目标路径末尾是否有/无关紧要
三:inotyify
1)inotyify工作模式
inotifywait:wait for changes to files using inotify 使用inotify监控文件变化
inotifywait [option] file1 [ file2 ] [ ... ]
option:
-h, �Chelp输出帮助信息排除不需要监视的文件,可以是相对路径,也可以是绝对路径。 -m, �Cmonitor接收到一个事情而不退出,无限期地执行。默认的行为是接收到一个事情后立即退出。-d, �Cdaemon跟�Cmonitor一样,除了是在后台运行,需要指定�Coutfile把事情输出到一个文件。 -o, �Coutfile 输出事情到一个文件而不是标准输出。-s, �Csyslog输出错误信息到系统日志 -r, �Crecursive监视一个目录下的所有子目录。 -q, �Cquiet指定一次,不会输出详细信息,指定二次,除了致命错误,不会输出任何信息。 �Cexclude 正则匹配需要排除的文件,大小写敏感。 �Cexcludei 正则匹配需要排除的文件,忽略大小写。 -t , �Ctimeout 设置超时时间,如果为0,则无限期地执行下去。 -e , �Cevent 指定监视的事件。 -c, �Ccsv输出csv格式。
inotifywatch [-hvzrqf] [-e ] [-t ] [-a ] [-d ] [ ... ]
-h, �Chelp输出帮助信息 -v, �Cverbose输出详细信息 -z, �Czero输出表格的行和列,即使元素为空 �Cexclude 正则匹配需要排除的文件,大小写敏感。 �Cexcludei 正则匹配需要排除的文件,忽略大小写。 -r, �Crecursive监视一个目录下的所有子目录。 -t , �Ctimeout 设置超时时间 -e , �Cevent 只监听指定的事件。 -a , �Cascending 以指定事件升序排列。 -d , �Cdescending 以指定事件降序排列
配置一个rsync+inotify 示意图
分发服务器有数据变化就会把数据传送给节点一和节点二,节点一和节点二位rsync服务器,分发服务器为inotify服务器。
配置rsync服务器
yum -y install xinetd #由于rsync服务依赖于xinetd,所以要先把xinetd安装进来 vim /etc/xinetd.d/rsync disable = no vim /etc/rsyncd.conf #编辑rsyncd.conf 的配置文件 #Gloable Setting #全局配置文件 uid = root#设定运行用户 gid = root#设定运行组 use chroot = no#不实用chroot max connections = 5#设置最大连接数 strict modes = yes#使用密码文件时,是否检查其权限 pid file = /var/run/rsyncd.pid#pid文件位置 log file = /var/log/rsyncd.log#日志文件位置 #Directory Setting [test]#定义一个新的资源 path = /test#指定资源路径 两个主机都要使用这个路径资源 ignore errors = no#不忽略错误 read only = no#不使用只读模式 hosts allow = 172.16.16.0/24#允许哪些网段登录 这样可以接入多台主机,只要网段相同 hosts deny = *#不允许登录的网段 list = true #是否允许列出文件列表 auth users = user1, user2#可登录用户 secrets file = /etc/rsyncd.pw#密码文件,确保只有属主有权限 vim /etc/rsyncd.pw #文件格式为用户名:密码 user1:123 user2:123 chmod 600 /etc/rsyncd.pw #给密码文件添加权限
配置inotify服务器
tar xf inotify-tools-3.14.tar.gz -C /usr/local/src cd /usr/local/src/inotify-tools-3.14/ ./configure --prefix=/usr/local/inotify-tools make && make install vim /etc/rsyncd.auth #配置用户文件信息 user1 user2 chmod 600 /etc/rsyncd.auth 为分发服务器配置如上面安装完成后编辑以下脚本,让其自动同步数据。 vim /bin/inotify.sh Source=/test Host=172.16.16.1 Dest=test Host1=172.16.16.2 /usr/local/inotify-tools/bin/inotifywait -mrq -e modify,delete,create,attrib /test | whil e read D E F do /usr/bin/rsync -ahqz --password-file=/etc/rsyncd.auth ${Source} user1@$Host::${Dest}/ /usr/bin/rsync -ahqz --password-file=/etc/rsyncd.auth ${Source} user2@$Host1::${Dest}/ done
OK 通过以上脚本就可以实现文件之间的同步。