rsync+inotify同步备份

来自bing壁纸

简介

rsync是一个同步工具,支持增量和全量备份。配合inotify可以实现同步备份。

实验准备

192.168.80.10,192.168.80.20这两台服务器分别为源主机和目标主机,分别在两台服务器上建立/rsyncsrc/rsyncdes用来存放实验文件。

安装

一、仅rsync的方式

对于源主机而言是将文件“推送到(push)目标主机”
对于目标主机而言是将文件从源主机“拉取到(pull)本地”

下载rsync

yum -y install rsync 

由于rsync支持ssh,rsync两种协议,下面分别对这两种进行实验:

a. 使用ssh协议进行同步

在源主机/rsyncsrc下建立文件
image.png
将源主机内容推送到目标主机
rsync -avz /rsyncsrc/* [email protected]:/rsyncdes

a: 递归保留文件的属性
v: 显示过程
z: 压缩

image.png

可以看到目标主机有了源主机推送的内容

同理,在目标主机将文件推送到源主机
rsync -avz /rsyncdes/* [email protected]:/rsyncsrc/
image.png

Note: 若要配置免密登陆
ssh-keygen -t rsa
ssh-copy-id hostname

b.使用rsync协议进行同步

修改/etc/rsyncd.conf
添加如下内容

uid = nobody
gid = nobody
use chroot = yes
address = 192.168.80.10
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
[web]
    path = /rsyncsrc
    read only = no
    dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z
    auth users = test1
    secrets file = /etc/rsyncd_users.db

新建/etc/rsyncd_users.db用于保存rsync所需的用户和密码
test1:123456

修改权限(必须,否则不会生效)
chmod 600 /etc/rsyncd_users.db
启动服务
rsync --daemon
查看进程
image.png

测试

下行同步(下载):
rsync -avz rsync://[email protected]/web/ /rsyncdes/
上行同步 (上传)
rsync -avz /rsyncdes/* rsync://[email protected]/web

拓展: --delete 删除本地比源主机上多的文件(源主机没有,本地有)

Note:由于在目标主机是用nobody进行操作的,因此对于源主机的/rsyncsrc目录可能没有足够的权限去操作。因此可以配合ACL来增加特殊权限。
setfacl -m u:nobody:rwx /rsyncsrc

拓展

rsync协议若想要免密登陆,由客户端添加一个环境变量,export RSYNC_PASSWORD=虚拟用户密码

二、rsync+inotify 同步备份

解压inotify源码文件并编译安装。
inotifywait -mrq -e create,modify,delete /rsyncsrc/ &

其中 m:保持监听状态
r 递归查询
q 只打印监控事件的信息
e 后面跟具体的事件

基于以上,可以写个脚本用来实时同步备份文件(在源主机上执行)

#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /rsyncsrc/"
RSYNC_CMD="rsync -azH --delete /rsyncsrc/ [email protected]:/rsyncdes"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 5 ] ; then
        $RSYNC_CMD
    fi
done

结果如下:


image.png
image.png
试验成功!

你可能感兴趣的:(rsync+inotify同步备份)