外观
OceanBase 灾难恢复
灾难恢复架构设计
跨区域部署架构
两地三中心架构
- 主中心:主要业务运行中心,承载全部业务流量
- 同城灾备中心:与主中心位于同一城市,用于快速故障切换
- 异地灾备中心:与主中心位于不同城市,用于应对区域性灾难
部署要点
txt
# 网络配置
- 主中心与同城灾备中心:使用低延迟专线连接
- 主中心与异地灾备中心:使用高带宽专线或 VPN 连接
- 同城与异地灾备中心:可选连接,用于数据同步
# 数据同步配置
- 主中心到同城灾备中心:同步复制,RPO=0
- 主中心到异地灾备中心:异步复制,RPO<5分钟
- 同城灾备中心到异地灾备中心:异步复制,作为备份链路多活架构
双活架构
- 两个数据中心:均为活跃状态,同时承载业务流量
- 数据双向同步:两个中心之间实现数据双向复制
- 负载均衡:通过负载均衡设备分发业务流量
- 自动故障切换:当一个中心故障时,流量自动切换到另一个中心
多活架构
- 三个或更多数据中心:均为活跃状态
- 数据多向同步:中心之间实现数据多向复制
- 全局负载均衡:根据地理位置和负载情况分发流量
- 细粒度故障隔离:单个中心故障只影响部分业务
备份恢复架构
备份策略设计
| 备份类型 | 频率 | 保留时间 | 存储位置 | 恢复方式 |
|---|---|---|---|---|
| 全量备份 | 每周一次 | 1个月 | 本地+异地 | 物理恢复 |
| 增量备份 | 每天一次 | 1周 | 本地+异地 | 物理恢复 |
| 日志备份 | 每小时一次 | 2周 | 本地+异地 | 逻辑恢复 |
| 逻辑备份 | 每月一次 | 3个月 | 异地 | 逻辑恢复 |
恢复流程设计
- 灾难评估:评估灾难影响范围和程度
- 恢复决策:确定恢复策略和恢复点
- 恢复准备:准备恢复环境和备份数据
- 数据恢复:执行数据恢复操作
- 验证测试:验证恢复后的数据完整性和业务可用性
- 业务切换:将业务流量切换到恢复后的系统
- 恢复验证:监控系统运行状态,确保业务正常
灾难恢复配置
跨区域复制配置
配置主备集群
sql
-- 创建主集群
CREATE CLUSTER primary_cluster
DATA CENTER 'dc1'
SERVER 'server1:2882' ZONE 'zone1',
SERVER 'server2:2882' ZONE 'zone2',
SERVER 'server3:2882' ZONE 'zone3';
-- 创建备集群
CREATE CLUSTER standby_cluster
DATA CENTER 'dc2'
SERVER 'server4:2882' ZONE 'zone4',
SERVER 'server5:2882' ZONE 'zone5',
SERVER 'server6:2882' ZONE 'zone6';
-- 配置跨区域复制
ALTER CLUSTER standby_cluster ADD REPLICA FROM primary_cluster
WITH SYNC_MODE = 'async'
RPO_TARGET = '5m';配置租户级复制
sql
-- 创建主租户
CREATE TENANT primary_tenant
RESOURCE_POOL_LIST = ('resource_pool1')
SET ob_tcp_invited_nodes = '%';
-- 创建备租户
CREATE TENANT standby_tenant
RESOURCE_POOL_LIST = ('resource_pool2')
SET ob_tcp_invited_nodes = '%';
-- 配置租户级复制
ALTER TENANT standby_tenant ADD REPLICA FROM primary_tenant
WITH SYNC_MODE = 'async'
RPO_TARGET = '2m';自动故障切换配置
配置故障检测
sql
-- 设置故障检测间隔
ALTER SYSTEM SET election_timeout = '10s';
-- 设置故障检测次数
ALTER SYSTEM SET election_retry_times = 3;
-- 设置故障切换超时时间
ALTER SYSTEM SET switchover_timeout = '60s';配置自动切换策略
sql
-- 启用自动故障切换
ALTER SYSTEM SET auto_switchover_enable = 'ON';
-- 设置自动切换延迟
ALTER SYSTEM SET auto_switchover_delay = '30s';
-- 配置切换优先级
ALTER ZONE zone1 SET priority = 1;
ALTER ZONE zone2 SET priority = 2;
ALTER ZONE zone3 SET priority = 3;备份恢复配置
配置备份策略
sql
-- 设置全量备份策略
ALTER SYSTEM SET backup_dest = 'oss://backup-bucket/ob-backup'
BACKUP_PREFIX = 'ob_full_backup_'
BACKUP_RETENTION_DAYS = 30;
-- 设置增量备份策略
ALTER SYSTEM SET incremental_backup_dest = 'oss://backup-bucket/ob-incremental'
INCREMENTAL_BACKUP_PREFIX = 'ob_incr_backup_'
INCREMENTAL_BACKUP_RETENTION_DAYS = 7;
-- 设置日志备份策略
ALTER SYSTEM SET archive_dest = 'oss://backup-bucket/ob-archive'
ARCHIVE_RETENTION_DAYS = 14;配置恢复环境
sql
-- 创建恢复用集群
CREATE CLUSTER recovery_cluster
DATA CENTER 'dc3'
SERVER 'server7:2882' ZONE 'zone7',
SERVER 'server8:2882' ZONE 'zone8',
SERVER 'server9:2882' ZONE 'zone9';
-- 配置恢复目录
ALTER SYSTEM SET restore_dest = 'oss://backup-bucket/ob-restore';灾难恢复演练
演练准备
演练计划
- 演练目标:验证灾难恢复流程的有效性
- 演练范围:特定业务或整个系统
- 演练时间:业务低峰期,避免影响生产
- 演练人员:运维团队、DBA团队、业务团队
- 演练工具:备份恢复工具、监控工具、测试工具
演练环境准备
- 隔离演练环境:与生产环境隔离,避免影响生产
- 准备测试数据:使用生产数据的副本或模拟数据
- 配置监控:监控演练过程中的系统状态
- 准备回滚计划:在演练失败时能够快速回滚
演练执行
故障模拟
bash
# 模拟主中心网络故障
iptables -A INPUT -s primary-center-ip -j DROP
# 模拟主中心服务器故障
poweroff -f
# 模拟数据损坏
dd if=/dev/zero of=/data/ob/data/file1 bs=1M count=10恢复执行
启动故障切换:
sql-- 手动触发故障切换 ALTER SYSTEM SWITCHOVER TO standby_cluster;执行数据恢复:
sql-- 恢复全量备份 RESTORE DATABASE FROM 'oss://backup-bucket/ob-backup/ob_full_backup_20231001' WITH RECOVERY; -- 恢复增量备份 RESTORE DATABASE INCREMENTAL FROM 'oss://backup-bucket/ob-incremental/ob_incr_backup_20231002' WITH RECOVERY; -- 恢复归档日志 RECOVER DATABASE UNTIL TIME '2023-10-02 14:30:00';验证恢复结果:
sql-- 验证数据完整性 CHECK TABLE table_name; -- 验证业务功能 SELECT COUNT(*) FROM table_name; SELECT * FROM table_name WHERE id = 1;
灾难恢复最佳实践
设计阶段最佳实践
明确 RTO 和 RPO 目标:
- 根据业务重要性设置合理的 RTO 和 RPO
- 确保技术方案能够满足目标要求
- 定期评估和调整目标
采用分层设计:
- 网络层:冗余网络设计,避免单点故障
- 存储层:多副本数据存储,确保数据可靠性
- 应用层:支持多活部署,提高业务连续性
考虑成本效益:
- 根据业务重要性选择合适的容灾方案
- 平衡容灾成本和业务价值
- 考虑长期运维成本
实施阶段最佳实践
严格按照设计方案实施:
- 确保实施与设计一致
- 详细记录实施过程
- 实施后进行验证测试
配置自动化工具:
- 自动化备份恢复流程
- 自动化故障检测和切换
- 自动化监控和告警
定期更新配置:
- 随着业务变化更新容灾配置
- 定期更新备份策略
- 定期测试配置有效性
运维阶段最佳实践
定期备份验证:
- 定期测试备份数据的可恢复性
- 验证备份数据的完整性
- 确保备份存储安全可靠
监控容灾状态:
- 监控数据同步状态
- 监控灾备中心运行状态
- 及时处理同步异常
定期演练:
- 至少每年进行一次完整的灾难恢复演练
- 针对不同场景进行演练
- 演练后及时总结和改进
常见灾难场景处理
主中心故障
症状
- 主中心网络中断
- 主中心服务器大面积故障
- 主中心存储系统故障
- 主中心无法恢复服务
处理流程
- 确认故障:通过监控系统确认主中心故障
- 启动故障切换:将业务流量切换到灾备中心
- 验证灾备中心状态:确保灾备中心正常运行
- 恢复主中心:修复主中心故障,重新同步数据
- 回切业务:在主中心恢复后,将业务流量切回主中心
数据中心网络故障
症状
- 数据中心之间网络中断
- 数据同步延迟增加
- 部分业务访问异常
处理流程
- 确认网络故障:通过网络监控确认故障点
- 评估影响范围:确定受影响的业务和数据
- 启动备用网络:切换到备用网络链路
- 监控数据同步:等待数据同步恢复正常
- 修复网络故障:修复主网络链路,恢复正常网络配置
数据损坏
症状
- 数据库报错,无法访问数据
- 数据查询返回错误结果
- 数据校验失败
处理流程
- 确认数据损坏:通过数据库日志和校验工具确认
- 隔离损坏数据:避免损坏数据影响其他业务
- 选择恢复点:根据 RPO 选择合适的恢复点
- 执行数据恢复:从备份恢复数据
- 验证恢复结果:确保恢复后的数据完整性和一致性
人为操作失误
症状
- 误删除表或数据库
- 误修改数据
- 误配置导致系统故障
处理流程
- 立即停止操作:防止进一步损坏
- 评估影响范围:确定受影响的业务和数据
- 选择恢复策略:根据操作类型选择恢复方式
- 执行恢复操作:从备份恢复或使用闪回功能
- 验证恢复结果:确保业务恢复正常
- 分析原因:找出操作失误的原因,防止再次发生
常见问题(FAQ)
Q1: 如何选择合适的灾难恢复方案?
A1: 选择灾难恢复方案需要考虑:
- 业务重要性:关键业务需要更高的容灾级别
- RTO 和 RPO 要求:根据业务需求确定目标
- 预算限制:平衡容灾成本和业务价值
- 技术可行性:确保方案在技术上可行
- 运维复杂度:考虑长期运维成本和难度
Q2: 两地三中心架构的优势是什么?
A2: 两地三中心架构的优势:
- 高可用性:支持快速故障切换,RTO 低
- 数据可靠性:多副本数据存储,RPO 低
- 灾难应对能力:能够应对区域性灾难
- 灵活的切换策略:支持手动和自动切换
- 成本效益:平衡成本和容灾级别
Q3: 如何确保备份数据的安全性?
A3: 确保备份数据安全性的方法:
- 加密存储:对备份数据进行加密
- 访问控制:严格控制备份数据的访问权限
- 离线存储:重要备份数据离线存储
- 定期验证:定期测试备份数据的可恢复性
- 异地存储:备份数据存储在不同地理位置
Q4: 灾难恢复演练的频率应该是多少?
A4: 灾难恢复演练的频率建议:
- 完整演练:至少每年一次
- 部分演练:每季度一次,针对特定场景
- 桌面演练:每月一次,讨论和模拟灾难场景
- 重大变更后:系统重大变更后进行演练
Q5: 如何降低灾难恢复的 RTO?
A5: 降低 RTO 的方法:
- 自动化故障切换:减少人工干预
- 预配置恢复环境:提前准备好恢复环境
- 使用快速恢复技术:如快照恢复、并行恢复
- 优化恢复流程:简化步骤,提高效率
- 加强团队培训:提高团队恢复能力
Q6: 如何处理跨区域数据同步延迟?
A6: 处理跨区域数据同步延迟的方法:
- 优化网络:使用低延迟专线连接
- 调整同步模式:根据业务需求选择同步或异步复制
- 增加带宽:提高网络带宽,减少传输延迟
- 优化同步参数:调整同步批次大小、并发数等参数
- 使用缓存技术:在应用层使用缓存,减少对数据库的依赖
Q7: 灾难恢复和高可用的区别是什么?
A7: 灾难恢复和高可用的区别:
- 范围不同:高可用主要处理单点故障,灾难恢复处理区域性或系统性灾难
- 恢复时间不同:高可用恢复时间短(秒级到分钟级),灾难恢复恢复时间较长(分钟级到小时级)
- 技术方案不同:高可用通常采用冗余设计,灾难恢复采用多中心部署
- 目标不同:高可用确保业务不中断,灾难恢复确保业务能够恢复
Q8: 如何验证灾难恢复方案的有效性?
A8: 验证灾难恢复方案有效性的方法:
- 定期演练:通过实际演练验证方案
- 模拟测试:使用模拟工具测试方案
- 压力测试:测试恢复后的系统性能
- 专家评审:邀请外部专家评审方案
- 对比行业标准:与行业最佳实践对比
Q9: 云环境下的灾难恢复有什么特点?
A9: 云环境下灾难恢复的特点:
- 弹性扩展:根据需求灵活调整资源
- 按需付费:降低容灾成本
- 自动化部署:快速部署容灾环境
- 多区域支持:云服务商提供多个区域,便于跨区域部署
- 集成云服务:与云服务商的其他服务集成,如对象存储、监控等
Q10: 如何制定灾难恢复计划?
A10: 制定灾难恢复计划的步骤:
- 业务影响分析:识别关键业务和依赖关系
- 风险评估:识别潜在灾难场景和风险
- 确定 RTO 和 RPO 目标:根据业务需求确定目标
- 设计技术方案:选择合适的容灾架构和技术
- 制定恢复流程:详细描述恢复步骤和责任分工
- 配置监控和告警:确保及时发现和响应灾难
- 定期测试和更新:确保计划的有效性和时效性
- 培训和演练:提高团队的灾难恢复能力
