Centos 7 下 配置 Rsync 以及 rsync+inotify 实时同步

rsync介绍

rsync是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支
持增量备份,保持链接和权限,且采用优化的同步算法,在传输前执行压缩,因此非
常适用于异地备份、镜像服务器等应用。

rsync的官方站点是http://rsync.samba.org/,由 Wayne Davison进行维护。作为一
种最常用的文件备份工具,rsync往往是 Linux和UNIX系统默认安装的基本组件之一

rsync 源服务器 配置

rpm -q rsync 可以查看系统自带了rsync服务

vim /etc/rsyncd.com
 uid = nobody     
 gid = nobody
 use chroot = yes    ##禁锢在源目录
 address = 192.168.x.x     ##监听地址
 port 873     ##监听端口
 log file = /var/log/rsyncd.log   ##日志文件位置
 pid file = /var/run/rsyncd.pid    ##进程ID位置
 hosts allow = 192.168.x.0/24    允许访问的客户机地址

 [wwwroot]      ##共享模块名称
 path = /var/www/html     ##源目录的实际路径
 comment = www.abc.cn
 read only = yes     ##是否为只读
 dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2     ##同步时不再压缩的文件类型
 auth users = backuper    ##授权账户
 secrets file = /etc/rsyncd_users.db   ##存放账户信息的数据文件

 vim /etc/rsyncd_users.db
  backuper:abc123     ##格式为   账户名:密码
  chmod 600 /etc/rsyncd_users.db    ##因为账户信息明文存放,调整文件权限避免账号信息泄露

  rsync --daemon    ##启动rsync服务
  netstat -ntap |grep rsync
  rsync以873端口开启

  rsync 源服务器就配置完成了

使用rsync 备份工具

在发起端 有两种方式可以访问rsync同步源,并下载到本地 /opt 目录下进行备份

格式一:
rsync -avz backuper@192.168.x.x::wwwroot /opt/   

格式二:
rsync -avz rsync://backuper@192.168.x.x/wwwroot /opt/

这两种方法都需要进行交互 输入密码后即可进行备份。

为了在同步过程中不需要输入密码,需要创建一个密码文件。
vim /etc/server.pass
abc123

rsync -az --delete --password-file=/etc/server.pass backuper@192.168.x.x::wwwroot /opt
## 免交互进行备份

配置 rsync + inotify 实时同步

工作原理

Linux内核从2.6.13版本开始提供了 inotify通知接口,用来监控文件系统的各种
变化情况,如文件存取、删除、移动、修改等。利用这一机制,可以非常方便地实现
文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。

将rsync工具与inotify机制相结合,可以实现触发式备份(实时同步)—只要
原始位置的文档发生变化,就立即启动增量备份操作,否则处于静默
等待状态。这样,就避免了按固定周期备份时存在的延迟性、周期过密等问题。

实验过程

调整inotify内核参数
vim /etc/sysctl.conf

fs.inotify.max_queued_events = 16384   ##监控事件队列
fs.inotify.max_user_instances = 1024    ##最多监控实例数
fs.inotify.max_user_watches = 1048576    ##每个实例最多监控文件数

tar xzvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14

./configure

make && make install

inotifywait -mrq -e modify,create,move,delete /var/www/html/
## -m表示持续监控  -r 表示递归整个目录  -q 表示简化输出信息  -e 用来指定要监控哪些事件

此时在 /var/www/html 下的操作会被同步监控并显示

接下来编写触发时同步脚本

vim inotify.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/ backuper@192.168.x.x::wwwroot/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then
        $RSYNC_CMD
    fi
done

chmod +x inotify.sh

此脚本用来检测本机 /var/www/html 的变动情况,一旦有更新触发 rsync同步操作,上传备份至 192.168.x.x 的 /var/www/html 目录下