首页 > 代码库 > rsync 加 inotify 实现无缝数据同步
rsync 加 inotify 实现无缝数据同步
rsync 是远程差异同步数据的工具,把一份数据复制到另一台机器上。它的同步特性是,在整个文件域中,根据rsync算法计算文件的特征码,只同步有改变的文件,但在同步整个域的时候,会计算整个域中所有文件的特征,这样使得在文件数据过多情况下计算文件特性就花费了很多时间。如果不借助其它软件,rsync无法做到真正的即时同步数据。rsync可以对目录或整个文件系统做同步,可能借助ssh加密后安全传输,因为只同步差异数据,所以效率较高,还支持匿名传输等特性。rsync分为服务端和客户端,做为服务端随时等待客户端推送或拉取数据。rsync做为服务端时依赖超级守护进程xinetd为其监听tcp873端口。所以xinetd一定安装。
如果系统没有安装rsync,到http://rsync.samba.org/ 下载源码编译,或使用 yum -y install rsync 安装。
rsync 客户端使用的rsync命令使用
语法格式
拉取文件: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
推送文件: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
常用选项
-n: 测试同步,只做测试不真正同步数据。
-v:显示同步过程
-c:开启校验功能
-r:递归复制(如果同步目录,在目录后面不要写/。如果写/表示同步目录下的文件)
-a:归档同步,数据同步后会保留文件的原有属性
-p:保留文件的所有权限
-t:保留文件的时间戳
-l:保留符号连接
-o:保留文件的属主
-g:保留文件的属组
-D:保留设备文件
-e ssh :指定使用ssh协议做承载加密传输
-z : 传输时压缩数据传输
--progress : 显示传输进度条
--stats :显示如何压缩传输数据。
--delete : 删除多于文件
-q : 制止错误信息
rsync 服务器端配置文件 /etc/rsyncd.conf 。 分为两部分,第一段定义rsync做为服务运行的特性。第二部分定义rsync模块的特性,模块就是定义本地使用那个路径做为存储目录,和此模块的工作特性。此文件默认系统没有提供,需要手动创建。
# Global Settings 全局定义段,只能有一个。
uid = nobody 进程以那个用户身份运行
gid = nobody 进程运行的用户组
use chroot = no 运行rsync时是否支持chroot功能
max connections = 5 最多允许多少个客户端同时请求
strict modes = yes 是否启用严格模式
pid file = /var/run/rsyncd.pid 进程id文件的位置
log file = /var/log/rsyncd.log 日志文件的位置
# Directory to be synced 用来定义同步的目录 ,可以有多个。
[tools]
path = /data 存储同步的数据位置
ignore errors = yes 传输数据时是否忽略错误
read only = no 是否为只读
write only = no 是否为只写,如果只写别人不能看
hosts allow = 172.16.0.0/16 定义客户端的白名单
hosts deny = * 定义默认不允许访问本机的客户端,*表示全部。
list = false 是允许例出文件,如果允许,值为ture
uid = root 指定此共享使用那个用户身份运行
gid = root 指定此共享使用那个用户组身份运行
auth users = USER1, USER2 指定可以通过rsync同步的用户
secrets file = /etc/rsyncd.passwd 指定验证用户的文件
启动服务时需要修改配置文件,让xinetd启动时为其监听服务。文件在/etc/xinetd.d/rsync
service rsync
{
disable = no 把此项的yes改为no
flags = IPv6
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
保存退出后重启xinetd服务,如果tcp的873端口处于监听状态,说明服务启动正常。
客户端做测试
==================================================================
inotify使用
inotify 是一个可以实时监视文件系统的工具,文件的创建,修改,删除,查看等动作都可以监视到。此功能需要2.6.13以上内核支持,包括2.6.13版本。inotify-tools 这个软件就是用来与内核的inotify交互的工具,借助它可以实时的监视指定文件一举一动。与sh脚本配置着使用,可以达到监控的效果。安装方法如下。
# wget http://nchc.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz
# tar -xf inotify-tools-3.13.tar.gz
# cd inotify-tools-3.13
# ./configure 这里没有指定安装路径,默认安装后可执行程序在 /usr/local/bin
# make && make install
# echo "fs.inotify.max_user_watches = 100000" >> /etc/sysctl.conf 设定最大监视的文件数量
# sysctl -p 让设定的内核参数生效
inotify-tools安装后有两个执行文件
inotifywait,用来监视文件的变化
inotifywatch,用来统计文件系统访问的次数,监视文件的元数据
命令选项
-m, –monitor:接收到一个事情而不退出,无限期地执行。默认的行为是接收到一个事情后立即退出。
-r, –recursive :监视一个目录下的所有子目录
-q, –quiet:指定一次,不会输出详细信息,指定二次,除了致命错误,不会输出任何信息。 指定一次,不会输出详细信息,指定二次,除了致命错误,不会输出任何信息。
-e , –event :只监听指定的事件。
事件有以下几种
==================================================================
配置一个rsync+inotify案例
1,节点1与节点2都为rsync服务器端,
2,分发服务器会实时把自己变化的数据推送到节点1和节点2上。
3,节点一与节点二的环境一样,模块名为html,共享的目录为/data
4,传输过程加密
操作过程---------------------------------------------------------------------
为了同步数据时不用输入密码,所以选择公钥认证。在分发服务器上生成密钥对儿。
# ssh-keygen -t rsa 这里没有设置密码,所以一路回车就可以。
# cd /root/.ssh/
# cat id_rsa.pub 查看公钥文件,并且复制
把红框中的文本复制到两台节点服务器上的/root/.ssh/authorized_keys文件中,如果没有需要手动创建。复制完成后为两台结点服务器编辑rsync的配置文件,内容如下。如没有rsync需要安装。
完成配置文件后重启xinetd服务。
分发服务器配置如上面安装完成后编辑以下脚本,让其自动同步数据。
# vim /bin/inotify.sh 内容如下
source /etc/rsync.inotify
/usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib /data | while read D E F
do
/usr/bin/rsync -ahqz -e ssh --delete ${Source}/ ${Host}::$Dest
/usr/bin/rsync -ahqz -e ssh --delete ${Source}/ ${Host1}::$Dest
done
#vim /etc/rsync.inotify 为上面的脚本文件提供配置文件,内容如下:提供配置文件是为了以后能够灵活扩展多个节点。
Source=/data
Host=172.16.2.10
Dest=html
Host1=172.16.2.15
# echo "/bin/inotify.sh &" >> /etc/rc.d/rc.local #让脚本开机自动启动
# /bin/inotrfy.sh 启动脚本,第一次同步数据时需要输入yes。 所以先让它在前台运行
# cp /bin/i* /data 复制点文件做测试,
到两台节点上查看,会有点延时。
# ls /data
到此完成
本文出自 “红颜易逝豪情长” 博客,请务必保留此出处http://wukui.blog.51cto.com/1080241/1543697
rsync 加 inotify 实现无缝数据同步