rysnc简介
rsync既remote sync,是UNIX类系统文件同步和数据传输工具,能实现客户端和远程服务器端的文件同步,它采用的是rsync算法,它比较传输源文件和目标文件有变更的部分进行传送。
rsync特性
1>增量数据同步,传输效率搞
2>镜像保存整个目录树和文件系统
3>保留文件属性,时间戳等。
4>支持加密传输
inotify是一种高效率、细粒度、异步的文件系统监控机制。它监控文件系统,并且及时向第三方软件(如rsync)发出相关的删、读、写操作等。linux内核2.6.13版本开始支持inotify。利用这个内核接口,第三方软件如inotify-tools可以监控文件系统下文件的变化情况。
应用场景:
1. 远程容灾备份场景
为保证数据安全,搭建一个远程容灾系统,当数据发生改变时,立即将其同步到远程灾备服务器上。
2. 搭建实时同步系统
无存储共享设备,web集群中的代码均存放在本地,最终导致web节点之间的数据无法一致。采用rsync+inotify,实现多台web数据动态同步
案例演示:
监控192.168.1.7的/var/www/html目录,当目录内容有变化,立即将其内容同步到192.168.1.8的/var/www/html目录。
主机:192.168.1.8
系统默认已安装rsync,不需手动安装。但没有提供配置文件,需手动建立。
编辑/etc/rsyncd.conf
uid=nobody #指定该模块传输文件时守护进程的用户ID
gid=nobody #指定该模块传输文件时守护进程的用户组ID
use chroot = no
max connections =10 #最大并发连接数量,保护服务器。默认是0,没有限制
strict modes = yes #是否坚持口令文件权限,密码文件权限必须为root
pid file = /var/run/rsyncd.pid #rsync守护进程的pid
lock file = /var/run/rsync.lock #rsync守护进程的锁文件
log file = /var/log/rsyncd.log #日志路径
[xiaoming] #定义一个模块的开始, xiaoming为对应的模块名称
path = /var/www/html/ #指定需要备份的文件或目录
comment = xiaoming file
ignore errors #可忽略一些无关的I/O错误
read only = no #为no表示客户端可上传文件,为yes表示只读
write only = no #为no表示客户端可下载文件,为yes表示不能下载
host allow = 192.168.1.7 #可以连接rsync服务器的主机
host deny = * #拒绝连接rsync服务器的主机
list = false #设定当客户请求可以使用的模块列表,模块是否被列出,默认true
uid = root
gid = root
auth user = xiaobai #认证的用户
secrets file = /etc/server.pass #认证的密码
# useradd xiaobai
# echo 123456 | passwd xiaobai --stdin
启动rsync守护进程
# rysnc --daemon
主机:192.168.1.7
安装inotify-tools
# yum install inotify-tools
查看生成了那些文件
# rpm -ql inotify-tools
/usr/bin/inotifywait
/usr/bin/inotifywatch
/usr/lib64/libinotifytools.so.0
/usr/lib64/libinotifytools.so.0.4.1
/usr/share/doc/inotify-tools-3.14
......
inotifywait使用内核inotify接口等待文件的变化,时候使用shell脚本来实现。
-m,--monitor始终保持事件的坚听,默认是在一个事件发生后退出。
-r,--recursive 递归监控目录
-q,--quiet在屏幕显示监控事件
-e,--event 制定要监控的事件,如modify、delete、create、access、attrib等
inotifywatch收集被监控的文件系统统计数据。
编辑同步脚本/root/rsync.sh
#!/bin/bash
#
host=192.168.1.8
src=/var/www/html/
user=xiaobai
dst=xiaoming
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \
| while read files
do
/usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass $src $user@$host::$dst
echo "${files} was rsynced" >> /tmp/rsync.log2>&1
done
编辑/etc/server.pass
123456
# chmod 600 /etc/server.pass
放入后台执行
# bash rsync.sh &
此时,在192.168.1.7主机/var/www/html目录变更文件,192.168.1.8会立即同步。
查看同步文件日志:
# tail/tmp/rsync.log2
11/07/15 09:05/var/www/html/bCREATE was rsynced
11/07/15 09:05/var/www/html/bATTRIB was rsynced
11/07/15 09:06/var/www/html/cCREATE was rsynced
11/07/15 09:06/var/www/html/cATTRIB was rsynced
11/07/15 09:07/var/www/html/aDELETE was rsynced
11/07/15 09:08/var/www/html/fstabCREATE was rsynced
11/07/15 09:08/var/www/html/fstabMODIFY was rsynced