Mingo

Rsync+Inotify远程实时同步
Rsync简介rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同...
扫描右侧二维码阅读全文
15
2018/09

Rsync+Inotify远程实时同步

Rsync简介

rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。官方网站:http://rsync.samba.org/
原理

开始部署Rsync

在服务器A和服务器B上同时安装rsync服务和Xinetd服务

yum install -y rsync

在服务器A上编辑/etc/rsyncd.conf配置文件(没有这个文件的话可自行创建)

uid = nobody
gid = nobody
use chroot = yes
address = 47.88.56.104 #本机地址
port 873 #监听的端口
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 118.25.48.231 #允许访问的客户机地址

[web] #项目名称
path = /var/www/html #项目路径
comment = Web Directory #项目描述
read only = yes #只读
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步时不再压缩的文件
auth users = rsync #用户认证信息
secrets file = /etc/rsync_users.db #用户认证信息存放的路径

在服务器A上创建用户认证信息文件,格式:[账号]:[密码],这里注意一点就是权限必须设置成600

vim /etc/rsyncd_users.db
rsync:123456
:wq

在服务器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

在服务器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 在传输时现实传输过程
--password-file=FILE 从FILE中得到密码,这个文件必须是600权限,chmod 600 /etc/rsync_users.pass

测试推送
将Rsync加入任务计划中,每隔2分钟同步一次
 任务计划

定期同步的不足

  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;

在服务器A上调整inotify内核参数,vim /etc/sysctl.conf

fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

系统参数

sysctl -p

安装Inotify-Tool工具

yum install -y inotify-tools

打开两个终端,一个终端执行创建删除等操作,另一个执行Inotify-Tool工具,测试Inotify-Tool工具时候正常

inotifywait -mrq -e modify,create,move,delete /var/www/html

inotifywait:用于持续监控,实时输出结果
inotifywatch:用于短期监控,任务完成后再出结果

同步架构
编写触发式脚本,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

添加开机自动后台自动运行,编辑/etc/profile文件,在最后一行加入下面语句

/bin/bash /root/inotify_rsync.sh &

End。。。。。。。。。

Last modification:May 19th, 2019 at 05:39 am

Leave a Comment