配置rsync+inotify 实时同步
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了配置rsync+inotify 实时同步相关的知识,希望对你有一定的参考价值。
rsync简介:
rsync是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,保持连接和权限,且采用优化的同步算法,在传输前执行压缩,因此非常适用于异地备份,镜像服务器等。rsync的官方站点是http://rsync.samba.org/. 作为一种最常用的文件备份工具,rsync是Linux和Unix系统默认安装的基本组件之一。
[[email protected] ~]# rpm -q rsync
rsync-3.0.9-18.el7.x86_64
inotify简介:
Inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。rsync工具与inotify机制相结合,可以实现触发式备份(实时同步)。只要原始位置的文档发生变化,,就立即启动增量备份操作。
环境:
主机 | IP | 软件 |
---|---|---|
rsync服务器 | 192.168.100.135 | rsync |
rsync客户机 | 192.168.100.140 | rsync、inotify |
关闭所有主机的防火墙和安全性策略,仅实验参考。
systemctl stop firewallde.service
setenforce 0
1.配置rsync服务端
(1)建立/etc/rsyncd.conf 配置文件
以网站站点作为源目录/var/www/html和备份账号backuper为例进行配置。
vim /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = yes #禁锢在源目录
address = 192.168.100.135 #监听地址
port 873 #监听端口
log file = /var/log/rsyncd.log #日志文件位置
pid file = /var/run/rsyncd.pid #存放进程ID的文件位置
hosts allow = 192.168.100.0/24 #允许访问的客户机地址
[wwwroot] #共享模块名称
path = /var/www/html #源目录的实际路径
comment = www.kgc.cn
read only = yes #是否为只读
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
chmod 600 /etc/rsyncd_users.db
(3)创建共享路径
mkdir -p /var/www/html
touch /var/www/html/index.html
(3)启动rsync服务程序,运行参数为--daemon
执行rsync --daemon命令就可以启动rsync服务。若要关闭rsync服务,可以采取kill进程的方式,如kill $(cat /var/run/rsyncd.pid),再删掉pid文件即可。
rsync --daemon
2.配置rsync客户端
(1)启动rsync服务
rsync --daemon
(2)访问源服务器中的wwwroot共享模块,并下载到本地/myweb目录下
mkdir /myweb
格式一:
rsync -avz [email protected]::wwwroot /myweb //密码abc123
格式二:
rsync -avz rsync://[email protected]/wwwroot /myweb
rsync命令的基本用法
-a 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD。
-z 对备份的文件在传输时进行压缩处理。
-H 保留硬链结。
-D 保持设备文件信息。
-A 保留ACL属性信息
--delete 删除那些目标位置有而原始位置没有的文件。
--checksum 打开校验开关,强制对文件传输进行校验。
(3)确认同步结果
[[email protected] ~]# ls /myweb
index.html
(4)按计划做免交互执行同步
为了在同步过程中不用输入密码,需要创建一个密码文件如/etc/server.pass,在执行同步时使用选项--password-file=/etc/server.pass指定即可。
vim /etc/server.pass
abc123
[[email protected] ~]# cat /etc/server.pass
abc123
[[email protected] ~]# chmod 600 /etc/server.pass //设置权限
[[email protected] ~]# crontab -e
30 22 * * * rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /myweb
//每天22点30分执行同步
[[email protected] ~]# service crond start //启动计划任务
Redirecting to /bin/systemctl start crond.service
[[email protected] ~]# chkconfig crond on
注意:正在将请求转发到“systemctl enable crond.service”。
(5)调整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
sysctl -p
(6)安装inotify-tools
inotify-tools提供inotifywait和inotifywatch辅助工具程序,用来监控和汇总改动情况。
yum install gcc gcc-c++ -y //安装gcc编译环境
tar zxvf inotify-tools-3.14.tar.gz -C /opt/
cd /opt/inotify-tools-3.14
./configure
make && make install
(7)以监控网站目录/var/www/html为例
yum install httpd -y
(8)执行inotifywait命令,然后在另一个终端向/var/www/html目录下添加、移动文件,跟踪屏幕输出结果。
inotifywait -mrq -e modify,create,move,delete /var/www/html/
inotifywait命令选项:
- -e用来指定要监控那些事件
- -m表示持续监控
- -r表示递归整个目录
- -q简化输出信息
另一个终端在目录路径下对文件进行创建和删除操作。
返回到原来的终端查看屏幕输出结果。
(9)编写触发式同步脚本
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) -ge 0 ] ; then
$RSYNC_CMD
fi
done
chmod +x /opt/inotify.sh
3.验证
(1)编辑配置文件修改“read only”,然后将服务器中/var/www/html目录设置成可写权限,属主和属组改成与uid一样。
vim /etc/rsyncd.conf
[wwwroot]
....
read only=No
....
chmod 777 /var/www/html
chown -R nobody:nobody /var/www/html
(2)在本机运行/opt/inotify.sh脚本程序
[[email protected] ~]# cd /opt/
[[email protected] opt]# ./inotify.sh
(3)切换到本机的/var/www/html,执行添加、修改、删除等操作。
(3)查看服务器中的/var/www/html目录下的变化.
以上是关于配置rsync+inotify 实时同步的主要内容,如果未能解决你的问题,请参考以下文章
rsync下行同步rsync+inotify实时同步(同步如饮水一样简单)