inotify+rsync文件实时同步

92次阅读次阅读
没有评论

简介

工具:inotify + rsync 动作:主服务器监控文件变化实时同步给从服务器 主服务器IP:192.168.235.128 从服务器IP:192.168.235.129、192.168.235.130

主服务器操作

    安装inotify

GitHub查看最新版本:https://github.com/inotify-tools/inotify-tools/releases

[root@aikx ~]# wget https://github.com/inotify-tools/inotify-tools/releases/download/3.20.2.2/inotify-tools-3.20.2.2.tar.gz
[root@aikx ~]# tar zxvf inotify-tools-3.20.2.2.tar.gz
[root@aikx ~]# cd inotify-tools-3.20.2.2
[root@aikx inotify-tools-3.20.2.2]# ./configure
[root@aikx inotify-tools-3.20.2.2]# make && make install


如果是32位系统
[root@aikx ~]# ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib/libinotifytools.so.0

如果是64位系统
[root@aikx ~]# ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0

无论32或者64位系统都执行
[root@aikx ~]# echo 104857600 > /proc/sys/fs/inotify/max_user_watches
[root@aikx ~]# echo 'echo 104857600 > /proc/sys/fs/inotify/max_user_watches' >> /etc/rc.local
    新建同步脚本

忽略某些文件同步

[root@aikx ~]# cat /root/inotify_exclude.list
/root/aaa
@/root/aaa/bbb

[root@aikx ~]# cat /root/rsync_exclude.list
/config.conf
/bbb
[root@aikx ~]# cat /root/jk.sh
#!/bin/bash
SRC='/root/aaa/' #需要监控的目录
DES='tb' #从服务器中模块名(看从服务器配置)
USER='root' #从服务器配置中设置 auth users 的用户名(非服务器账号)
IP='192.168.235.129 192.168.235.130' #从服务器IP,多IP空格隔开
rsync_passwd_file='/etc/rsync.password' #从服务器配置中设置的密码 (密码存放在文件中,这里写文件路径)文件内容仅写入密码即可,**该文件权限必须为 600**
INOTIFY_EXCLUDE='--fromfile /root/inotify_exclude.list'
RSYNC_EXCLUDE='--exclude-from /root/rsync_exclude.list'

inotifywait -mrq --exclude "(.swp|.swpx|.swx)" --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w %f' -e modify,create,delete,moved_to,close_write,attrib $INOTIFY_EXCLUDE |while read DATE TIME DIR FILE;do
echo $DATE $TIME $DIR $FILE
FILEPATH=${DIR}${FILE}
echo $FILEPATH
for i in $IP
do
  rsync -avz $RSYNC_EXCLUDE --delete --password-file=$rsync_passwd_file $SRC $USER@$i::$DES && echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /root/sync.log
done
done

inotify 可以监视的文件系统事件:

IN_ACCESS,即文件被访问
IN_MODIFY,文件被 write
IN_ATTRIB,文件属性被修改,如 chmod、chown、touch 等
IN_CLOSE_WRITE,可写文件被 close
IN_CLOSE_NOWRITE,不可写文件被 close
IN_OPEN,文件被 open
IN_MOVED_FROM,文件被移走,如 mv
IN_MOVED_TO,文件被移来,如 mv、cp
IN_CREATE,创建新文件
IN_DELETE,文件被删除,如 rm
IN_DELETE_SELF,自删除,即一个可执行文件在执行时删除自己

从服务器操作

[root@aikx ~]# yum -y install rsync
[root@aikx ~]# cat /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd-eisp.pid
lock file = /var/run/rsync-eisp.lock
log file = /var/log/rsyncd-eisp.log
ignore errors
read only = false
list = false
hosts allow = 192.168.235.128 #允许接入的IP,设置主服务器IP
hosts deny = 0.0.0.0 #禁止接入的IP
auth users = root #安全用户,自定义
secrets file = /etc/rsync.password #密码文件,文件内容为 `用户:密码` **该文件权限必须为 600**
[tb] #自定义模块名
path = /root/tmp #文件同步至设置的目录
[root@aikx ~]# systemctl start rsyncd
[root@aikx ~]# systemctl enable rsyncd

开启同步

主服务器中执行启动命令(前台运行)

[root@aikx ~]# bash jk.sh

测试同步正常可使用supervisor管理该进程

1
admin
版权声明:本站原创文章,由admin2020-11-06发表,共计3133字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
载入中...