Skip to content

OceanBase 灾难恢复

灾难恢复架构设计

跨区域部署架构

两地三中心架构

  • 主中心:主要业务运行中心,承载全部业务流量
  • 同城灾备中心:与主中心位于同一城市,用于快速故障切换
  • 异地灾备中心:与主中心位于不同城市,用于应对区域性灾难

部署要点

txt
# 网络配置
- 主中心与同城灾备中心:使用低延迟专线连接
- 主中心与异地灾备中心:使用高带宽专线或 VPN 连接
- 同城与异地灾备中心:可选连接,用于数据同步

# 数据同步配置
- 主中心到同城灾备中心:同步复制,RPO=0
- 主中心到异地灾备中心:异步复制,RPO<5分钟
- 同城灾备中心到异地灾备中心:异步复制,作为备份链路

多活架构

双活架构

  • 两个数据中心:均为活跃状态,同时承载业务流量
  • 数据双向同步:两个中心之间实现数据双向复制
  • 负载均衡:通过负载均衡设备分发业务流量
  • 自动故障切换:当一个中心故障时,流量自动切换到另一个中心

多活架构

  • 三个或更多数据中心:均为活跃状态
  • 数据多向同步:中心之间实现数据多向复制
  • 全局负载均衡:根据地理位置和负载情况分发流量
  • 细粒度故障隔离:单个中心故障只影响部分业务

备份恢复架构

备份策略设计

备份类型频率保留时间存储位置恢复方式
全量备份每周一次1个月本地+异地物理恢复
增量备份每天一次1周本地+异地物理恢复
日志备份每小时一次2周本地+异地逻辑恢复
逻辑备份每月一次3个月异地逻辑恢复

恢复流程设计

  1. 灾难评估:评估灾难影响范围和程度
  2. 恢复决策:确定恢复策略和恢复点
  3. 恢复准备:准备恢复环境和备份数据
  4. 数据恢复:执行数据恢复操作
  5. 验证测试:验证恢复后的数据完整性和业务可用性
  6. 业务切换:将业务流量切换到恢复后的系统
  7. 恢复验证:监控系统运行状态,确保业务正常

灾难恢复配置

跨区域复制配置

配置主备集群

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

恢复执行

  1. 启动故障切换

    sql
    -- 手动触发故障切换
    ALTER SYSTEM SWITCHOVER TO standby_cluster;
  2. 执行数据恢复

    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';
  3. 验证恢复结果

    sql
    -- 验证数据完整性
    CHECK TABLE table_name;
    
    -- 验证业务功能
    SELECT COUNT(*) FROM table_name;
    SELECT * FROM table_name WHERE id = 1;

灾难恢复最佳实践

设计阶段最佳实践

  1. 明确 RTO 和 RPO 目标

    • 根据业务重要性设置合理的 RTO 和 RPO
    • 确保技术方案能够满足目标要求
    • 定期评估和调整目标
  2. 采用分层设计

    • 网络层:冗余网络设计,避免单点故障
    • 存储层:多副本数据存储,确保数据可靠性
    • 应用层:支持多活部署,提高业务连续性
  3. 考虑成本效益

    • 根据业务重要性选择合适的容灾方案
    • 平衡容灾成本和业务价值
    • 考虑长期运维成本

实施阶段最佳实践

  1. 严格按照设计方案实施

    • 确保实施与设计一致
    • 详细记录实施过程
    • 实施后进行验证测试
  2. 配置自动化工具

    • 自动化备份恢复流程
    • 自动化故障检测和切换
    • 自动化监控和告警
  3. 定期更新配置

    • 随着业务变化更新容灾配置
    • 定期更新备份策略
    • 定期测试配置有效性

运维阶段最佳实践

  1. 定期备份验证

    • 定期测试备份数据的可恢复性
    • 验证备份数据的完整性
    • 确保备份存储安全可靠
  2. 监控容灾状态

    • 监控数据同步状态
    • 监控灾备中心运行状态
    • 及时处理同步异常
  3. 定期演练

    • 至少每年进行一次完整的灾难恢复演练
    • 针对不同场景进行演练
    • 演练后及时总结和改进

常见灾难场景处理

主中心故障

症状

  • 主中心网络中断
  • 主中心服务器大面积故障
  • 主中心存储系统故障
  • 主中心无法恢复服务

处理流程

  1. 确认故障:通过监控系统确认主中心故障
  2. 启动故障切换:将业务流量切换到灾备中心
  3. 验证灾备中心状态:确保灾备中心正常运行
  4. 恢复主中心:修复主中心故障,重新同步数据
  5. 回切业务:在主中心恢复后,将业务流量切回主中心

数据中心网络故障

症状

  • 数据中心之间网络中断
  • 数据同步延迟增加
  • 部分业务访问异常

处理流程

  1. 确认网络故障:通过网络监控确认故障点
  2. 评估影响范围:确定受影响的业务和数据
  3. 启动备用网络:切换到备用网络链路
  4. 监控数据同步:等待数据同步恢复正常
  5. 修复网络故障:修复主网络链路,恢复正常网络配置

数据损坏

症状

  • 数据库报错,无法访问数据
  • 数据查询返回错误结果
  • 数据校验失败

处理流程

  1. 确认数据损坏:通过数据库日志和校验工具确认
  2. 隔离损坏数据:避免损坏数据影响其他业务
  3. 选择恢复点:根据 RPO 选择合适的恢复点
  4. 执行数据恢复:从备份恢复数据
  5. 验证恢复结果:确保恢复后的数据完整性和一致性

人为操作失误

症状

  • 误删除表或数据库
  • 误修改数据
  • 误配置导致系统故障

处理流程

  1. 立即停止操作:防止进一步损坏
  2. 评估影响范围:确定受影响的业务和数据
  3. 选择恢复策略:根据操作类型选择恢复方式
  4. 执行恢复操作:从备份恢复或使用闪回功能
  5. 验证恢复结果:确保业务恢复正常
  6. 分析原因:找出操作失误的原因,防止再次发生

常见问题(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: 制定灾难恢复计划的步骤:

  1. 业务影响分析:识别关键业务和依赖关系
  2. 风险评估:识别潜在灾难场景和风险
  3. 确定 RTO 和 RPO 目标:根据业务需求确定目标
  4. 设计技术方案:选择合适的容灾架构和技术
  5. 制定恢复流程:详细描述恢复步骤和责任分工
  6. 配置监控和告警:确保及时发现和响应灾难
  7. 定期测试和更新:确保计划的有效性和时效性
  8. 培训和演练:提高团队的灾难恢复能力