Skip to content

DB2 HADR 架构类型

概述

DB2 High Availability Disaster Recovery (HADR) 是 IBM DB2 数据库提供的高可用性和灾难恢复解决方案,通过在主数据库和备用数据库之间实时复制数据,实现数据的高可用性和灾难恢复保护。HADR 支持多种架构类型,每种架构类型都有其特定的适用场景和配置要求。选择合适的 HADR 架构类型对于确保数据库系统的高可用性和灾难恢复能力至关重要。

HADR 架构的重要性

  • 提高可用性:最小化数据库宕机时间,确保业务连续性
  • 数据保护:防止数据丢失,确保数据完整性
  • 灾难恢复:在主站点发生灾难时,快速切换到备用站点
  • 负载均衡:某些架构类型支持只读备用数据库,实现负载均衡
  • 滚动升级:支持数据库版本的滚动升级,减少业务中断

HADR 架构类型分类

DB2 HADR 支持以下主要架构类型:

  1. 传统 HADR:基本的主备架构
  2. HADR with TSAC:结合 Tivoli System Automation for Multiplatforms (TSAC) 实现自动化故障转移
  3. HADR with Automatic Client Reroute (ACR):支持客户端自动重定向
  4. HADR with Read-on-Standby:支持备用数据库的只读访问
  5. HADR with Multiple Standbys:支持多个备用数据库
  6. HADR with Distance Considerations:考虑距离因素的架构设计

传统 HADR 架构

架构特点

传统 HADR 是最基本的 HADR 架构类型,包含一个主数据库和一个备用数据库:

  • 主数据库:处理所有读写事务,生成日志记录
  • 备用数据库:接收主数据库的日志记录并应用,保持与主数据库的数据同步
  • 同步模式:支持同步、近同步、异步和超级异步四种同步模式
  • 手动故障转移:需要手动执行故障转移操作

配置步骤

  1. 准备环境

    • 确保主备数据库版本相同
    • 确保主备数据库具有相同的页面大小和字符集
    • 配置主备数据库之间的网络连接
  2. 配置主数据库

    sql
    -- 启用归档日志
    UPDATE DATABASE CONFIGURATION FOR sample USING LOGARCHMETH1 DISK:/home/db2inst1/archlogs
    UPDATE DATABASE CONFIGURATION FOR sample USING LOGARCHOPT1 "COMPRESS"
    UPDATE DATABASE CONFIGURATION FOR sample USING LOGINDEXBUILD ON
    UPDATE DATABASE CONFIGURATION FOR sample USING TRACKMOD YES
    
    -- 设置 HADR 参数
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_LOCAL_HOST primary.example.com
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_LOCAL_SVC 50001
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_REMOTE_HOST standby.example.com
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_REMOTE_SVC 50002
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_REMOTE_INST db2inst1
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_SYNCMODE NEARSYNC
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_TIMEOUT 120
  3. 配置备用数据库

    sql
    -- 恢复主数据库的备份
    db2 RESTORE DATABASE sample FROM /home/db2inst1/backups TAKEN AT 20230615103000
    
    -- 设置 HADR 参数
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_LOCAL_HOST standby.example.com
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_LOCAL_SVC 50002
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_REMOTE_HOST primary.example.com
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_REMOTE_SVC 50001
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_REMOTE_INST db2inst1
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_SYNCMODE NEARSYNC
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_TIMEOUT 120
  4. 启动 HADR

    sql
    -- 在备用数据库上启动 HADR
    db2 START HADR ON DATABASE sample AS STANDBY
    
    -- 在主数据库上启动 HADR
    db2 START HADR ON DATABASE sample AS PRIMARY

适用场景

  • 小型应用系统
  • 对自动故障转移要求不高的场景
  • 测试和开发环境
  • 预算有限的环境

HADR with TSAC 架构

架构特点

HADR with TSAC 架构结合了 HADR 和 Tivoli System Automation for Multiplatforms (TSAC),实现自动化故障转移:

  • 自动化故障检测:TSAC 监控主备数据库的状态
  • 自动化故障转移:当主数据库发生故障时,TSAC 自动将备用数据库切换为主数据库
  • 自动化恢复:故障转移后,TSAC 自动重新配置 HADR 关系
  • 集中管理:通过 TSAC 控制台集中管理和监控 HADR 环境

配置步骤

  1. 安装和配置 TSAC

    bash
    # 安装 TSAC 软件
    ./installSAmp -acceptLicense
    
    # 配置 TSAC 域
    samctrl -c -n hadr_domain
  2. 配置 HADR 资源

    bash
    # 定义 HADR 资源组
    mkrg -n hadr_resource_group
    
    # 添加 IP 资源
    mkrsrc IBM.ServiceIP Name=hadr_ip Address=192.168.1.100 NodeNameList="primary,standby"
    
    # 添加 DB2 实例资源
    mkrsrc IBM.Application Name=db2_instance_inst1 StartCommand="/home/db2inst1/sqllib/adm/db2start" StopCommand="/home/db2inst1/sqllib/adm/db2stop force" NodeNameList="primary,standby"
    
    # 添加 HADR 数据库资源
    mkrsrc IBM.Application Name=db2_hadr_sample StartCommand="/home/db2inst1/scripts/start_hadr.sh" StopCommand="/home/db2inst1/scripts/stop_hadr.sh" NodeNameList="primary,standby"
  3. 配置资源依赖关系

    bash
    # 设置资源依赖关系
    chrsrc -a "DependsOn=('IBM.ServiceIP.Name=='hadr_ip'')" IBM.Application Name=db2_instance_inst1
    chrsrc -a "DependsOn=('IBM.Application.Name=='db2_instance_inst1'')" IBM.Application Name=db2_hadr_sample
  4. 配置故障转移策略

    bash
    # 配置故障转移策略
    chrg -o OnlineOnHomeNode=Preferred hadr_resource_group
    chrg -o FallbackToNode=standby hadr_resource_group

适用场景

  • 关键业务系统
  • 对自动故障转移要求高的场景
  • 大型企业环境
  • 需要集中管理和监控的环境

HADR with Automatic Client Reroute 架构

架构特点

HADR with ACR 架构结合了 HADR 和 Automatic Client Reroute (ACR),支持客户端自动重定向:

  • 客户端自动重定向:当主数据库发生故障时,客户端自动重定向到备用数据库
  • 透明故障转移:对客户端应用程序透明,无需修改代码
  • 连接重试机制:自动重试连接,直到连接成功或达到最大重试次数
  • 支持读写分离:可以将只读请求路由到备用数据库

配置步骤

  1. 配置 ACR 参数

    sql
    -- 在主数据库上配置
    UPDATE DATABASE CONFIGURATION FOR sample USING AUTO_REDIRECT YES
    UPDATE DATABASE MANAGER CONFIGURATION USING DIAGLEVEL 3
    
    -- 配置客户端重定向信息
    UPDATE ALTERNATE SERVER FOR DATABASE sample USING HOSTNAME standby.example.com PORT 50002
  2. 配置 JDBC 客户端

    java
    String url = "jdbc:db2://primary.example.com:50001/sample:enableACR=true;maxRetriesForClientReroute=5;retryIntervalForClientReroute=10;"
    Connection conn = DriverManager.getConnection(url, "db2inst1", "password123");
  3. 配置 CLI 客户端

    sql
    UPDATE CLI CONFIGURATION FOR SECTION COMMON USING EnableACR 1
    UPDATE CLI CONFIGURATION FOR SECTION COMMON USING MaxRetriesForClientReroute 5
    UPDATE CLI CONFIGURATION FOR SECTION COMMON USING RetryIntervalForClientReroute 10

适用场景

  • 客户端应用程序无法修改的场景
  • 对应用程序可用性要求高的场景
  • 分布式应用系统
  • 需要读写分离的场景

HADR with Read-on-Standby 架构

架构特点

HADR with Read-on-Standby 架构支持备用数据库的只读访问,实现负载均衡:

  • 备用数据库只读访问:允许在备用数据库上执行只读查询
  • 负载均衡:将只读查询分流到备用数据库,减轻主数据库负担
  • 实时数据访问:备用数据库的数据与主数据库保持同步
  • 支持多种同步模式:支持近同步、异步和超级异步模式

配置步骤

  1. 配置主数据库

    sql
    -- 启用 Read-on-Standby
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_REPLAY_DELAY 0
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_SYNCMODE NEARSYNC
  2. 配置备用数据库

    sql
    -- 启用 Read-on-Standby
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_REPLAY_DELAY 0
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_SYNCMODE NEARSYNC
  3. 启动 HADR

    sql
    -- 在备用数据库上启动 HADR
    db2 START HADR ON DATABASE sample AS STANDBY
    
    -- 在主数据库上启动 HADR
    db2 START HADR ON DATABASE sample AS PRIMARY
  4. 连接到备用数据库进行只读访问

    sql
    -- 使用只读连接连接到备用数据库
    db2 CONNECT TO sample USER db2inst1 USING password123 HOSTNAME standby.example.com PORT 50002
    
    -- 验证连接状态
    SELECT HADR_ROLE, HADR_CONNECT_STATUS FROM SYSIBMADM.DB_HADR

适用场景

  • 读写分离的应用系统
  • 报表和分析系统
  • 大数据量查询场景
  • 需要提高查询性能的场景

HADR with Multiple Standbys 架构

架构特点

HADR with Multiple Standbys 架构支持多个备用数据库,提供更高的可用性和灵活性:

  • 多个备用数据库:支持最多 3 个备用数据库
  • 不同同步模式:每个备用数据库可以配置不同的同步模式
  • 地理分布:可以将备用数据库部署在不同的地理位置
  • 多层次保护:提供多层次的灾难恢复保护

配置步骤

  1. 配置主数据库

    sql
    -- 配置第一个备用数据库
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_REMOTE_HOST standby1.example.com HADR_REMOTE_SVC 50002 HADR_REMOTE_INST db2inst1
    
    -- 配置第二个备用数据库
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_REMOTE_HOST standby2.example.com HADR_REMOTE_SVC 50003 HADR_REMOTE_INST db2inst1
  2. 配置第一个备用数据库

    sql
    -- 恢复主数据库的备份
    db2 RESTORE DATABASE sample FROM /home/db2inst1/backups TAKEN AT 20230615103000
    
    -- 配置 HADR 参数
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_LOCAL_HOST standby1.example.com
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_LOCAL_SVC 50002
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_REMOTE_HOST primary.example.com
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_REMOTE_SVC 50001
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_REMOTE_INST db2inst1
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_SYNCMODE NEARSYNC
  3. 配置第二个备用数据库

    sql
    -- 恢复主数据库的备份
    db2 RESTORE DATABASE sample FROM /home/db2inst1/backups TAKEN AT 20230615103000
    
    -- 配置 HADR 参数
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_LOCAL_HOST standby2.example.com
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_LOCAL_SVC 50003
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_REMOTE_HOST primary.example.com
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_REMOTE_SVC 50001
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_REMOTE_INST db2inst1
    UPDATE DATABASE CONFIGURATION FOR sample USING HADR_SYNCMODE ASYNC
  4. 启动 HADR

    sql
    -- 在第一个备用数据库上启动 HADR
    db2 START HADR ON DATABASE sample AS STANDBY
    
    -- 在第二个备用数据库上启动 HADR
    db2 START HADR ON DATABASE sample AS STANDBY
    
    -- 在主数据库上启动 HADR
    db2 START HADR ON DATABASE sample AS PRIMARY

适用场景

  • 关键业务系统
  • 对数据保护要求极高的场景
  • 跨地域部署的场景
  • 需要不同级别数据保护的场景

HADR with Distance Considerations 架构

架构特点

HADR with Distance Considerations 架构考虑了主备数据库之间的距离因素,优化了性能和可靠性:

  • 距离优化:根据主备数据库之间的距离选择合适的同步模式
  • 网络优化:优化网络配置,减少网络延迟对 HADR 性能的影响
  • 带宽考虑:根据可用带宽选择合适的同步模式和压缩策略
  • 数据完整性:确保在远距离情况下的数据完整性

距离与同步模式选择

距离范围建议同步模式特点
同一数据中心 (<10km)同步或近同步低延迟,数据完整性高
同城 (<100km)近同步较低延迟,较好的数据完整性
异地 (<1000km)异步较高延迟,数据完整性适中
远距离 (>1000km)超级异步高延迟,数据完整性较低

网络优化策略

  1. 启用日志压缩

    sql
    UPDATE DATABASE CONFIGURATION FOR sample USING LOGARCHOPT1 "COMPRESS"
  2. 优化网络参数

    bash
    # 调整 TCP 缓冲区大小
    echo "net.core.rmem_max=16777216" >> /etc/sysctl.conf
    echo "net.core.wmem_max=16777216" >> /etc/sysctl.conf
    sysctl -p
  3. 使用专用网络:为 HADR 通信使用专用网络,避免与其他流量竞争

  4. 配置 QoS:为 HADR 流量配置服务质量 (QoS),确保 HADR 通信的优先级

适用场景

  • 跨地域部署的场景
  • 主备数据库距离较远的场景
  • 网络带宽有限的场景
  • 对性能和数据完整性有不同要求的场景

架构类型比较

架构类型自动故障转移客户端自动重定向只读备用数据库多个备用数据库主要优势
传统 HADR配置简单,成本低
HADR with TSAC自动化故障转移,集中管理
HADR with ACR客户端自动重定向,透明故障转移
HADR with Read-on-Standby读写分离,提高查询性能
HADR with Multiple Standbys多层次保护,灵活配置
HADR with Distance Considerations取决于配置取决于配置取决于配置取决于配置距离优化,网络优化

版本差异

版本HADR 架构变化
DB2 9.5引入基本 HADR 功能,支持单备用数据库
DB2 9.7引入 Read-on-Standby 功能
DB2 10.1引入 Multiple Standbys 功能,支持最多 3 个备用数据库
DB2 10.5引入超级异步同步模式,增强 Read-on-Standby 功能
DB2 11.1增强 Multiple Standbys 功能,支持不同同步模式
DB2 11.5引入 HADR 自动重同步功能,增强灾难恢复能力

常见问题(FAQ)

Q1: 如何选择合适的 HADR 架构类型?

A1: 选择 HADR 架构类型需要考虑以下因素:

  • 业务对可用性和灾难恢复的要求
  • 预算和资源限制
  • 应用系统的特点和需求
  • 主备数据库之间的距离
  • 网络带宽和延迟
  • 对自动故障转移的要求

Q2: 不同同步模式对性能有什么影响?

A2: 同步模式对性能的影响主要体现在:

  • 同步模式:主数据库需要等待备用数据库确认接收日志后才能提交事务,性能影响最大
  • 近同步模式:主数据库需要等待备用数据库确认接收日志,但不需要等待日志写入磁盘,性能影响中等
  • 异步模式:主数据库不需要等待备用数据库确认,性能影响较小
  • 超级异步模式:主数据库异步发送日志,性能影响最小

Q3: HADR 支持哪些故障转移类型?

A3: HADR 支持三种故障转移类型:

  • 手动故障转移:由管理员手动执行故障转移操作
  • 强制故障转移:在主数据库无法访问时执行的故障转移操作,可能导致数据丢失
  • 自动故障转移:通过 TSAC 等外部工具实现的自动故障转移

Q4: 如何监控 HADR 状态?

A4: 可以使用以下方法监控 HADR 状态:

sql
-- 查看 HADR 状态
SELECT * FROM SYSIBMADM.DB_HADR

-- 查看 HADR 历史记录
db2pd -db sample -hadr -history

-- 使用 DB2 监控工具
IBM Data Studio 或 IBM Data Server Manager

Q5: HADR 如何处理日志冲突?

A5: HADR 不会产生日志冲突,因为只有主数据库可以处理写事务,备用数据库只接收和应用主数据库的日志。

Q6: 如何在 HADR 环境中进行备份?

A6: 可以在主数据库或备用数据库上进行备份:

  • 主数据库备份:正常执行备份操作
  • 备用数据库备份:使用 BACKUP DATABASE ... FROM STANDBY 命令

Q7: HADR 支持哪些版本的 DB2?

A7: HADR 支持 DB2 9.5 及以上版本,不同版本支持不同的 HADR 功能和架构类型。

Q8: 如何升级 HADR 环境?

A8: 升级 HADR 环境可以使用滚动升级或离线升级方法:

  • 滚动升级:先升级备用数据库,然后执行故障转移,再升级原主数据库
  • 离线升级:停止 HADR,升级主备数据库,然后重新配置 HADR

Q9: 如何测试 HADR 故障转移?

A9: 可以通过以下方法测试 HADR 故障转移:

  • 模拟主数据库故障:关闭主数据库实例或断开网络连接
  • 执行手动故障转移:使用 TAKE OVER HADR ON DATABASE sample BY FORCE 命令
  • 使用 TSAC 测试:通过 TSAC 控制台触发故障转移

Q10: HADR 与其他高可用性解决方案有什么区别?

A10: HADR 与其他高可用性解决方案的区别:

  • HADR:基于日志复制,支持异步复制,配置相对简单
  • PureScale:共享存储集群,支持横向扩展,适合大规模应用
  • Database Partitioning Feature (DPF):数据分区,提高查询性能,适合大数据场景
  • 第三方解决方案:如 Veritas Cluster Server,提供更广泛的平台支持和更多功能

最佳实践

  1. 选择合适的同步模式:根据主备数据库之间的距离和业务需求选择合适的同步模式
  2. 配置适当的超时参数:根据网络延迟配置适当的 HADR 超时参数
  3. 启用自动客户端重定向:提高客户端应用程序的可用性
  4. 考虑使用 Read-on-Standby:利用备用数据库的只读访问能力,提高系统整体性能
  5. 使用多个备用数据库:为关键业务系统提供多层次的保护
  6. 优化网络配置:根据主备数据库之间的距离和网络条件优化网络配置
  7. 定期测试故障转移:定期测试 HADR 故障转移,确保在实际故障发生时能够正常工作
  8. 监控 HADR 状态:建立完善的监控机制,及时发现和解决 HADR 相关问题
  9. 备份 HADR 配置:定期备份 HADR 配置,以便在需要时快速恢复
  10. 培训运维人员:确保运维人员熟悉 HADR 配置和故障处理流程

总结

DB2 HADR 支持多种架构类型,每种架构类型都有其特定的适用场景和配置要求。选择合适的 HADR 架构类型对于确保数据库系统的高可用性和灾难恢复能力至关重要。在实际部署中,需要根据业务需求、预算限制、技术条件等因素综合考虑,选择最适合的 HADR 架构类型。

随着 DB2 版本的不断更新,HADR 功能也在不断增强,提供了更多的架构选择和更好的性能。通过合理配置和管理 HADR 环境,可以显著提高数据库系统的可用性和灾难恢复能力,确保业务的连续性和数据的完整性。