1.
概述与前提假设
- 目标:为位于韩国的站群(多个VPS/裸金属)建立可落地的备份与容灾方案,满足RPO、RTO要求并能自动化切换。
- 前提:每台服务器运行Linux(CentOS/Ubuntu)、网站使用Nginx/Apache+MySQL或MariaDB,文件和数据库均需保护。
- 建议:主备跨可用区或跨国家(首选:韩国首尔 ap-northeast-2 + 日本东京或台湾),并使用对象存储(S3兼容)做冷备。
2.
确定RPO/RTO与保留策略
- 步骤1:与业务方确认RPO(允许丢失数据时间,例如5分钟/1小时)与RTO(恢复目标时间,例如30分钟/2小时)。
- 步骤2:根据RPO选工具:RPO短 -> 主从实时复制(MySQL主从、文件同步实时服务);RPO长 -> 每日快照或增量备份。
- 步骤3:制定保留策略(如7天、30天、90天),并配置生命周期策略到对象存储自动归档或删除。
3.
文件级备份:rsync + rclone/对象存储
- 环境准备:在主服务器安装rsync与rclone(或s3cmd)。命令示例(Ubuntu):sudo apt-get install rsync rclone -y。
- 实操步骤:建立专用备份用户并配置SSH免密登录到备份服务器:ssh-keygen -t rsa; ssh-copy-id backup@backup-host。
- 定时任务:编写脚本 /usr/local/bin/backup_rsync.sh:
#!/bin/bash
rsync -az --delete --exclude='cache/' /var/www/ backup@backup-host:/data/site/$(hostname)/$(date +%F)
然后crontab -e添加:0 */1 * * * /usr/local/bin/backup_rsync.sh >/var/log/backup_rsync.log 2>&1(每小时同步)。
4.
增量备份与去重:Restic/Borg(推荐restic)
- 安装与初始化:
curl -s https://restic.net/restic-release.key | sudo apt-key add -
sudo apt-get install restic -y
restic init -r s3:s3.amazonaws.com/your-bucket --repo-password-file=/root/.restic_pw
- 备份命令示例:restic -r s3:s3.amazonaws.com/your-bucket --password-file=/root/.restic_pw backup /var/www /etc --exclude /var/www/cache
- 自动化:写systemd-timer或crontab,每日增量并保留策略restic forget --prune --keep-daily 7 --keep-weekly 4 --keep-monthly 6。
5.
块级/文件系统快照:LVM/ZFS/XFS+LVM
- 推荐场景:数据库与大文件(如媒体)先做文件系统一致性快照再备份。
- ZFS示例:zfs snapshot pool/web@$(date +%s);若做远程传输:zfs send pool/web@t1 | ssh backup zfs receive backupPool/web。
- 恢复示例:zfs rollback pool/web@t1 或 zfs receive 恢复到目标池,保证数据点恢复精确且速度快。
6.
数据库高可用与备份(MySQL/MariaDB建议)
- 推荐架构:一主多从(异地从),并开启半同步或GTID复制,主服务器只做写,从服务器读流量分担。
- 初始化同步步骤(简化):
在主库执行:FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;
mysqldump --single-transaction --routines --triggers --events --all-databases > /root/all.sql
scp all.sql to slave && 在从库执行 CHANGE MASTER TO MASTER_HOST='主IP', MASTER_USER='repl', MASTER_PASSWORD='pwd', MASTER_LOG_FILE='file', MASTER_LOG_POS=pos; START SLAVE;
- 日常备份:再结合binlog备份(mysqlbinlog定期切割并上传到S3),恢复时重放binlog至恢复点。
7.
异地容灾与DNS切换策略
- 异地部署:在韩国主站外再部署一套只读或热备站群(日本/台湾/香港),并同步文件与数据库从备节点持续更新。
- DNS策略:使用支持API的DNS(Cloudflare/Route53),设置低TTL(如60秒)并实现“心跳脚本”检测主站可用性,异常时调用API切换A记录到备用IP。
- 演练:每季度进行DNS切换演练并记录切换时间与影响,优化RTO。
8.
自动化切换:keepalived + HAProxy 或 BGP/Anycast
- 简单VRRP方案:在内部网络使用keepalived做虚拟IP漂移,配置示例:
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
virtual_ipaddress { 10.0.0.10 }
}
- 外网推荐使用负载均衡或云厂商LB做健康检查。若可以接入BGP/Anycast,可在多区域实现流量级切换(运营复杂但恢复最优)。
9.
备份加密、合规与存储管理
- 加密:restic自带加密;rsync传输使用SSH;对象存储启用服务器端加密或客户端加密。
- 合规:确保备份数据符合当地法规(个人信息保护),对敏感数据做脱敏或分区存储。
- 生命周期:对象存储启用版本与生命周期策略,把长期冷备转Glacier/Archive,节省成本。
10.
监控、告警与容量预警
- 指标采集:对备份任务成功率、传输速率、备份时长、磁盘使用、快照数量等做监控(Prometheus + Grafana)。
- 告警策略:备份失败立即告警(邮件/Slack/钉钉),备份窗口超时触发严重告警,磁盘使用超过阈值(80%)提前扩容或清理。
- 日志审计:定期核对备份日志并做自动化报表,保证可追溯性。
11.
恢复演练与故障恢复手册
- 制定恢复手册:列明恢复流程(数据恢复、数据库回放、DNS切换、回滚步骤)并标注负责人与联系方式。
- 恢复演练步骤(示例):
1) 在非生产环境模拟主机故障;
2) 从对象存储拉取最近备份,restic restore --target /tmp/restore
;
3) 导入数据库并重放binlog,切换流量并验证。记录时间与问题。
- 演练频率:每月小练、每季度大演练,修订手册。
12.
成本与优化建议
- 成本评估:按备份频率、存储量、跨区流量评估S3/对象存储费用与带宽成本。
- 优化技巧:使用增量/去重工具(restic),压缩大文件,使用生命周期归档;非关键站点可降频备份。
- 运营建议:把备份配置代码化(Ansible/Terraform),实现新节点自动加入备份与监控。
13.
常见问题1:如果主库和备库存在数据不一致,如何快速回滚并切换?
- 回答:首先暂停主库写入(maintenance页面),确认最后一致的binlog位置或快照时间点;在备库上执行mysql停止slave,使用最后一致的备份快照恢复并重放binlog到一致点;验证应用读写正常后通过负载均衡或DNS切换到备库,最后逐步恢复写权限。
14.
常见问题2:如何保证备份在被攻击或被误删时仍可恢复?
- 回答:关键是实现备份不可变(immutable)与多副本:对象存储开启版本控制与桶锁(WORM),给备份账户最小权限并开启MFA删除;把备份复制到另一地域并保留离线冷备(例如用Tape或离线快照)。
15.
常见问题3:小团队如何在预算有限时实现可用的容灾能力?
- 回答:优先保证关键数据可恢复:使用restic或Borg做增量去重备份并推送到S3兼容对象存储,配置每日备份与较长保留;数据库使用异地从库或定时mysqldump+binlog上传;DNS使用支持API的低成本服务并设定简单心跳脚本自动切换,逐步扩展到更复杂的HA架构。
来源:运维角度讲解韩国站群服务器推荐的备份与容灾配置方案