inotify+rsync实现实时同步

配置A服务器与B服务器免密登录

  • inotifywait命令使用简介:

inotifywait尤其适用于在脚本中等待某事件的发生,并可基于特定的事件执行相应操作。如将其用于脚本中监控某指定目录中的文件上的修改、新建、删除、属性信息的改变,而后使用rsync命令将某事件对应的文件同步至其它主机上。

直接开始吧,我们追求结果,不管原理。^ _^

安装实时监测工具inotify和同步工具rsync

$ sudo apt-get update
$ sudo apt-get install inotify-tools
$ sudo apt-get install rsync

添加 inotify 的参数到系统内核配置

$ tail -4 /etc/sysctl.conf

###inotify的参数
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

inotify实时监控目录变化

$ inotifywait -mrq -e modify,create,move,delete /data/test

inotify单次监控目录或者文件变化(一般是目录才有意义)

$ inotifywatch -mrq -e modify,create,move,delete /data/test

配置完成之后直接编辑脚本

$ cat <<EOF >> inotifyRsync.sh
#!/bin/bash
#Author:Shensg

#Time:2020-12-29

DIR="/data/test"
COPYDIR="/data/test"
_INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete $DIR"
_RSYNC_CMD="rsync -azH --delete  $DIR/  ubuntu@192.168.7.19:$DIR"
$_INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
	if [ $(pgrep rsync | wc -l) -le 0 ] ; then
		$_RSYNC_CMD
	fi
done

EOF

脚本配置好之后放到系统( /etc/profile.d/ )的启动文件目录里面,系统重启就会运行
如果不放到系统启动启动文件目录下也可以自己建一个进程运行也可以,看大家的喜好吧

rsync 指定目录和密码文件同步方式

$ cat <<EOF >> /home/$USER/rsyncd.conf
port = 2873
use chroot = false
max connections = 100
strict modes = yes
pid file = /run/rsyncd.pid
lock file = /run/rsync.lock
log file = /var/log/rsyncd.log

[www]
path = /var/www/html
comment = Backup LobbyServer logs file
ignore errors
read only = no
write only = no
list = false

##这个默认不识别,有时候生效,有时候不生效,笔者目前也不知道是什么原因,所以在写时会多写一个
[test]
path = /test
comment =Backup LobbyServer logs file
ignore errors
read only = no
write only = no
list = false

hosts allow = 10.10.104.255/32     #开启白名单
hosts deny = 0.0.0.0/0                   #拒绝所有人
#auth users = ubuntu
secrets file = /tmp/rsync.secrets       #密码文件

EOF

生成rsync的密码文件,授权600权限(必须是600权限,否则失败)

$ cat <<EOF >>/tmp/rsync.secrets
#user:password
ubuntu:123456
EOF

chmod 600 /tmp/rsync.secrets

启动rsync进程

rsync --daemon --config=/home/$USER/rsyncd.conf

客户端只需要配置生成密码文件即可同步(密码文件直接复制服务端的即可)
生成rsync的密码文件,授权600权限(必须是600权限,否则失败)

$ cat <<EOF >>/tmp/rsync.secrets
ubuntu:123456
EOF

chmod 600 /tmp/rsync.secrets

同步文件

$ rsync -avz --password-file=/etc/rsyncd.secrets /var/www/html ubuntu@192.168.7.19::www

版权声明:本文为qq_43649264原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。