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实时备份的主要内容,如果未能解决你的问题,请参考以下文章