Skip to content

KingBaseES 异地灾备架构

异地灾备概述

异地灾备是指在不同地理位置部署数据库备份系统,用于应对区域性灾难(如地震、洪水、火灾等)导致的主数据中心故障,确保业务连续性和数据安全性。

KingBaseES 异地灾备架构基于主备复制技术,通过将主库的变更实时或异步复制到异地备库,实现数据的异地备份和灾难恢复。

异地灾备的核心目标

  • 数据安全性:确保数据不丢失,RPO(恢复点目标)最小化
  • 业务连续性:确保在主数据中心故障时,业务能够快速切换到灾备中心,RTO(恢复时间目标)最小化
  • 灾难恢复能力:具备完整的灾难恢复流程和能力,能够应对各种灾难场景

异地灾备的关键指标

  • RPO(恢复点目标):灾难发生后,系统能够恢复到的最近时间点,反映数据丢失程度
  • RTO(恢复时间目标):灾难发生后,系统从故障到恢复正常运行所需的时间,反映业务中断时间
  • 可用性:系统在一定时间内正常运行的概率,通常以百分比表示(如99.99%)

常见异地灾备架构模式

1. 异步复制模式

异步复制模式是指主库将事务提交后,异步地将redo日志发送到异地备库,备库异步应用这些redo日志。

架构特点

  • 主库性能影响小,事务提交不需要等待备库确认
  • 主备延迟较大,RPO较高
  • 网络带宽要求较低
  • 部署简单,成本较低

适用场景

  • 跨地域距离较远(如跨省市、跨国)
  • 网络带宽有限
  • 对主库性能要求较高
  • 对RPO要求不是特别严格(允许分钟级数据丢失)

架构图

主数据中心          异地灾备中心
+-----------+       +-----------+
|           |       |           |
|  主库     +-------+  备库     |
|           |       |           |
+-----------+       +-----------+
     |                      |
     | 异步复制             |
     +----------------------+

2. 同步复制模式

同步复制模式是指主库在事务提交前,需要等待备库确认已接收并写入redo日志,然后才能提交事务。

架构特点

  • 主备数据实时一致,RPO=0
  • 主库性能受网络延迟影响较大
  • 网络带宽要求较高
  • 部署复杂,成本较高

适用场景

  • 跨地域距离较近(如同一城市不同数据中心)
  • 网络带宽充足
  • 对数据安全性要求极高(不允许任何数据丢失)
  • 对主库性能要求不是特别严格

架构图

主数据中心          异地灾备中心
+-----------+       +-----------+
|           |       |           |
|  主库     +<------+  备库     |
|           |       |           |
+-----------+       +-----------+
     |                      |
     | 同步复制(确认后提交)| 
     +----------------------+

3. 半同步复制模式

半同步复制模式是指主库在事务提交前,需要等待至少一个备库确认已接收redo日志,然后才能提交事务。

架构特点

  • 主备数据接近实时一致,RPO较小
  • 主库性能受网络延迟影响较小
  • 网络带宽要求适中
  • 部署相对简单,成本适中

适用场景

  • 跨地域距离适中
  • 网络带宽较为充足
  • 对数据安全性要求较高(允许秒级数据丢失)
  • 对主库性能有一定要求

架构图

主数据中心          异地灾备中心
+-----------+       +-----------+
|           |       |           |
|  主库     +<------+  备库     |
|           |       |           |
+-----------+       +-----------+
     |                      |
     | 半同步复制(至少一个确认)| 
     +----------------------+

4. 级联复制模式

级联复制模式是指主库将redo日志复制到本地备库,然后由本地备库将redo日志复制到异地备库。

架构特点

  • 减少主库的网络负担
  • 主备延迟较大,RPO较高
  • 网络带宽要求较低
  • 部署较为复杂

适用场景

  • 主库性能要求较高
  • 跨地域距离较远
  • 网络带宽有限

架构图

主数据中心          本地备库          异地灾备中心
+-----------+       +-----------+       +-----------+
|           |       |           |       |           |
|  主库     +-------+  本地备库 +-------+  异地备库 |
|           |       |           |       |           |
+-----------+       +-----------+       +-----------+
     |                      |                      |
     | 同步/半同步复制       | 异步复制             |
     +----------------------+                      |
                              +--------------------+

架构设计考虑因素

1. 地理位置选择

选择合适的灾备中心地理位置是异地灾备架构设计的重要考虑因素:

  • 距离主数据中心的距离:太远会导致网络延迟增大,太近可能无法避免区域性灾难
  • 网络条件:确保有可靠的网络连接和足够的带宽
  • 电力供应:确保灾备中心有稳定的电力供应
  • 环境条件:避免选择自然灾害频发的地区
  • 合规要求:满足行业和监管的合规要求

2. 网络架构设计

网络架构是异地灾备的关键基础设施:

  • 网络连接方式:专线、VPN、互联网等
  • 带宽规划:根据数据量和复制模式,规划足够的网络带宽
  • 网络延迟:优化网络路由,减少网络延迟
  • 网络可靠性:采用冗余网络设计,确保网络连接的可靠性
  • 网络安全性:采用加密传输,确保数据传输的安全性

3. 存储架构设计

存储架构设计需要考虑:

  • 存储类型:SAN、NAS、DAS、云存储等
  • 存储性能:确保灾备中心存储性能能够满足业务需求
  • 存储容量:规划足够的存储容量,考虑数据增长
  • 存储可靠性:采用冗余存储设计,确保数据存储的可靠性
  • 存储兼容性:确保灾备中心存储与主数据中心兼容

4. 复制策略设计

复制策略设计需要考虑:

  • 复制模式:异步、同步、半同步、级联等
  • 复制频率:根据业务需求和网络条件确定
  • 复制内容:全库复制、部分数据库复制、表级复制等
  • 冲突处理:如何处理主备数据冲突
  • 断点续传:支持断点续传,提高复制可靠性

5. 切换策略设计

切换策略设计需要考虑:

  • 自动切换 vs 手动切换
  • 切换触发条件:主库故障、网络故障等
  • 切换流程:详细的切换步骤和验证方法
  • 回滚策略:切换失败时的回滚方案
  • 切换测试:定期进行切换测试,验证切换流程的正确性

异地灾备实现步骤

1. 环境准备

  • 准备灾备中心服务器和存储
  • 配置网络连接,确保主备之间网络畅通
  • 安装KingBaseES软件,版本与主库保持一致
  • 配置操作系统参数,优化性能和可靠性

2. 主库配置

  • 启用归档日志模式
  • 配置主库的复制参数
  • 创建复制用户并授权
  • 配置归档日志传输目标
sql
-- 启用归档日志模式
ALTER DATABASE ARCHIVELOG;

-- 创建复制用户
CREATE USER replica REPLICATION LOGIN ENCRYPTED PASSWORD 'replica_password';

-- 配置归档日志传输目标
ALTER SYSTEM SET log_archive_dest_2 = 'SERVICE=dr_standby ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dr_standby';
ALTER SYSTEM SET log_archive_dest_state_2 = 'ENABLE';

3. 备库配置

  • 初始化备库数据库
  • 配置备库的恢复参数
  • 配置备库的网络参数
  • 启动备库恢复进程
sql
-- 初始化备库
initdb -D /opt/kingbase/dr_data

-- 配置恢复参数
cat > /opt/kingbase/dr_data/recovery.conf << EOF
standby_mode = 'on'
primary_conninfo = 'host=primary_host port=54321 user=replica password=replica_password application_name=dr_standby'
recovery_target_timeline = 'latest'
EOF

-- 启动备库
pg_ctl start -D /opt/kingbase/dr_data

4. 验证复制状态

  • 检查主备复制是否正常
  • 检查主备延迟是否在可接受范围内
  • 验证数据一致性
sql
-- 主库检查
SELECT * FROM pg_stat_replication;

-- 备库检查
SELECT * FROM pg_stat_wal_receiver;
SELECT pg_last_wal_receive_lsn(), pg_last_wal_replay_lsn();

5. 配置监控和告警

  • 配置主备复制状态监控
  • 配置主备延迟监控
  • 配置网络状态监控
  • 配置告警规则,及时通知异常情况

6. 制定切换流程和演练计划

  • 制定详细的切换流程文档
  • 制定回滚方案
  • 定期进行切换演练,验证切换流程的正确性
  • 不断优化切换流程,减少RTO

监控和管理

1. 复制状态监控

  • 监控主备复制连接状态
  • 监控主备延迟
  • 监控redo日志传输和应用情况
  • 监控备库恢复进度

2. 性能监控

  • 监控主库性能,确保复制对主库性能影响最小
  • 监控备库性能,确保备库能够及时应用redo日志
  • 监控网络性能,确保网络带宽充足

3. 告警管理

  • 配置复制中断告警
  • 配置主备延迟超过阈值告警
  • 配置网络故障告警
  • 配置存储空间不足告警

4. 日常管理

  • 定期检查主备复制状态
  • 定期备份备库数据
  • 定期进行切换演练
  • 及时处理告警和异常情况
  • 定期更新监控和告警规则

版本差异

V8 R6 特性

  • 支持基本的异步和半同步复制
  • 提供了基本的复制状态视图
  • 支持基于KEM的监控和管理
  • 复制延迟较高,RPO较大

V8 R7 特性

  • 增强了复制的稳定性和可靠性
  • 支持更多类型的复制模式
  • 提供了更丰富的复制监控视图和性能指标
  • 优化了复制算法,减少主备延迟
  • 支持快速故障切换,减少RTO
  • 支持复制压缩,降低网络带宽消耗

最佳实践

1. 选择合适的复制模式

根据业务需求、网络条件和成本因素,选择合适的复制模式:

  • 对数据安全性要求极高:选择同步复制
  • 对主库性能要求较高:选择异步复制或级联复制
  • 网络带宽有限:选择异步复制或级联复制,启用复制压缩
  • 跨地域距离较远:选择异步复制或级联复制

2. 优化网络配置

  • 使用专线或高质量的网络连接
  • 优化网络路由,减少网络延迟
  • 启用复制压缩,降低网络带宽消耗
  • 配置合适的MTU值,提高网络传输效率

3. 合理规划存储容量

  • 为灾备中心规划足够的存储容量,考虑数据增长
  • 采用与主数据中心相同或更高性能的存储设备
  • 配置存储的冗余和备份机制

4. 定期进行切换演练

  • 每季度至少进行一次切换演练
  • 覆盖各种故障场景
  • 记录演练过程和结果
  • 不断优化切换流程,减少RTO

5. 建立完善的监控和告警机制

  • 实时监控主备复制状态
  • 配置合理的告警阈值
  • 建立多级告警机制,确保告警及时送达
  • 定期检查监控和告警规则,确保其有效性

6. 制定详细的灾难恢复计划

  • 明确灾难恢复的触发条件
  • 制定详细的切换流程和步骤
  • 明确各角色的职责和分工
  • 制定回滚方案
  • 定期更新灾难恢复计划

常见问题(FAQ)

Q:如何选择异地灾备中心的地理位置?

A:选择异地灾备中心地理位置时,需要考虑以下因素:

  • 距离主数据中心的距离:建议距离主数据中心100公里以上,避免区域性灾难
  • 网络条件:确保有可靠的网络连接和足够的带宽
  • 电力供应:确保灾备中心有稳定的电力供应
  • 环境条件:避免选择自然灾害频发的地区
  • 合规要求:满足行业和监管的合规要求

Q:如何估算异地灾备所需的网络带宽?

A:可以通过以下公式估算异地灾备所需的网络带宽:

所需带宽 = (主库每天产生的归档日志量 / 每天的秒数) * 压缩比

例如,主库每天产生100GB归档日志,压缩比为3:1,则所需带宽为:

所需带宽 = (100GB * 1024MB/GB) / (24小时 * 3600秒/小时) * (1/3) ≈ 0.39MB/s ≈ 3.1Mbps

Q:如何降低主备延迟?

A:可以通过以下方法降低主备延迟:

  • 选择更高效的复制模式(如同步或半同步复制)
  • 优化网络配置,减少网络延迟
  • 启用复制压缩,降低网络带宽消耗
  • 提高备库的性能,确保备库能够及时应用redo日志
  • 减少主库的事务大小,避免大事务

Q:如何验证主备数据一致性?

A:可以使用以下方法验证主备数据一致性:

  • 使用pg_dump或pg_basebackup备份主备数据,然后比较备份文件
  • 使用KingBaseES提供的数据一致性验证工具
  • 定期执行关键表的count(*)查询,比较主备结果
  • 定期执行关键业务功能测试,验证业务数据一致性

Q:异地灾备中心需要部署完整的业务系统吗?

A:是的,异地灾备中心需要部署完整的业务系统,包括:

  • 数据库系统
  • 应用服务器
  • 中间件
  • 网络设备
  • 存储设备
  • 监控和管理系统

只有部署完整的业务系统,才能确保在主数据中心故障时,业务能够快速切换到灾备中心。

Q:如何进行异地灾备切换?

A:异地灾备切换的基本步骤包括:

  1. 确认主数据中心故障
  2. 停止主库(如果可能)
  3. 停止备库恢复进程
  4. 提升备库为主库
  5. 更新应用连接配置,指向新主库
  6. 启动应用服务
  7. 验证业务功能正常

Q:如何监控异地灾备状态?

A:可以使用以下工具监控异地灾备状态:

  1. KingBaseES Manager(KEM):提供可视化的复制监控功能
  2. 命令行工具:pg_stat_replication、pg_stat_wal_receiver等
  3. 监控工具:Prometheus + Grafana、Zabbix等
  4. 自定义脚本:定期检查复制状态,生成报告

Q:异地灾备的成本如何控制?

A:可以通过以下方法控制异地灾备的成本:

  • 选择合适的复制模式,避免过度配置
  • 合理规划存储容量,避免资源浪费
  • 采用云存储或托管服务,降低硬件成本
  • 优化网络配置,降低网络带宽成本
  • 共享灾备资源,提高资源利用率

Q:V8 R7相比V8 R6在异地灾备方面有哪些改进?

A:V8 R7相比V8 R6在异地灾备方面的改进包括:

  • 增强了复制的稳定性和可靠性
  • 支持更多类型的复制模式
  • 提供了更丰富的复制监控视图和性能指标
  • 优化了复制算法,减少主备延迟
  • 支持快速故障切换,减少RTO
  • 支持复制压缩,降低网络带宽消耗

Q:如何制定异地灾备的恢复计划?

A:制定异地灾备恢复计划时,需要考虑以下内容:

  1. 灾难场景定义:明确各种灾难场景
  2. 恢复目标:RPO和RTO的具体要求
  3. 恢复流程:详细的恢复步骤和时间节点
  4. 角色和职责:明确各角色的职责和分工
  5. 资源需求:恢复所需的资源和设备
  6. 验证方法:恢复后的验证方法和标准
  7. 回滚计划:恢复失败时的回滚方案
  8. 培训和演练:定期进行培训和演练