rsync+inotify部署
rsync分为上行同步和下行同步 发起端和同步源的
上行同步:发起端同步数据到同步源
下行同步:发起端从同步源下载数据到发起端
发起端:管理员操作的机器就是发起端,也可以理解为客户端
同步源:数据存放的服务器叫做同步源
下行同步:
如果最下化安装的系统可能没有装rsync,使用yum安装即可:yum -y install rsync
在同步源服务器设置
修改rsync的配置文件:添加同步源服务器数据存放的路径等等相关配置,和Samba配置差不多,都是模块化设置。
本次设置为匿名同步,可不用设置用户。
启动rsync
为了测试效果创建测试文件
在发起端设置:
命令解释:rsync -avzH --delete 192.168.100.11::test /opt
-a 归档模式 保留文件的权限,属性等信息 相当于组合选项“-rlptgoD”
-v 显示同步过程的详细信息
-z 在传输文件的过程中压缩
-H 保留硬链接文件
--delete 删除目标位置有而原始位置没有的文件
192.168.100.11::test 同步源的ip和同步数据的逻辑名
/opt 保存在本地的路径
上行同步:
同步源不需要动,在发起端操作
为了方便测试 把opt下的test文件删除然后touch新的文件上行同步观察效果
在执行的过程中出现了error,提示的很明显,因为模块是只读的 没有权限上传,
解决方法:修改同步源的配置文件read only = no 默认是yes 然后从新启动rsync服务
再次执行上行同步
这种情况是什么原因呢:
因为我们执行上传的命令是没有权限,但是刚刚我们修改了权限啊。。。。
rsync的程序用户默认是nobody 而我们创建的test目录是root身份创建的,其他人没有写入权。。。。
解决方法:一,修改为程序用户为root(不推荐)
二,给test目录提权
rsync+inotify实现实时同步
在发起端安装inotify-tools工具
yum -y install inotify-tools
编写实时同步脚本
[[email protected] ~]# cat inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /opt"
RSYNC_CMD="rsync -avzH --delete /opt/ 192.168.100.11::test"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
$RSYNC_CMD
done
然后把脚本后台执行,在发起端对opt目录进行删除或者添加修改操作,观察同步源/test目录的变化