文章目录
- 🧩 一、总体架构设计
- 目标
- 技术选型
- 🏗️ 二、环境规划
- 1. 网络拓扑建议
- 2. IP 规划示例
- 3. 文件路径规划(客户端)
- ⚙️ 三、部署实施
- 第一步:搭建中央备份服务器(Backup Server)
- 1. 安装 rsync
- 2. 创建 rsync 用户(非 shell 登录)
- 3. 编写配置文件 `/etc/rsyncd.conf`
- 4. 创建认证密码文件(每个 client 一个)
- 5. 创建存储目录并授权
- 6. 使用 systemd 启动 rsync 服务
- 7. 验证服务运行
- 第二步:配置客户端(Client Node)
- 1. 安装 rsync
- 2. 创建备份脚本 `/opt/scripts/backup_rsync.sh`
- 3. 创建密码文件
- 4. 加入定时任务(crontab)
- 5. 设置执行权限
- ✅ 四、测试与验证
- 1. 单机测试(手动触发)
- 2. 服务端验证接收
- 3. 连通性测试
- 4. 模拟恢复测试(必须做!)
- 📦 五、交付文档
- 1. 交付清单
- 2. 示例:备份保留策略
- 🛠️ 六、后期运维与优化
- 1. 自动化批量管理(必选)
- 2. 增加监控告警
- 3. 性能优化建议
- 4. 安全加固
- 5. 扩展方向
- 🧾 总结
- 📎 附录:常用命令速查
基于
rsync配置后台服务,实现对约 100 台 CentOS 7.9 系统的LAMP和LNMP架构服务器进行全网备份,是一项典型的运维自动化任务。以下从环境规划、部署实施、测试验证、交付文档、日常运维五个阶段,提供一套完整、可落地的技术方案。🧩 一、总体架构设计
目标
- 对 100 台左右 LAMP/LNMP 服务器的关键数据进行定时增量备份。
- 使用
rsync daemon模式(非 SSH),提升效率和安全性。 - 支持断点续传、压缩传输、权限保留。
- 备份中心集中存储 + 增量日志审计 + 异常告警。
技术选型
| 组件 | 说明 |
|---|---|
| rsync | 后台守护模式同步文件 |
| xinetd / systemd | 托管 rsync 服务(推荐 systemd) |
| inotify-tools (可选) | 实时触发同步(按需启用) |
| cron | 定时执行备份脚本 |
| NFS/SAN/本地磁盘 | 备份存储后端 |
| Shell 脚本 + 日志系统 | 自动化调度与监控 |
| Prometheus + Alertmanager / Zabbix(后期) | 监控备份状态 |
🏗️ 二、环境规划
1. 网络拓扑建议
[Client Nodes: 100× LAMP/LNMP] ↓ rsync over TCP (port 873) [Backup Server: 1× Central Rsync Server] ↓ [Storage Backend: RAID/NFS/Ceph]建议:备份服务器部署在内网 VLAN 中,禁止公网访问。
2. IP 规划示例
| 类型 | 示例 IP 段 | 说明 |
|---|---|---|
| Client Nodes | 192.168.10.10 ~ 192.168.10.110 | Web 服务器集群 |
| Backup Server | 192.168.10.200 | 主控备份节点 |
| 存储容量预估 | ≥5TB(初始) | 根据每日增量估算 |
💡 假设每台平均 20GB 数据,保留 7 天全量 + 增量 ≈ 2TB;冗余预留至 5TB+
3. 文件路径规划(客户端)
| 应用类型 | 备份目录 |
|---|---|
| LAMP | /var/www/html,/etc/httpd,/var/lib/mysql(若本地数据库) |
| LNMP | /usr/share/nginx/html,/etc/nginx,/var/lib/mysql,/root/.my.cnf |
| 共同项 | /etc/passwd,/etc/group,/etc/shadow,/root/.ssh/authorized_keys,/etc/crontab,/var/spool/cron/* |
✅ 注意:数据库建议先 mysqldump 再备份
.sql文件,避免直接拷贝 ibdata 导致不一致!
⚙️ 三、部署实施
第一步:搭建中央备份服务器(Backup Server)
1. 安装 rsync
yuminstall-yrsyncxinetdCentOS 7.9 默认已安装 rsync,检查:
rpm-qa|greprsyncwhichrsync2. 创建 rsync 用户(非 shell 登录)
useraddrsync-s /sbin/nologin -M3. 编写配置文件/etc/rsyncd.conf
uid = rsync gid = rsync use chroot = no max connections = 100 log file = /var/log/rsync.log pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock # 模块定义 —— 按主机命名空间隔离 [web_backup_192.168.10.10] path = /backup/web/192.168.10.10/ comment = Backup for web server 192.168.10.10 read only = no list = yes auth users = backup_user_10 secrets file = /etc/rsync_192.168.10.10.passwd hosts allow = 192.168.10.10 [web_backup_192.168.10.11] path = /backup/web/192.168.10.11/ comment = Backup for web server 192.168.10.11 read only = no list = yes auth users = backup_user_11 secrets file = /etc/rsync_192.168.10.11.passwd hosts allow = 192.168.10.11 # ...其他机器依次类推(可用脚本生成)🔒 提示:实际中可通过模板 + Ansible 自动生成所有模块。
4. 创建认证密码文件(每个 client 一个)
# 示例:为 192.168.10.10 创建echo"backup_user_10:MyStr0ngP@ssw0rd1">/etc/rsync_192.168.10.10.passwdchmod600/etc/rsync_192.168.10.10.passwdchownrsync:rsync /etc/rsync_192.168.10.10.passwd5. 创建存储目录并授权
mkdir-p /backup/web/192.168.10.{10..110}chown-R rsync:rsync /backup/web6. 使用 systemd 启动 rsync 服务
创建/etc/systemd/system/rsyncd.service:
[Unit] Description=Fast remote file copy program daemon After=network.target [Service] User=root ExecStart=/usr/bin/rsync --daemon --config=/etc/rsyncd.conf --no-detach Restart=always [Install] WantedBy=multi-user.target启动服务:
systemctl daemon-reload systemctlenablersyncd systemctl start rsyncd firewall-cmd --permanent --add-port=873/tcp firewall-cmd --reload7. 验证服务运行
ss -tulnp|grep:873 telnet192.168.10.200873第二步:配置客户端(Client Node)
1. 安装 rsync
yuminstall-yrsync2. 创建备份脚本/opt/scripts/backup_rsync.sh
#!/bin/bash# 参数设置RSYNC="/usr/bin/rsync"SERVER="192.168.10.200"MODULE="web_backup_${HOSTNAME}"USER="backup_user_${HOST_IP##*.}"# 如 backup_user_10PASSWD_FILE="/etc/rsync.password"LOCAL_DIRS="/var/www/html /etc/httpd /etc/nginx /var/lib/mysql/dump.sql"DATE=$(date+"%Y%m%d_%H%M%S")LOG="/var/log/backup_rsync.log"exec>>$LOG2>&1echo"=== Start backup at$DATE==="# 数据库导出(关键!)MYSQLDUMP="/usr/bin/mysqldump"$MYSQLDUMP--single-transaction -u root -p'mysql_root_pass'--all-databases>/var/lib/mysql/dump.sqlif[$?-ne0];thenecho"❌ MySQL dump failed!"exit1fi# 执行 rsync 推送fordirin$LOCAL_DIRS;doif[-d"$dir"]||[-f"$dir"];then$RSYNC-az --delete\--password-file=$PASSWD_FILE\$dir\$USER@$SERVER::$MODULE/data/$(basename$dir)/echo"✅ Synced$dir"elseecho"⚠️ Skipped missing path:$dir"fidoneecho"=== Backup completed at$(date)==="✅ 补充说明:
- 若使用 Nginx,则跳过
/etc/httpddump.sql建议每天不同名(如加时间戳),防止覆盖
3. 创建密码文件
echo"MyStr0ngP@ssw0rd1">/etc/rsync.passwordchmod600/etc/rsync.password4. 加入定时任务(crontab)
# 每天凌晨2点执行02* * * /bin/bash /opt/scripts/backup_rsync.sh5. 设置执行权限
chmod+x /opt/scripts/backup_rsync.shmkdir-p /var/log/touch/var/log/backup_rsync.logchownroot.root /opt/scripts/backup_rsync.sh✅ 四、测试与验证
1. 单机测试(手动触发)
sh-x /opt/scripts/backup_rsync.sh查看日志是否有错误,确认目标路径是否生成文件。
2. 服务端验证接收
ls-la /backup/web/192.168.10.10/data/应看到html/,httpd/,dump.sql等目录。
3. 连通性测试
# 在客户端测试连接服务端模块rsyncrsync://backup_user_10@192.168.10.200/web_backup_192.168.10.10输入密码后应列出模块内容。
4. 模拟恢复测试(必须做!)
选择一台机器,删除部分文件,尝试从备份还原:
rsync-avz\--password-file=/etc/rsync.password\rsync://backup_user_10@192.168.10.200/web_backup_192.168.10.10/data/html/\/var/www/html/重启 Apache/Nginx 验证网站正常。
📦 五、交付文档
1. 交付清单
| 内容 | 说明 |
|---|---|
| 架构图 | 拓扑结构、IP 分配、流程图 |
| 部署手册 | 服务端 & 客户端部署步骤 |
| 账号密码表 | (脱敏处理)用户、密码哈希、对应 IP |
| 备份策略表 | 每日/每周/每月保留策略 |
| 恢复流程指南 | 如何从备份还原单个文件或整机 |
| 监控指标 | 成功次数、失败告警方式 |
| 联系人信息 | 运维负责人、应急响应电话 |
2. 示例:备份保留策略
| 类型 | 保留周期 | 说明 |
|---|---|---|
| 每日增量 | 7 天 | 最近一周每天一份 |
| 每周全量 | 4 周 | 每周日做一次全量快照 |
| 每月归档 | 3 个月 | 归档至冷存储(如磁带、对象存储) |
可通过脚本自动清理旧备份:
find/backup/web/*/data/ -mtime +7 -execrm-rf{}\;🛠️ 六、后期运维与优化
1. 自动化批量管理(必选)
使用Ansible实现一键部署:
# deploy_rsync_client.yml-hosts:webserverstasks:-name:Install rsyncyum:name:rsyncstate:present-name:Write password filecopy:content:"{{ lookup('env','RSYNC_PASS') }}"dest:/etc/rsync.passwordmode:'0600'-name:Deploy backup scripttemplate:src:backup_rsync.sh.j2dest:/opt/scripts/backup_rsync.shmode:'0700'-name:Add cron jobcron:minute:"0"hour:"2"job:"/bin/bash /opt/scripts/backup_rsync.sh"2. 增加监控告警
- Zabbix/Prometheus采集客户端日志中的
"Backup completed"或"failed"。 - Logwatch定期发送摘要邮件。
- 企业微信/钉钉机器人推送失败通知。
3. 性能优化建议
- 开启
--compress减少网络负载。 - 使用
--bwlimit=10000控制带宽,避免影响业务。 - 对大文件使用
--partial断点续传。 - 多线程备份?可用
parallel工具并行推送多目录。
4. 安全加固
- 所有通信走内网 VLAN。
- 使用 iptables 限制仅允许指定 IP 访问 873。
- 定期轮换密码(配合 Ansible)。
- 不使用明文密码?可升级为 SSH Tunnel + rsync over SSH(但失去并发优势)。
5. 扩展方向
| 功能 | 描述 |
|---|---|
| Web 管理界面 | 使用 PHP 写一个简单的备份状态展示页 |
| 版本控制 | 结合 git-lfs 存储备份元数据 |
| 异地容灾 | 将/backup目录再 rsync 到异地机房 |
| 快照机制 | 使用 LVM snapshot + rsync 提高一致性 |
🧾 总结
| 阶段 | 关键动作 |
|---|---|
| 规划 | 明确备份范围、频率、保留策略、存储容量 |
| 部署 | rsync daemon + 密码认证 + 定时脚本 |
| 测试 | 手动执行 → 日志分析 → 恢复演练 |
| 交付 | 文档齐全、交接培训、责任人明确 |
| 运维 | 监控告警 + 自动化 + 安全审计 |
📎 附录:常用命令速查
# 查看 rsync 模块列表rsyncrsync://backup_user@192.168.10.200/# 手动推送测试rsync-avz --password-file=/etc/rsync.password /tmp/test/ backup_user@192.168.10.200::web_backup_192.168.10.10/data/test/# 查看服务状态systemctl status rsyncdtail-f /var/log/backup_rsync.log# 清理过期备份find/backup/web/ -name"*.sql"-mtime +7 -delete下一步?:
- Ansible Playbook 模板
- Shell 脚本完整版(含日志切割)
- Zabbix 监控项模板
- HTML 报表页面原型