温馨提示×

CentOS Java应用备份与恢复策略

小樊
49
2026-01-07 21:49:51
栏目: 编程语言

CentOS Java应用备份与恢复策略

一 备份范围与RPO RTO设定

  • 备份范围应覆盖以下四类资产:
    • 业务数据:数据库(如 MySQL/PostgreSQL)、文件存储(附件、上传、配置等)。
    • 应用与配置:应用安装目录、启动脚本、环境变量、密钥与证书、反向代理/网关配置。
    • 日志数据:业务日志、GC日志、访问日志(建议就地轮转+定期归档)。
    • 编排与元数据:如使用 systemd 服务单元、容器镜像与编排清单(K8s/Compose)。
  • 设定目标并倒推策略:
    • RPO(恢复点目标):可容忍的数据丢失窗口。例如:数据库每日全量+binlog/归档日志可达小时级RPO;仅每日全量则为24小时
    • RTO(恢复时间目标):可容忍的停机时长。例如:冷备+手工恢复通常**>1小时**;热备/镜像+自动化脚本可缩短至分钟级
  • 存储与保留建议:本地盘做短期(如7天)快速回滚,异地/对象存储做中长期(如30–90天)保留;定期做离线/异地拷贝以抗灾难。

二 备份策略与工具选型

  • 数据库备份
    • MySQL:每日全量 mysqldump/mariabackup,开启 binlog 做时间点恢复;每周/每月做全量快照归档。
    • PostgreSQL:每日 pg_dumpWAL归档(如 pg_basebackup + WAL-G/WAL-E)实现时间点恢复。
  • 文件系统与应用配置
    • 使用 tar 做按日全量/增量打包;使用 rsync 做目录同步与远程/异地备份;结合 cron 定时执行。
  • 日志管理
    • 优先用 logrotate 就地轮转、压缩与保留;对历史归档再统一打包上传至备份仓库。
  • 备份仓库与可视化
    • 可选 Duplicati 等开源工具,支持 S3兼容对象存储 与加密、调度、校验,便于非运维人员管理。
  • 安全与合规
    • 备份文件加密最小权限访问;传输通道TLS;对敏感数据(如数据库凭据)使用凭据管理Vault
  • 自动化与监控
    • 备份任务日志化告警;定期恢复演练验证可用性与完整性;容量阈值监控与自动扩容/清理策略。

三 示例脚本与任务编排

  • 数据库备份示例(MySQL)
    • 全量备份脚本(示例):
      #!/usr/bin/env bash
      set -Eeuo pipefail
      BACKUP_DIR="/backup/mysql"
      DATE=$(date +%F)
      mkdir -p "$BACKUP_DIR"
      mysqldump -u"$DB_USER" -p"$DB_PASS" --single-transaction --routines --triggers --hex-blob \
        --databases "$DB_NAME" > "$BACKUP_DIR/${DB_NAME}_${DATE}.sql"
      gzip "$BACKUP_DIR/${DB_NAME}_${DATE}.sql"
      # 保留最近30天
      find "$BACKUP_DIR" -name "*.sql.gz" -mtime +30 -delete
      
    • 定时任务(crontab):每日 02:00 执行
      0 2 * * * /usr/local/bin/backup_mysql.sh >> /var/log/backup_mysql.log 2>&1
      
  • 日志轮转示例(logrotate)
    • 新建 /etc/logrotate.d/java
      /opt/app/logs/*.log {
        daily
        rotate 7
        compress
        missingok
        notifempty
        create 0644 app app
        postrotate
          systemctl reload app 2>/dev/null || true
        endscript
      }
      
    • 测试与生效
      logrotate -d /etc/logrotate.d/java   # 语法/模拟
      logrotate -f /etc/logrotate.d/java   # 强制执行一次
      
  • 文件同步与远程备份示例(rsync)
    #!/usr/bin/env bash
    set -Eeuo pipefail
    SRC="/opt/app"
    DST="backup@backup.example.com:/data/backup/app"
    LOG="/var/log/backup_rsync.log"
    rsync -avz --delete --password-file=/etc/rsync.pass "$SRC/" "$DST/" >> "$LOG" 2>&1
    
    定时任务(crontab):每日 03:00
    0 3 * * * /usr/local/bin/backup_rsync.sh
    
  • 说明
    • 以上为通用示例,需按实际替换 DB_USER/DB_PASS/DB_NAME、路径与保留策略;生产环境建议增加校验与告警

四 恢复流程与演练

  • 数据库恢复
    • MySQL:先恢复最近全量,再按时间重放 binlog 至故障前时间点。
      # 1) 全量
      gunzip < /backup/mysql/app_2026-01-06.sql.gz | mysql -u"$DB_USER" -p"$DB_PASS"
      # 2) 时间点(示例:至 2026-01-06 14:00:00)
      mysqlbinlog --start-datetime="2026-01-06 00:00:00" \
        --stop-datetime="2026-01-06 14:00:00" /var/lib/mysql/mysql-bin.00000[1-9]* \
        | mysql -u"$DB_USER" -p"$DB_PASS"
      
    • PostgreSQL:基础备份恢复后,按 WAL 回放至目标时间点(如使用 WAL-G/WAL-E 的 restore 流程)。
  • 文件系统与应用配置
    • 停止应用 → 清理或备份当前目录 → 解压备份包到目标路径 → 恢复配置与密钥 → 启动应用并健康检查。
      systemctl stop app
      tar -xzf /backup/app_2026-01-06.tar.gz -C /opt/app
      systemctl start app
      curl -f http://localhost/health || { systemctl status app; exit 1; }
      
  • 日志恢复
    • 近期日志从 logrotate 归档中解压;历史归档从备份仓库按需取回并按时间重放或检索。
  • 演练与验收
    • 建议每季度做一次全链路恢复演练;核对关键业务数据、配置与日志一致性;记录 RTO/RPO 达成情况并优化。

五 高可用与灾难恢复建议

  • 架构层面
    • 优先采用主从复制/读写分离数据库高可用(如 MHA/OrchestratorPatroni)、应用多实例+负载均衡,将 RTO/RPO 降至分钟级
    • 关键配置与静态资源使用 配置中心对象存储,减少单点依赖。
  • 数据与备份层面
    • 跨机房/异地定期全量持续归档;保留离线/冷备介质;对备份做周期性校验与恢复演练
  • 监控与告警
    • 监控备份成功率、延迟、容量恢复演练结果;对失败与容量阈值即时告警并纳入值班流程。

0