现对约 100 台 CentOS 7.9 系统的 LAMP 和 LNMP 架构服务器进行全网备份【20251216】001篇
2026/6/8 13:50:22 网站建设 项目流程

文章目录

    • 🧩 一、总体架构设计
      • 目标
      • 技术选型
    • 🏗️ 二、环境规划
      • 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 系统的LAMPLNMP架构服务器进行全网备份,是一项典型的运维自动化任务。以下从环境规划、部署实施、测试验证、交付文档、日常运维五个阶段,提供一套完整、可落地的技术方案。

🧩 一、总体架构设计

目标

  • 对 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 Nodes192.168.10.10 ~ 192.168.10.110Web 服务器集群
Backup Server192.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-yrsyncxinetd

CentOS 7.9 默认已安装 rsync,检查:

rpm-qa|greprsyncwhichrsync
2. 创建 rsync 用户(非 shell 登录)
useraddrsync-s /sbin/nologin -M
3. 编写配置文件/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.passwd
5. 创建存储目录并授权
mkdir-p /backup/web/192.168.10.{10..110}chown-R rsync:rsync /backup/web
6. 使用 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 --reload
7. 验证服务运行
ss -tulnp|grep:873 telnet192.168.10.200873

第二步:配置客户端(Client Node)

1. 安装 rsync
yuminstall-yrsync
2. 创建备份脚本/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/httpd
  • dump.sql建议每天不同名(如加时间戳),防止覆盖
3. 创建密码文件
echo"MyStr0ngP@ssw0rd1">/etc/rsync.passwordchmod600/etc/rsync.password
4. 加入定时任务(crontab)
# 每天凌晨2点执行02* * * /bin/bash /opt/scripts/backup_rsync.sh
5. 设置执行权限
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 报表页面原型

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询