inotify链接:https://github.com/rvoicilas/inotify-tools
A、B两台服务器之间相互做服务端-客户端的策略
实验机器:CentOS 7:192.168.71.65、Ubuntu 16.04:192.168.71.195
同步目录为/root/test/
两端文件名称基本相同,所有文件处于root目录下
服务端文件:
密码认证文件:
rsync-server.passwd 内容:123456 权限600
脚本rsync.sh: 权限764
#!/bin/bash host=192.168.71.* src=/root/test/ des=web user=root /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src | while read files do /usr/bin/rsync -vzrtopg --delete --progress --password-file=/root/rsync-server.passwd $src $user@$host::$des echo "${files} was rsynced" >>/root/rsync.log 2>&1 done
客户端文件:
密码认证文件:
rsync-client.passwd 内容:root:123456 权限600
配置文件:rsync.conf
内容:
uid = root
gid = root
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[web] #此处为模块名称,与服务端脚本相同
path = /root/test/
comment = web file #描述,可自定义
ignore errors
read only = no
write only = no
hosts allow = 192.168.71.* 白名单
hosts deny = * 黑名单
list = false
uid = root
gid = root
auth users = root
secrets file = /root/rsync-client.passwd
启动,
先执行命令
rsync --daemon --config=/root/rsync.conf
再执行rsync.sh脚本
开机启动:
rsync --daemon --config=/root/rsync.conf /root/rsync.sh &
rsync默认监听873端口
日志文件路径:/root/rsync.log为自定义日志,/var/log/rsyncd.log为标准日志
修改inotify默认参数(inotify默认内核参数值太小)
查看系统默认参数值
sysctl -a | grep max_queued_events
结果是:fs.inotify.max_queued_events = 16384
sysctl -a | grep max_user_watches
结果是:fs.inotify.max_user_watches = 8192
sysctl -a | grep max_user_instances
结果是:fs.inotify.max_user_instances = 128
修改参数:
sysctl -w fs.inotify.max_queued_events="99999999" sysctl -w fs.inotify.max_user_watches="99999999" sysctl -w fs.inotify.max_user_instances="65535"
/etc/sysctl.conf #添加以下代码
fs.inotify.max_queued_events=99999999
fs.inotify.max_user_watches=99999999
fs.inotify.max_user_instances=65535
参数说明:
max_queued_events:
inotify队列最大长度,如果值太小,会出现”** Event Queue Overflow **”错误,导致监控文件不准确
max_user_watches:
要同步的文件包含多少目录,可以用:find 同步目录 -type d | wc -l 统计,必须保证max_user_watches值大于统计结果
max_user_instances:
每个用户创建inotify实例最大值
单向同步
A服务器向B服务器传输
A 服务器文件
rsync-server.passwd (权限600)
rsync.sh
B服务器文件
rsync-client.passwd
rsync.conf
首先在B服务器中执行rsync –daemon –config=/root/rsync.conf
然后在A服务器中执行rsync.sh脚本文件