ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

rsync + inotify 实时同步部署操作文档(新手版)

rsync + inotify 实时同步部署操作文档(新手版) —— 客户端目录文件变化实时备份到服务端rsync inotify 实时同步部署操作文档新手版—— 客户端目录文件变化实时备份到服务端【适用环境】操作系统 : CentOS 7.x本机已验证 CentOS 7.9两台机器 : 服务端存备份 / 客户端放数据提前准备 : 两台机器的 root 账号和密码网络互通【本文约定】请按你自己的实际情况替换下面的值服务端 IP : 10.10.10.129客户端 IP : 10.10.10.130认证用户名 : hu认证密码 : abc-123服务端存储目录 : /hu 接收备份的地方客户端监控目录 : /hu 放文件的地方文件变化会被同步如果你要改只需把下面命令里的 IP、用户名、密码、/hu 目录替换成你自己的即可。第一部分 服务端配置存备份的机器本文 10.10.10.129【步骤1】登录服务端用 root 账号 SSH 登录服务端或直接在服务端本机终端操作。例如从其他机器登录ssh root10.10.10.129【步骤2】关闭防火墙、SELinux新手建议直接关避免同步被拦截systemctl stop firewalldsystemctl disable firewalldsed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config【步骤3】安装 rsync一般系统已自带执行确认即可yum install -y rsync【步骤4】创建存储备份的目录mkdir -p /huchmod 777 /hu【步骤5】创建 rsync 配置文件执行下面整段命令把配置文件一次性写入 /etc/rsyncd.confcat /etc/rsyncd.conf EOFlog file /var/log/rsyncd.logpid file /var/log/rsyncd.pidlock file /var/log/rsyncd.locksecrets file /etc/rsyncd.pasmotd file /etc/rsyncd.motdread only nohosts allow 10.10.10.0/24list yesuid rootgid rootuse chroot nomax connections 4[linux_bak]path /hucomment data backupauth users huEOF说明- hosts allow 后面写允许连接的客户端网段如 10.10.10.0/24- [linux_bak] 是模块名客户端同步时要写这个- path /hu 是实际存储备份的目录- auth users hu 是认证用户名- uid / gid root 让备份文件以 root 属主写入权限更顺【步骤6】创建认证密码文件格式用户名:密码echo hu:abc-123 /etc/rsyncd.paschmod 600 /etc/rsyncd.pascat /etc/rsyncd.pas注意密码文件权限一定要 600否则 rsync 拒绝启动。【步骤7】创建连接提示文件可选可跳过echo ### rsync server ready ### /etc/rsyncd.motd【步骤8】启动 rsync 服务并设为开机自启systemctl start rsyncdsystemctl enable rsyncdsystemctl status rsyncd【步骤9】确认端口 873 已监听ss -anpt | grep 873看到类似下面输出就说明服务端成功了LISTEN ... *:873 ... users:((rsync,...))第二部分 客户端配置放数据的机器本文 10.10.10.130【步骤1】登录客户端ssh root10.10.10.130【步骤2】关闭防火墙、SELinux和服务端一样systemctl stop firewalldsystemctl disable firewalldsed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config【步骤3】安装编译工具和 rsyncyum install -y gcc make rsync【步骤4】把 inotify-tools 源码包上传到客户端方式A用 WinSCP / Xftp 等工具把 inotify-tools-3.14.tar.gz上传到客户机的 /usr/local/bin/ 目录。方式B如果你本地能访问源码地址也可以在客户机直接cd /usr/local/binwget https://github.com/inotify-tools/inotify-tools/archive/refs/tags/3.14.tar.gzmv 3.14.tar.gz inotify-tools-3.14.tar.gz【步骤5】解压并编译安装 inotify-toolscd /usr/local/bintar zxf inotify-tools-3.14.tar.gzcd inotify-tools-3.14./configuremakemake install验证安装成功能看到 inotifywait 路径即成功which inotifywait输出应为/usr/local/bin/inotifywait【步骤6】创建客户端监控目录mkdir -p /huchmod 777 /hu【步骤7】创建客户端密码文件这里只写密码不含用户名echo abc-123 /etc/1.paschmod 600 /etc/1.pascat /etc/1.pas注意客户端密码文件 /etc/1.pas 里只写密码abc-123不要写“用户名:密码”的格式。【步骤8】创建实时同步脚本执行下面整段命令写入 /opt/inotify_rsync.shcat /opt/inotify_rsync.sh EOF#!/bin/bash# rsync inotify 实时同步脚本# 监控 /hu 目录文件变化时实时同步到 服务端IP::linux_bak/usr/local/bin/inotifywait -mrq -e create,move,delete,modify /hu | while read D E F ; dorsync -avH --delete --password-file/etc/1.pas /hu/ hu10.10.10.129::linux_bakdoneEOF赋予执行权限chmod x /opt/inotify_rsync.sh务必注意命令里的 /hu/ 末尾要带斜杠- 写 /hu/ 把 /hu 里面的内容同步到服务端 /hu正确- 写 /hu 会把 /hu 这个文件夹本身同步进去导致服务端出现 /hu/hu 嵌套错误【步骤9】启动实时同步脚本setsid nohup /opt/inotify_rsync.sh /tmp/inotify.log 21 /dev/null 确认监控进程已启动能看到 inotifywait 进程即成功ps -ef | grep inotifywait | grep -v grep【步骤10】设置开机自启重启后自动运行chmod x /etc/rc.d/rc.localecho [ -x /opt/inotify_rsync.sh ] setsid /opt/inotify_rsync.sh /tmp/inotify.log 21 /dev/null /etc/rc.d/rc.localtail -3 /etc/rc.d/rc.local第三部分 验证测试实时同步是否成功【测试1】客户端放文件看服务端是否出现在客户端 130 执行echo hello rsync sync test /hu/test_1.txt等 1~2 秒到服务端 129 查看ls -l /hu/如果看到 test_1.txt 出现在 /hu/ 里说明“新增同步”成功。【测试2】客户端删文件看服务端是否同步删除在客户端 130 执行rm -f /hu/test_1.txt等 1~2 秒到服务端 129 查看ls -l /hu/如果 test_1.txt 也从服务端 /hu/ 消失说明“删除同步”--delete成功。【测试3】手动同步一次排查问题用在客户端 130 执行rsync -avH --password-file/etc/1.pas /hu/ hu10.10.10.129::linux_bak出现 “sending incremental file list” 且无报错说明链路是通的。第四部分 常见问题排查【问题1】同步没反应 / 报 permission denied检查点- 服务端 /etc/rsyncd.pas 权限是否是 600- 客户端 /etc/1.pas 权限是否是 600- 服务端 /etc/rsyncd.conf 里 read only 是否为 no- 客户端密码文件里是否只写了密码没写用户名【问题2】连接超时 / 连不上 873 端口检查点- 服务端是否执行了 systemctl start rsyncd- 服务端 ss -anpt | grep 873 是否有输出- 服务端 hosts allow 网段是否包含客户端 IP- 防火墙是否关闭【问题3】服务端出现 /hu/hu 嵌套目录原因客户端同步脚本里写的是 /hu无尾斜杠解决把脚本里的 /hu 改成 /hu/ 并删除服务端多余嵌套目录rm -rf /hu/hu【问题4】修改脚本后不生效需要先停掉旧进程再重启pkill -9 -f inotifywaitpkill -9 -f inotify_rsync.shsetsid nohup /opt/inotify_rsync.sh /tmp/inotify.log 21 /dev/null 【问题5】如何查看同步日志tail -f /tmp/inotify.log以及服务端日志tail -f /var/log/rsyncd.log小提示1. 密码都是明文存在 /etc/1.pas 和 /etc/rsyncd.pas 里的生产环境建议换成 rsync 的 SSH 认证或更安全的方案。2. 如果备份量很大可以把 hosts allow 收紧到具体客户端 IP例如hosts allow 10.10.10.1303. 文档中的 IP、用户名、密码、/hu 目录请按你的实际环境替换。部署完成祝你顺利如有问题对照“常见问题排查”逐步检查。测试两台虚拟机客户端创建文件服务端测试 看是否存在文件
返回列表