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 里面是不是也存在 即可。