rsycn和inotify

本文介绍如何使用 Rsync 实现文件系统的实时同步,包括安装配置、脚本编写及后台执行等步骤。通过 inotify-tools 监听文件变动并触发 Rsync 同步,实现高效的数据同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Rsync

可以镜像保存整个目录树和文件系统
可以很容易做到保持原来文件的权限、时间、软硬链接等等
无须特殊权限即可安装
快速:第一次同步时rsync会复制全部内容,但在下一次只传输修改过的文件。rsync在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽
安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接支持匿名传输,以方便进行网站镜象

常用选项

//rsync常用选项:
    -a, --archive       //归档
    -v, --verbose       //啰嗦模式
    -q, --quiet         //静默模式
    -r, --recursive     //递归
    -p, --perms         //保持原有的权限属性
    -z, --compress      //在传输时压缩,节省带宽,加快传输速度
    --delete            //在源服务器上做的删除操作也会在目标服务器上同步

环境

机器ip软件目录
master192.168.50.60rsync,inotify-tooks,脚本/web1/wwwroot
slave192.168.50.61rsync/web1/wwwroot

安装使用

slave

yum -y install rsync
vim /etc/rsync.conf

pid file = /var/run/rsyncd.pid
lock file=/var/run/rsync.lock
log file=/var/log/rsyncd.log
[web1]
path = /web1/wwwroot
comment = web1 file
ignore errrors
read only=no
write only=no
hosts allow=*
hosts deny=192.168.60.10
list=false
uid=root
gid=root
auth users=web1user
secrets file=/etc/web1.pass

创建密码文件

(文件格式:user:pass)
/etc/web1.pass

web1user:www123

权限

chmod 600 /etc/web1.pass

启动和自启

systemctl start rsyncd
systemctl enable rsyncd

master (发布节点)

安装

yum install rsync gcc -y
wget http://github.com/downloads/rvoicilas/inotify-tools/ 
tar xf  inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure
make && make install 

密码文件

和节点服务器密码一致
vim /etc/server.pass
www123
chmod 600 /etc/server.pass

脚本编辑

#!/bin/bash
host1=192.168.50.61
src=/web/wwwroot/
dst1=web1
user1=web1user
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib $src \
| while read files
do
        /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass $src $user1@$host1::$dst1 > /dev/null 2>&1
        echo "${files} was rsynced." >> /tmp/rsync.log 2>&1
done

脚本放入后台执行

在master上面的/web/wwwroot 添加\删除\修改文件
slave 上面的 /web1/wwwroot 会同步变化

扩展学习资源

### rsync与inotify结合实现实时同步的教程 rsync是一款强大的数据同步工具,支持全量增量同步,能够高效地完成本地或远程的数据备份。inotify是Linux内核提供的一种文件系统事件监控机制,可以实时捕获文件系统的修改事件[^2]。将rsync与inotify结合使用,可以实现高效的实时数据同步。 以下是一个完整的rsync与inotify结合的方案: --- #### 一、环境准备 1. **确保系统支持inotify** 确认内核版本高于2.6.13,并检查`/proc/sys/fs/inotify`目录下是否存在以下三项配置: - `max_user_watches`:每个用户可监控的最大文件数。 - `max_user_instances`:每个用户可创建的最大实例数。 - `max_queued_events`:队列中可存储的最大事件数。 如果需要调整这些参数,可以通过以下命令进行优化: ```bash echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf sudo sysctl -p ``` 2. **安装必要工具** - 安装`rsync`工具: ```bash yum install -y rsync ``` - 安装`inotify-tools`工具: ```bash yum install -y inotify-tools ``` --- #### 二、配置rsync服务端 1. **创建rsync配置文件** 编辑`/etc/rsyncd.conf`文件,添加以下内容: ```conf uid = nobody gid = nobody use chroot = no max connections = 10 timeout = 300 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsync.log [backup] path = /backup/ comment = Backup Directory read only = no auth users = rsync_backup secrets file = /etc/rsync.password ``` 其中,`[backup]`表示模块名称,`path`为同步的目标目录。 2. **创建密码文件** 创建密码文件`/etc/rsync.password`,并设置权限为600: ```bash echo "rsync_backup:your_password" > /etc/rsync.password chmod 600 /etc/rsync.password ``` 3. **启动rsync服务** 启动rsync服务并确保其监听873端口: ```bash rsync --daemon lsof -i :873 ``` --- #### 三、编写inotify+rsync脚本 在客户端主机上编写一个Shell脚本,用于监控源目录的变化并触发rsync同步。 ```bash #!/bin/bash # 定义变量 host=192.168.198.140 # rsync服务端IP地址 src=/root/full # 源目录 dest=backup # rsync模块名称 password=/etc/rsync.password # 密码文件路径 user=rsync_backup # rsync认证用户 inotifywait=/usr/bin/inotifywait # inotify工具路径 # 使用inotifywait监控源目录变化 $inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f %e' -e 'modify,delete,create,attrib' $src | while read files; do # 触发rsync同步 rsync -avzP --delete --timeout=100 --password-file=${password} $src ${user}@${host}::${dest} echo "${files} was rsynced!" >> /tmp/rsync.log 2>&1 done ``` - 参数说明: - `-m`:持续监控。 - `-r`:递归监控目录。 - `-q`:静默模式。 - `-e`:指定监控的事件类型(如修改、删除等)。 - `--timefmt``--format`:定义日志格式。 --- #### 四、测试与验证 1. 在客户端运行脚本: ```bash bash rsync_inotify.sh ``` 2. 在源目录中创建、修改或删除文件,观察是否触发rsync同步。 3. 检查目标服务器上的`/backup/`目录,确认文件已同步。 --- #### 五、常见问题排查 1. **rsync服务未启动** 检查rsync服务是否正常运行: ```bash ps -ef | grep rsync lsof -i :873 ``` 如果服务异常,尝试重启服务: ```bash kill -9 <PID> rm -rf /var/lock/rsync.pid rsync --daemon ``` 2. **权限问题** 确保虚拟用户的目录权限正确,密码文件权限为600。 3. **防火墙或SELinux干扰** 检查SELinuxiptables是否阻止了rsync通信[^3]。 --- ### 示例代码块 以下是一个完整的Shell脚本示例: ```bash #!/bin/bash host=192.168.198.140 src=/root/full dest=backup password=/etc/rsync.password user=rsync_backup inotifywait=/usr/bin/inotifywait $inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f %e' -e 'modify,delete,create,attrib' $src | while read files; do rsync -avzP --delete --timeout=100 --password-file=${password} $src ${user}@${host}::${dest} echo "${files} was rsynced!" >> /tmp/rsync.log 2>&1 done ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值