3.8.8 灾备与异地容灾方案
3.8.8 灾备与异地容灾方案#
1. 目标与术语
- 灾备(DR):灾难发生后确保业务可在可接受时间内恢复。
- 同城容灾:低延迟、同步或准同步复制,侧重高可用。
- 异地容灾:跨地域复制,侧重灾难级别可恢复。
- 关键指标:RPO(可接受数据丢失时间)、RTO(可接受恢复时间)。
- 命令理解:RPO=0 通常意味着同步复制/双写确认;RTO 取决于切换流程与自动化程度。
2. 容灾架构类型(原理草图)
- 冷备:仅备份与环境清单,RTO高、成本低。
- 温备:异地有可运行环境,手动切换,RTO中等。
- 热备/双活:两地同时对外服务,RTO低、治理复杂。
- 三地两中心:同城双中心+异地中心,兼顾可用与容灾。
3. 数据复制与一致性(带宽与一致性示例)
- 带宽估算:变更数据量(GB/天) × 峰值倍数 × 复制开销。
- 示例:日增量 200GB,峰值 2 倍,开销 1.3 → 200×2×1.3=520GB/天。
- 一致性策略:快照 + 日志回放;主库写入确认策略;应用级幂等与重放。
4. 文件系统级异地复制示例(rsync + 定时)
- 安装与服务检查
# 安装
yum -y install rsync || apt -y install rsync
# 检查版本
rsync --version
- 配置免密(源站A -> 异地C)
ssh-keygen -t ed25519 -f /root/.ssh/id_ed25519 -N ""
ssh-copy-id -i /root/.ssh/id_ed25519.pub root@10.2.0.10
- 全量同步 + 增量同步
# 全量同步(首次)
rsync -avz --delete /data/ root@10.2.0.10:/data/
# 增量同步(后续)
rsync -avz --delete --bwlimit=50m /data/ root@10.2.0.10:/data/
- 定时任务(每 5 分钟)
cat >/etc/cron.d/dr-rsync <<'EOF'
*/5 * * * * root rsync -avz --delete /data/ root@10.2.0.10:/data/ >>/var/log/dr-rsync.log 2>&1
EOF
- 预期效果:异地目录
/data与源站一致,RPO≈5 分钟。
5. 数据库容灾示例(MySQL 主从 + binlog 恢复)
- 安装
yum -y install mysql-server || apt -y install mysql-server
- 主库开启 binlog(/etc/my.cnf)
[mysqld]
server_id=1
log_bin=/var/log/mysql/mysql-bin
binlog_format=ROW
- 从库配置(/etc/my.cnf)
[mysqld]
server_id=2
relay_log=/var/log/mysql/relay-bin
read_only=1
- 主库创建复制用户
CREATE USER 'repl'@'10.2.%' IDENTIFIED BY 'Repl#2024';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.2.%';
FLUSH PRIVILEGES;
- 主库锁表并记录位点
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
- 从库开始复制(替换位点)
CHANGE MASTER TO
MASTER_HOST='10.1.0.10',
MASTER_USER='repl',
MASTER_PASSWORD='Repl#2024',
MASTER_LOG_FILE='mysql-bin.000123',
MASTER_LOG_POS=456789;
START SLAVE;
SHOW SLAVE STATUS\G
- 预期效果:
Seconds_Behind_Master接近 0;异地从库可只读承接查询与容灾。
6. 中间件配置与注册中心(示例:Nacos 配置备份)
- 导出配置到异地(示例脚本)
# 获取配置列表并导出
curl -s "http://10.1.0.20:8848/nacos/v1/cs/configs?dataId=app.yml&group=DEFAULT_GROUP&tenant=" \
-o /backup/nacos/app.yml
# 同步至异地
rsync -avz /backup/nacos/ root@10.2.0.10:/backup/nacos/
7. 流量切换示例(DNS + GSLB 概念)
- DNS TTL 设置
# 示例:将 TTL 设为 60 秒便于快速切换
# 实际操作在DNS服务商控制台
- 切换流程简表
1) 监测故障 -> 2) 停写/冻结变更 -> 3) 切换DNS -> 4) 验证业务 -> 5) 复盘
8. 容灾演练流程(可执行检查清单)
- 预演:桌面演练 -> 局部演练 -> 全链路演练
- 执行:公告 -> 冻结变更 -> 切换执行 -> 验证 -> 回切
- 验收:RPO/RTO、关键功能可用、数据一致性
- 演练验证命令示例
# 校验数据一致性(示例:文件数与校验和)
find /data -type f | wc -l
rsync -avcn --delete /data/ root@10.2.0.10:/data/
9. 排错与故障定位
- 复制延迟
# MySQL 复制延迟排查
SHOW SLAVE STATUS\G
# 关注:Seconds_Behind_Master、Last_IO_Error、Last_SQL_Error
- 网络与带宽问题
# 测试网络与端口连通性
ping -c 3 10.2.0.10
nc -zv 10.2.0.10 22
# 带宽测试
iperf3 -c 10.2.0.10 -t 10
- 磁盘空间不足
df -h
du -sh /data/*
10. 练习(动手任务)
1. 在两台主机上搭建 rsync 异地复制,并实现 5 分钟 RPO。
2. 搭建 MySQL 主从复制,模拟主库宕机后切换到从库只读服务。
3. 设置 DNS TTL=60 秒,模拟切换流程并记录 RTO。
4. 使用 rsync -avcn 进行一致性校验,输出差异清单。