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
posted @ 2020-03-09 15:12  庞优秀  阅读(303)  评论(0编辑  收藏  举报