1.
总体规划与目标设定
- 明确RTO(恢复时间目标)与RPO(数据丢失容忍度)。例如:网站RTO=30分钟,RPO=15分钟;后台分析服务RTO=4小时,RPO=24小时。
- 划分数据分类:静态文件(/var/www)、数据库、配置/镜像、持久盘(Block Storage)。为每类定义备份频率与保留策略。
- 选择备份位置:同Region快照(快速恢复)、异地S3兼容对象存储(防灾)、本地冷备(长期保留)。
2.
块存储与实例快照的标准操作步骤
- 快照创建(Linux示例用AWS CLI或兼容API):先确保文件系统一致性:sudo fsfreeze -f /mnt/data 或对MySQL先锁表或使用xtrabackup;
- 使用CLI触发快照:aws ec2 create-snapshot --volume-id vol-xxxx --description "daily-snap-$(date +%F)" 或 对接供应商API:curl -X POST "https://api.cloud.th/provider/volumes/vol-xxx/snapshots" -H "Authorization: Bearer $TOKEN".
- 自动化策略:每天全量快照+每小时增量快照/增量复制(视供应商能力)。设置生命周期删除过期快照:保留最近7天按小时、30天按天、12个月按月。
3.
对象存储(S3兼容)用于长期/异地备份的实操
- 初始化工具:安装awscli或rclone/restic。示例restic流程:export RESTIC_PASSWORD=secret; restic init -r s3:s3.th-cloud.example.com/bucket。
- 文件备份示例:restic -r s3:s3.th-cloud.example.com/bucket backup /var/www --files-from /etc/restic/exclude.txt。或使用rclone sync /var/www s3:bucket/www --transfers=10。
- 定期校验与修复:restic check -r ...;使用Lifecycle规则在对象存储端设置归档(Glacier类)以节省成本。
4.
数据库的备份与恢复(MySQL/PostgreSQL)
- MySQL(小型):使用mysqldump:mysqldump --single-transaction --master-data=2 -u root -p dbname > /backup/db-$(date +%F-%H%M).sql && gzip ...,并将文件上传到S3。
- MySQL(在线物理备份):Percona XtraBackup:innobackupex --stream=tar /tmp | gzip > /backup/xb-$(date).tar.gz。适合大数据量且零停机。
- PostgreSQL:使用pg_basebackup或WAL归档;示例:pg_basebackup -D /backup/base -Ft -z -P -U repuser;并确保WAL推送到对象存储用于点时间恢复(PITR)。
- 恢复演练:定期在独立环境执行restore并验证数据一致性,记录实际RTO耗时。
5.
异地复制、DNS切换与故障切换流程
- 异地复制:采用跨Region快照复制或实时数据复制(数据库主从/CDC)。例如设置MySQL主库在泰国Region,备库在新加坡Region,配置GTID或binlog同步。
- 灾难切换步骤(演练脚本示例):1) 将流量切换到备用LB;2) 如果使用DNS:降低TTL至60s,更新A/ALIAS记录指向新IP;3) 启动备用实例快照/卷并挂载;4) 恢复数据库:执行恢复脚本并切换只读标志。
- 验证:健康检查、服务端口、数据库完整性检查、应用层冒烟测试。
6.
自动化(Terraform + Ansible + Cron/systemd)详细实现
- 基础设施即代码(Terraform):写模块化tf文件管理VPC、子网、实例、卷、对象存储;示例:resource "aws_ebs_snapshot" "daily" { volume_id = var.vol_id ... } 或使用provider的snapshot资源并通过Terraform Cloud/CI触发。
- 配置管理(Ansible):编写playbook实现restic/rsync/数据库备份任务的部署与定时器配置:tasks包含安装restic、创建systemd timer文件、部署备份脚本。
- 定时与日志:使用systemd timers替代cron以便更好监控;示例unit和.timer文件,日志输出到journald并收集至ELK或Prometheus Alertmanager。
- API自动化示例:curl -X POST "https://api.cloud/th/snapshots" -H "Authorization: Bearer $TOKEN" -d '{"volume":"vol-xxx","description":"auto"}',将该命令放入Ansible的uri模块或Terraform null_resource provisioner。
7.
恢复演练与校验步骤(实操逐项)
- 每月演练:在隔离环境恢复最新快照,步骤:1) 从对象存储下载备份;2) 部署新实例并挂载卷;3) 恢复数据库并执行一致性校验脚本(checksum/rowcount);4) 运行应用冒烟测试套件。
- 自动化演练:使用CI/CD流水线(Jenkins/GitLab CI)触发恢复流程并生成报告,失败触发工单或报警。
- 验证指标:记录恢复总耗时、数据差异、未覆盖场景并更新Runbook。
8.
常见脚本示例与命令(可复制粘贴)
- 快照脚本(伪代码):TOKEN=...; VOL=vol-xxx; curl -X POST "https://api.cloud/snapshots" -H "Authorization: Bearer $TOKEN" -d "{\"volume\":\"$VOL\",\"name\":\"snap-$(date +%F-%H%M)\"}"。
- restic备份脚本:export RESTIC_PASSWORD=xxx; restic -r s3:s3.th-cloud/bucket backup /var/www --exclude-file=/etc/restic/exclude.txt && restic forget --keep-daily 7 --keep-weekly 4 --prune。
- rsync增量同步:rsync -az --delete --link-dest=/backup/incr-prev /var/www/ /backup/incr-$(date +%F)/。
9.
监控、告警与成本控制
- 监控项目:备份任务成功率、快照数量、对象存储使用量、恢复时间、复制延迟。使用Prometheus + Alertmanager或云厂商自带监控。
- 告警策略:备份失败、快照未按计划创建、对象存储容量超过阈值、恢复演练失败。配置告警到邮件/Slack/工单系统。
- 成本优化:设置对象存储生命周期、删除过期快照、按数据分类选择热/冷存储。
10.
运维常见问题与最佳实践总结
- 不要只做快照而不演练;定期恢复是保证RTO的关键。
- 对数据库使用物理备份+WAL流或逻辑备份视具体RPO选择;对大数据量优先考虑XtraBackup或PITR。
- 自动化脚本需加上重试与幂等性设计,备份密钥与凭证使用Secrets Manager存储并定期轮换。
11.
问:在泰国云环境中,我应优先选择快照还是对象存储备份?
答:优先级取决于你的RTO/RPO与成本预算。快照适合低RTO(分钟级)且能快速回滚的场景;对象存储适合长期保存、合规与异地容灾。最佳实践是快照用于短期恢复+对象存储用于异地长期备份,两者结合。
12.
问:如何在故障发生时自动切换到备用Region而无缝对用户?
答:实现步骤包括降低DNS记录TTL、保持跨Region的数据库实时复制或周期性热备、提前准备可按需启动的镜像/脚本(通过Terraform/Ansible),并使用全局负载均衡或DNS Failover(如Route53健康检查)来自动将流量导向备用节点。务必演练并测量切换时间。
13.
问:我如何把备份自动化并保证安全(加密/权限)?
答:使用加密工具(restic/gnupg)对备份内容加密,备份凭证与API密钥放入Secrets Manager或Vault并由Ansible/Terraform读取;采用最小权限原则为备份账号授权,仅允许写入特定Bucket/创建快照;并通过日志与KMS审计密钥使用情况。
来源:运维视角详解泰国云服务器和云主机的备份容灾与自动化能力