Rsync+Inotify远程实时同步
rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。
官方网站:http://rsync.samba.org/
开始部署Rsync
1、在服务器A和服务器B上同时安装rsync服务和Xinetd服务yum install -y rsync
yum install -y xinetd*
2、在服务器A上编辑/etc/rsyncd.conf配置文件(没有这个文件的话可自行创建)
uid = nobody
gid = nobody
use chroot = yes
address = 192.168.1.1 #本机地址
port 873 #监听的端口
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.1.2 #允许访问的客户机地址
[web] #项目名称
path = /var/www/html/ #项目路径
comment = Web Directory #项目描述
read only = no #可读写
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步时不再压缩的文件
auth users = rsync #用户认证信息
secrets file = /etc/rsync_users.db #用户认证信息存放的路径
hosts allow = 192.168.1.2
可创建多个项目
3、在服务器A上创建用户认证信息文件,格式:[账号]:[密码],这里注意一点就是权限必须设置成600
vim /etc/rsyncd_users.db
rsync:123456
:wq
4、在服务器A上启动Rsync服务程序,修改/etc/xinetd.d/rsync文件
service rsync
{
disable = no #将原来的yes改为no
flags = IPv4 #将原来的IPv6改为IPv4
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
service xinetd restart
如果启动不成功用以下方式启动,以daemon方式启动,然后再次运行systemctl xinetd restart
rsync --daemon
5、在服务器B上测试同步(防火墙记得开放端口哟!!!)/usr/bin/rsync -vzrtopg --delete --exclude ".svn/" --password-file=/etc/rsync_users.pass rsync@47.88.56.104::web /var/www/html/
#-v, --verbose 详细模式输出 #-z, --compress 对备份的文件在传输时进行压缩处理 #-r, --recursive 对子目录以递归模式处理 #-t, --times 保持文件时间信息 #-o, --owner 保持文件属主信息 #-p, --perms 保持文件权限 #-g, --group 保持文件属组信息 #--delete 删除那些DST中SRC没有的文件 #--exclude=PATTERN 指定排除不需要传输的文件模式 #--progress 在传输时现实传输过程
#-H, --hard-links 保留硬链接
#-P,显示进度 #--password-file=FILE 从FILE中得到密码,这个文件必须是600权限,chmod 600 /etc/rsync_users.pass
6、将Rsync加入任务计划中,每隔2分钟同步一次crontab -e
定期同步的不足
1、执行备份的时间固定,延迟明显、实时性差
2、当同步源长期不变化时,密集的定期任务是不必要的
实时同步的优点
1、一旦同步源出现变化,立即启动备份
2、只要同步源无变化,则不执行备份
Inotify简介
Inotify 是一个 Linux特性,从版本2.6.13开始提供,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。学习如何将 inotify 集成到您的应用程序中,并发现一组可用来进一步自动化系统治理的命令行工具。
开始配置Inotify
*注:在开始之前需要在服务器B上也安装好Rsync并且开启服务,但是这里要注意一点是服务器B是有服务器A推送的所以需要有写入的权限,因此rsyncd.conf文件中的read only = yes需要改为read only = no;
1、在服务器A上调整inotify内核参数,vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
2、使调整inotify内核参数立刻生效sysctl -p
3、安装Inotify-Tool工具yum install -y inotify-tools
4、打开两个终端,一个终端执行创建删除等操作,另一个执行Inotify-Tool工具,测试Inotify-Tool工具时候正常inotifywait -mrq -e modify,create,move,delete /var/www/html
notifywait:用于持续监控,实时输出结果
inotifywatch:用于短期监控,任务完成后再出结果
5、编写触发式脚本,vim /root/inotify_rsync.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ rsync@118.25.48.231:/var/www/html"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then
$RSYNC_CMD
fi
done
6、添加开机自动后台自动运行,编辑/etc/profile文件,在最后一行加入下面语句
/bin/bash /root/inotify_rsync.sh &
这个比较好用,用于上传
inotifywait -mrq -e isdir,modify,create,attrib,move,delete /usr/share/tomcat/bin/|\
while read line
do
rsync -avropgzHP --delete /usr/share/tomcat/bin/ rsyncuser@192.168.1.4::bin --password-file=/etc/passwd.txt
done
本地同步
inotifywait -mrq -e modify,create,attrib,move,delete /usr/local/nginx/html/public/uploads/|\
while read line
do
rsync -avropgzHP --delete /usr/local/nginx/html/public/uploads/ /usr/local/nginx/html/woso/public/uploads
done
转载:https://blog.51cto.com/13444271/2113632