rsync+inotify实时备份

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rsync+inotify实时备份相关的知识,希望对你有一定的参考价值。

一、rsync及inotify概述

1.rsync概述

rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。

2.inotify概述

inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。学习如何将 inotify 集成到您的应用程序中,并发现一组可用来进一步自动化系统治理的命令行工具。
案例环境如下:

角色 IP地址 安装软件包
rsync同步源 192.168.174.141 rsync、
rsync发起端 192.168.174.165 rsync、inotify-tools

二、配置rsync源服务器

1.建立/etc/rsyncd.conf配置文件

vim /etc/rsyncd.conf
 uid = nobody
    gid = nobody
    use chroot = yes                                  //是否禁锢在源目录,yes为是
    address = 192.168.174.141                //监听地址
    port 873                                                   //监听端口
    log file = /var/log/rsyncd.log                    //日志文件路径
    pid file = /var/run/rsyncd.pid                    //进程ID文件路径
    hosts allow = 192.168.174.0/24            //允许访问的客户机的地址段

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

2.为备份账户创建数据文件

vim /etc/rsyncd_users.db
 backuper:abc123    //backuper为用户名 abc123为密码
chmod 600 /etc/rsyncd_users.db  //更改备份账户的读取权限,提高安全性
mkdir -p /var/www/html      
chmod 777 /var/www/html    //更改源目录的读写权限
chown -R nobody:nobody /var/www/html  //更改源目录的所属主及所属组 

3.开启服务,运行参数为 --deamon ;若需关闭服务,可采取kill进程的方式,如kill $(cat /var/run/rsync.pid)

rsync --daemon
netstat -natp | grep rsync
tcp        0      0 192.168.174.141:873     0.0.0.0:*               LISTEN      4875/rsync

三、配置rsync发起端

将对方源目录的文件同步到发起端的/opt目录下,方法有三种:

(1)rsync -avz 备份用户名@同步源IP地址::共享模块名 /发起端目录 password:备份用户密码

rsync -avz [email protected]::wwwroot /opt/  
password:abc123

(2) rsync -avz rsync://备份用户名@共享模块名 /发起端目录 password:备份密码

rsync -avz rsync://[email protected]/wwwroot /opt/
password:abc123

(3)免密码交互

vim /etc/server.pass  //创建server.pass文件备份用户保存密码
abc123
chmod 600 /etc/server.pass  //更改密码文件读取权限,提高安全性
rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt

测试是否同步
在同步源服务器上的共享目录下创建aaa.html
技术分享图片
技术分享图片

四、发起端配置inotify实时同步

1.调整inotify内核参数

vim /etc/sysctl.conf //在后面加入如下参数
    fs.inotify.max_queued_events = 16384    监控事件队列(16384)
    fs.inotify.max_user_instances = 1024    最多监控实例数(1024)
    fs.inotify.max_user_watches = 1048576   每个实例最多监控文件数(1048576)

2.安装编译inotify-tools

yum install gcc gcc-c++ make -y
cd /opt/inofiry-tools-3.14
./configure
make && make install

3.监控事件

重新开启一个终端

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

在/var/www/html目录下创建一个a.txt文件,切换终端查看命令输出的情况
技术分享图片

技术分享图片

4.创建触发式同步脚本

用来检测本机/var/www/html目录的变动情况,一旦有更新触发rsync同步操作,则上传至服务器192.168.174.141的/var/www/html

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

5.测试

在发起端/var/www/html目录下创建test.txt文件
技术分享图片
切换到同步源服务器下/var/www/html下查看
技术分享图片
将发起端的test.txt文件删除
技术分享图片
切换到同步源服务器,此时源服务器下的test.txt文件也被删除,说明同步成功。
技术分享图片

以上是关于rsync+inotify实时备份的主要内容,如果未能解决你的问题,请参考以下文章

rsync+inotify实现数据实时备份

Rsync+Inotify 实时备份

rsync + inotify 实时备份

rsync+inotify实现代码实时同步

Rsync+Inotify实时监听备份

rsync远程同步及rsync+inotify实时同步