外观
DB2 HADR 架构类型
概述
DB2 High Availability Disaster Recovery (HADR) 是 IBM DB2 数据库提供的高可用性和灾难恢复解决方案,通过在主数据库和备用数据库之间实时复制数据,实现数据的高可用性和灾难恢复保护。HADR 支持多种架构类型,每种架构类型都有其特定的适用场景和配置要求。选择合适的 HADR 架构类型对于确保数据库系统的高可用性和灾难恢复能力至关重要。
HADR 架构的重要性
- 提高可用性:最小化数据库宕机时间,确保业务连续性
- 数据保护:防止数据丢失,确保数据完整性
- 灾难恢复:在主站点发生灾难时,快速切换到备用站点
- 负载均衡:某些架构类型支持只读备用数据库,实现负载均衡
- 滚动升级:支持数据库版本的滚动升级,减少业务中断
HADR 架构类型分类
DB2 HADR 支持以下主要架构类型:
- 传统 HADR:基本的主备架构
- HADR with TSAC:结合 Tivoli System Automation for Multiplatforms (TSAC) 实现自动化故障转移
- HADR with Automatic Client Reroute (ACR):支持客户端自动重定向
- HADR with Read-on-Standby:支持备用数据库的只读访问
- HADR with Multiple Standbys:支持多个备用数据库
- HADR with Distance Considerations:考虑距离因素的架构设计
传统 HADR 架构
架构特点
传统 HADR 是最基本的 HADR 架构类型,包含一个主数据库和一个备用数据库:
- 主数据库:处理所有读写事务,生成日志记录
- 备用数据库:接收主数据库的日志记录并应用,保持与主数据库的数据同步
- 同步模式:支持同步、近同步、异步和超级异步四种同步模式
- 手动故障转移:需要手动执行故障转移操作
配置步骤
准备环境:
- 确保主备数据库版本相同
- 确保主备数据库具有相同的页面大小和字符集
- 配置主备数据库之间的网络连接
配置主数据库:
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配置备用数据库:
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启动 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 环境
配置步骤
安装和配置 TSAC:
bash# 安装 TSAC 软件 ./installSAmp -acceptLicense # 配置 TSAC 域 samctrl -c -n hadr_domain配置 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"配置资源依赖关系:
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配置故障转移策略:
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),支持客户端自动重定向:
- 客户端自动重定向:当主数据库发生故障时,客户端自动重定向到备用数据库
- 透明故障转移:对客户端应用程序透明,无需修改代码
- 连接重试机制:自动重试连接,直到连接成功或达到最大重试次数
- 支持读写分离:可以将只读请求路由到备用数据库
配置步骤
配置 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配置 JDBC 客户端:
javaString url = "jdbc:db2://primary.example.com:50001/sample:enableACR=true;maxRetriesForClientReroute=5;retryIntervalForClientReroute=10;" Connection conn = DriverManager.getConnection(url, "db2inst1", "password123");配置 CLI 客户端:
sqlUPDATE 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 架构支持备用数据库的只读访问,实现负载均衡:
- 备用数据库只读访问:允许在备用数据库上执行只读查询
- 负载均衡:将只读查询分流到备用数据库,减轻主数据库负担
- 实时数据访问:备用数据库的数据与主数据库保持同步
- 支持多种同步模式:支持近同步、异步和超级异步模式
配置步骤
配置主数据库:
sql-- 启用 Read-on-Standby UPDATE DATABASE CONFIGURATION FOR sample USING HADR_REPLAY_DELAY 0 UPDATE DATABASE CONFIGURATION FOR sample USING HADR_SYNCMODE NEARSYNC配置备用数据库:
sql-- 启用 Read-on-Standby UPDATE DATABASE CONFIGURATION FOR sample USING HADR_REPLAY_DELAY 0 UPDATE DATABASE CONFIGURATION FOR sample USING HADR_SYNCMODE NEARSYNC启动 HADR:
sql-- 在备用数据库上启动 HADR db2 START HADR ON DATABASE sample AS STANDBY -- 在主数据库上启动 HADR db2 START HADR ON DATABASE sample AS PRIMARY连接到备用数据库进行只读访问:
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 个备用数据库
- 不同同步模式:每个备用数据库可以配置不同的同步模式
- 地理分布:可以将备用数据库部署在不同的地理位置
- 多层次保护:提供多层次的灾难恢复保护
配置步骤
配置主数据库:
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配置第一个备用数据库:
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配置第二个备用数据库:
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启动 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) | 超级异步 | 高延迟,数据完整性较低 |
网络优化策略
启用日志压缩:
sqlUPDATE DATABASE CONFIGURATION FOR sample USING LOGARCHOPT1 "COMPRESS"优化网络参数:
bash# 调整 TCP 缓冲区大小 echo "net.core.rmem_max=16777216" >> /etc/sysctl.conf echo "net.core.wmem_max=16777216" >> /etc/sysctl.conf sysctl -p使用专用网络:为 HADR 通信使用专用网络,避免与其他流量竞争
配置 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 ManagerQ5: 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,提供更广泛的平台支持和更多功能
最佳实践
- 选择合适的同步模式:根据主备数据库之间的距离和业务需求选择合适的同步模式
- 配置适当的超时参数:根据网络延迟配置适当的 HADR 超时参数
- 启用自动客户端重定向:提高客户端应用程序的可用性
- 考虑使用 Read-on-Standby:利用备用数据库的只读访问能力,提高系统整体性能
- 使用多个备用数据库:为关键业务系统提供多层次的保护
- 优化网络配置:根据主备数据库之间的距离和网络条件优化网络配置
- 定期测试故障转移:定期测试 HADR 故障转移,确保在实际故障发生时能够正常工作
- 监控 HADR 状态:建立完善的监控机制,及时发现和解决 HADR 相关问题
- 备份 HADR 配置:定期备份 HADR 配置,以便在需要时快速恢复
- 培训运维人员:确保运维人员熟悉 HADR 配置和故障处理流程
总结
DB2 HADR 支持多种架构类型,每种架构类型都有其特定的适用场景和配置要求。选择合适的 HADR 架构类型对于确保数据库系统的高可用性和灾难恢复能力至关重要。在实际部署中,需要根据业务需求、预算限制、技术条件等因素综合考虑,选择最适合的 HADR 架构类型。
随着 DB2 版本的不断更新,HADR 功能也在不断增强,提供了更多的架构选择和更好的性能。通过合理配置和管理 HADR 环境,可以显著提高数据库系统的可用性和灾难恢复能力,确保业务的连续性和数据的完整性。
