rsync + inotify 推送方式下的实时同步与定时同步
A主机:192.168.80.146 服务端(配置同步模块+密码文件)
B主机:192.168.80.141 客户端 (不需要配置同步模块,需要密码文件仅包含密码和服务端的密码对应)
2个主机分别创建 /data /dat2 /dat3
mkdir -p /data /dat2 /dat3
需要同步的目录为/data/ /dat2 存放推送脚本 /dat3 存放其他文件
A主机:服务端的配置
#安装rsync
yum install rsync*
#创建rsync同步的用户名,虚拟用户可以不存在于系统
vim /etc/rsync.pass
#格式--用户名:密码,服务端里面必须是用户名和密码
www:www
#必须将该文件的权限改成 600 否则会报错
chmod 600 /etc/rsync.pass
#rsync本身并不会创建该文件,需要手工创建rsyncd.conf
vim /etc/rsyncd.conf
#rsyncd.conf 内容如下
uid=nobody gid=nobody use chroot =no static mode = yes max connections = 2 log file = /var/log/rsync.log port = 873 #端口 timeout = 300 #隔多久超时 [web] path=/data #同步目录绝对路径 comment = code path #模块的描述 ignore errors #可以忽略一些IO错误 read only = no # 是否只读 write only = no # 是否可写 hosts allow =192.168.80.141 #允许某个ip连接 hosts deny = * #禁止某个IP连接 *完全禁止 list = false #请求列表的时候 是否列出 默认true 需要隐藏即 fales auth uses = www # 用来同步的帐户名/etc/rsyncd.conf secrets file =/etc/rsync.pass #指定rsync的同步密码放在那里
# 注意: 如果配置文件的同步模块部分出现了uid 和gid 要和 客户端的属主 属组 相对应。
# 启动rsync:
rsync --daemon # tar 包安装的需要指定绝对路径
------------------------------------------客户端安装---------------------------------
B主机:客户端的配置 (推送模式)
#安装rsync + inotfy
yum install rsy* inot*
#这是inotfy安装的软件包,上面已经安装在此做个名称备份.
inotify-tools-devel
inotify-tools
#创建该文件 rsync启动时要检测
echo "" > /etc/rsyncd.conf
#创建密码文件 必须要和服务端的pass 文件里面的密码一样
echo "www" > /etc/rsync.pass
--------------------------实时同步 ---------------------------
#创建启动脚本(实时同步)
-----------------------脚本内容------------------------------------------------------
vim tui.sh /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib /data/ \ |while read files do rsync -vzrtopg --delete --progress --password-file=/etc/rsync.pass /data/ [email protected]::web echo "${files} was rsynced" >>/dat2/rsynced.log 2>&1 done
----------------------------------------------------------------------------------------
#赋予tui.sh可执行权限,我赋予了777
chmod 777 tui.sh
#后台运行脚本
/dat2/tui.sh &
#将脚本启动命令放入开启启动项目:
echo "/dat2/tui.sh &" >> /etc/rc.local
#测试部分:
尝试一下同步,在B主机的/data/ 下创建文件夹,然后在A主机的/data/ 下 ls 查看是否存在。
---------------------------定时同步-----------------------------------------------
定时同步:
#创建脚本dingshi.sh
------------脚本内容--------------------------------
rsync -vzrtopg --delete --progress --password-file=/etc/rsync.pass /data/ [email protected]::web echo "${files} was rsynced" >>/dat2/rsynced.log 2>&1
-------------------------------------------------------------------------
提示:
rsync -vzrtopg --
delete
--progress --password-file=/etc/rsync.pass 源目录 www(账户)@
192.168
.
80.146
::web(服务端的指定模块)
#赋予可执行权限
chmod 777 dingshi.sh
#做定时计划任务,每2分钟执行一次同步任务
crontab -e */2 * * * * root /dat2/dingshi.sh
#测试同步 在/data 里面创建任意文件,2分钟之后检测192.168.80.141的/data 里面是不是也存在 即可。