方案:部署 HADR 多备用数据库设置
方案:部署 HADR 多备用数据库设置
https://www.ibm.com/docs/zh/db2/10.5?topic=databases-scenario-deploying-hadr-multiple-standby-database-setup
示例:多 HADR 备用数据库设置中的接管
DB2 pureScale 环境中的高可用性灾难恢复 (HADR)
HADR“在备用数据库上读取”功能
检测和响应系统中断
GDPC 高可用性/灾难恢复
数据恢复
DB2 pureScale 环境中的实例管理
DB2 workload manager
接口(工具、命令和 API)
Db2
10.5
反馈
产品列表
DB2 10.5 for Linux, UNIX, and Windows
方案:部署 HADR 多备用数据库设置
此方案说明一家名为 ExampleBANK 的银行的 HADR 设置的规划、配置和部署。此设置具有三个备用数据库:一个主体备用数据库和两个辅助备用数据库。
背景
因为银行业务是 24x7 业务,所以高可用性对 ExampleBANK 的技术策略很关键。此外,ExampleBANK 经历了一场飓风袭击城市 A(其总部所在地)的风险事件,因此该银行还需要灾难恢复策略。高可用性灾难恢复 (HADR) 提供了一个解决方案,可帮助该银行借助一项技术同时达成这两个目标:HADR 多备用数据库。
ExampleBANK 将以下要求视为其 HADR 解决方案的基本要求:
一个进取型的恢复时间目标
由于银行提供 24 小时联机服务,因此 ExampleBANK 希望使应用程序无法连接到期数据库的时间减少到最短。
一个进取型的恢复点目标
0ExampleBANK 无法容忍数据损失,因此 RPO 应尽可能地接近 0。
接近于零的计划停机时间
ExampleBANK 的数据库应在尽可能多的时间内可用,即使在计划的活动(例如,升级和维护)期间也是如此。
通过地理分布来提供数据保护
作为其合规标准的一部分,ExampleBANK 希望具有在远程位置恢复运营的能力。
易于部署和管理
ExampleBANK 负担沉重的 IT 部门希望采用一种配置相对简单且具有自动化功能的解决方案。
如以下方案所展示,在多备用数据库方式下使用 HADR 功能帮助 ExampleBANK 满足所有这些要求。
计划多备用设置
ExampleBANK 希望其 HADR 设置具有高可用性和灾难恢复保护,因此该银行决定使用备用数据库的最大数目:三个。为实现此 RTO,该银行必须具有一个与主数据库紧密同步并与主数据库搭配使用的备用数据库(使用 SYNC 或 NEARSYNC 方式的一个备用数据库)。最有意义的做法是将该备用数据库作为主体备用数据库,因为只有该类备用数据库支持所有的同步方式。主数据库和主体备用数据库均位于 ExampleBANK 设于城市 A 的总部并通过局域网连接。
此外,为保护该银行的数据以免因灾难丢失,ExampleBANK DBA 选择在该银行设于城市 B 的区域办事处设置两个备用数据库。该区域办事处通过广域网与城市 A 的总部连接。两个城市之间的距离将不会影响主数据库,因为这两个备用数据库为辅助备用数据库,它们自动在 SUPERASYNC 方式下运行。DBA 可以通过将这两个备用数据库中的一个设置为使用“在备用数据库上读取”功能,另一个使用“延迟重放”功能,从而为这些额外数据库的成本提供理由。另外,这些备用数据库还可通过滚动更新或维护方案帮助维持数据库可用性,防止失去 HADR 保护。
配置多备用设置
ExampleBANK DBA 生成了打算作为主数据库的 HADR_DB 的备份:
DB2 BACKUP DB hadr_db TO backup_dir
然后,该 DBA 通过发出以下命令将该备份复原到打算作为备用数据库的每台主机:
DB2 RESTORE DB hadr_db FROM backup_dir
提示: 有关创建备用数据库的选项的更多信息,请参阅初始化备用数据库。
对于初始设置,ExampleBANK DBA 决定大多数缺省配置设置已足够。但是,在常规 HADR 设置中,必须显式设置以下数据库配置参数:
hadr_local_host
hadr_local_svc
hadr_remote_host
hadr_remote_inst
hadr_remote_svc
为了获取这些配置参数的正确值,DBA 将确定包含在 HADR 设置中的四个数据库的主机名、端口号和实例名:
表 1. 数据库的主机名、端口号和实例名
预期的角色
主机名
端口号
实例名
主数据库 host1 10 dbinst1
主体备用数据库 host2 40 dbinst2
辅助备用数据库 host3 41 dbinst3
辅助备用数据库 host4.ibm.com 42 dbinst4
在主数据库上,hadr_remote_host、hadr_remote_inst 和 hadr_remote_svc 配置参数的设置分别与主体备用数据库的主机名、实例名和端口号相对应。在备用数据库上,这些配置参数的值对应于主数据库的主机名、端口号和实例名。此外,DBA 将使用该主机名和端口值来设置所有数据库上的 hadr_target_list 配置参数。另外,尽管并非必需,DBA 还是将有关设置中所有备用数据库的信息添加到每个其他数据库的目标列表。关于此主题的更多信息,请参阅高可用性灾难恢复 (HADR) 的数据库配置。
如上所述,该银行希望在主数据库与主体备用数据库之间尽可能紧密地保持同步,因此 DBA 将主数据库上的 hadr_syncmode 参数设置为 SYNC。尽管主体备用数据库在连接到主数据库后,会自动将其有效同步方式设置为 SYNC,DBA 还是将主体备用数据库上的 hadr_syncmode 参数设置为 SYNC。这是因为,如果主体备用数据库与主数据库交换角色,那么新的主数据库/主体备用数据库对的同步方式将仍为 SYNC。
DBA 决定将 host2(与辅助备用数据库位于不同城市)指定为辅助备用数据库的主体备用数据库。如果其中一个辅助备用数据库成为主数据库,那么新主数据库与位于远程位置的 host2 之间的好的同步方式是 SUPERASYNC。因此,尽管辅助备用数据库在连接到主数据库后会自动将其有效同步方式设置为 SUPERASYNC,DBA 还是将两个辅助备用数据库上的 hadr_syncmode 参数设置为 SUPERASYNC。关于此主题的更多信息,请参阅高可用性灾难恢复 (HADR) 同步方式。
最后,DBA 已了解有关新的 HADR 延迟重放功能的知识,该功能可用于有意地通过延迟重放日志来使某个备用数据库保持在早于主数据库的时间点的某个时间点。DBA 决定启用此功能将有助于 ExampleBANK 针对主数据库上的错误事务提供数据保护。DBA 选择将辅助备用数据库 host4 用于此功能,并记下必须先禁用此功能,然后 host4 作为主数据库才能进行接管。关于此主题的更多信息,请参阅HADR 延迟重放。
DBA 发出以下命令以更新每个数据库上的配置参数:
在 host1(主数据库)上:
DB2 "UPDATE DB CFG FOR hadr_db USING
HADR_TARGET_LIST host2:40|host3:41|host4:42
HADR_REMOTE_HOST host2
HADR_REMOTE_SVC 40
HADR_LOCAL_HOST host1
HADR_LOCAL_SVC 10
HADR_SYNCMODE sync
HADR_REMOTE_INST db2inst2"
在 host2(主体备用数据库)上:
DB2 "UPDATE DB CFG FOR hadr_db USING
HADR_TARGET_LIST host1:10|host3:41|host4:42
HADR_REMOTE_HOST host1
HADR_REMOTE_SVC 10
HADR_LOCAL_HOST host2
HADR_LOCAL_SVC 40
HADR_SYNCMODE sync
HADR_REMOTE_INST db2inst1"
在 host3(辅助备用数据库)上:
DB2 "UPDATE DB CFG FOR hadr_db USING
HADR_TARGET_LIST host2:40|host1:10|host4:42
HADR_REMOTE_HOST host1
HADR_REMOTE_SVC 10
HADR_LOCAL_HOST host3
HADR_LOCAL_SVC 41
HADR_SYNCMODE superasync
HADR_REMOTE_INST db2inst1"
在 host4(辅助备用数据库)上:
DB2 "UPDATE DB CFG FOR hadr_db USING
HADR_TARGET_LIST host2.:40|host1:10|host3:41
HADR_REMOTE_HOST host2
HADR_REMOTE_SVC 10
HADR_LOCAL_HOST host4
HADR_LOCAL_SVC 42
HADR_SYNCMODE superasync
HADR_REMOTE_INST db2inst1
HADR_REPLAY_DELAY 86400"
最后,出于以下原因,ExampleBANK DBA 希望启用 HADR 的“在备用数据库上读取”功能:
能够对备用数据库上的某些 HADR 配置参数进行联机更改
对备用数据库调用 MON_GET_HADR 表函数
转移主数据库的一些只读工作负载
DBA 通过分别对 host2、host3 和 host4 发出以下命令来更新这些备用数据库上的注册表变量:
DB2SET DB2_HADR_ROS=ON
DB2SET DB2_STANDBY_ISO=UR
启动 HADR 数据库
DBA 首先通过分别对 host2、host3 和 host4 发出以下命令来启动这些备用数据库:
DB2 START HADR ON DB hadr_db AS STANDBY
接着,DBA 对主数据库 host1 启动 HADR:
DB2 START HADR ON DB hadr_db AS PRIMARY
为了验证 HADR 已建立并正在运行,DBA 通过从 host1 上的主数据库发出 db2pd 命令来查询数据库的状态,这将返回有关所有备用数据库的信息:
db2pd -db hadr_db -hadr
Database Member 0 -- Database hadr_db -- Active -- Up 0 days 00:23:17 --
Date 06/08/2011 13:57:23
HADR_ROLE = PRIMARY
REPLAY_TYPE = PHYSICAL
HADR_SYNCMODE = SYNC
STANDBY_ID = 1
LOG_STREAM_ID = 0
HADR_STATE = PEER
HADR_FLAGS =
PRIMARY_MEMBER_HOST = host1
PRIMARY_INSTANCE = db2inst1
PRIMARY_MEMBER = 0
STANDBY_MEMBER_HOST = host2
STANDBY_INSTANCE = db2inst2
STANDBY_MEMBER = 0
HADR_CONNECT_STATUS = CONNECTED
HADR_CONNECT_STATUS_TIME = 06/08/2011 13:38:10.199479 (1307565490)
HEARTBEAT_INTERVAL(seconds) = 30
HADR_TIMEOUT(seconds) = 120
TIME_SINCE_LAST_RECV(seconds) = 3
PEER_WAIT_LIMIT(seconds) = 0
LOG_HADR_WAIT_CUR(seconds) = 0.000
LOG_HADR_WAIT_RECENT_AVG(seconds) = 0.006298
LOG_HADR_WAIT_ACCUMULATED(seconds) = 0.516
LOG_HADR_WAIT_COUNT = 82
SOCK_SEND_BUF_REQUESTED,ACTUAL(bytes) = 0, 50772
SOCK_RECV_BUF_REQUESTED,ACTUAL(bytes) = 0, 87616
PRIMARY_LOG_FILE,PAGE,POS = S0000009.LOG, 1, 49262315
STANDBY_LOG_FILE,PAGE,POS = S0000009.LOG, 1, 49262315
HADR_LOG_GAP(bytes) = 0
STANDBY_REPLAY_LOG_FILE,PAGE,POS = S0000009.LOG, 1, 49262315
STANDBY_RECV_REPLAY_GAP(bytes) = 0
PRIMARY_LOG_TIME = 06/08/2011 13:49:19.000000 (1307566159)
STANDBY_LOG_TIME = 06/08/2011 13:49:19.000000 (1307566159)
STANDBY_REPLAY_LOG_TIME = 06/08/2011 13:49:19.000000 (1307566159)
STANDBY_RECV_BUF_SIZE(pages) = 16
STANDBY_RECV_BUF_PERCENT = 0
STANDBY_SPOOL_LIMIT(pages) = 0
STANDBY_SPOOL_PERCENT = 0
PEER_WINDOW(seconds) = 0
READS_ON_STANDBY_ENABLED = Y
STANDBY_REPLAY_ONLY_WINDOW_ACTIVE = N
HADR_ROLE = PRIMARY
REPLAY_TYPE = PHYSICAL
HADR_SYNCMODE = SUPERASYNC
STANDBY_ID = 2
LOG_STREAM_ID = 0
HADR_STATE = REMOTE_CATCHUP
HADR_FLAGS =
PRIMARY_MEMBER_HOST = host1
PRIMARY_INSTANCE = db2inst1
PRIMARY_MEMBER = 0
STANDBY_MEMBER_HOST = host3
STANDBY_INSTANCE = db2inst3
STANDBY_MEMBER = 0
HADR_CONNECT_STATUS = CONNECTED
HADR_CONNECT_STATUS_TIME = 06/08/2011 13:35:51.724447 (1307565351)
HEARTBEAT_INTERVAL(seconds) = 30
HADR_TIMEOUT(seconds) = 120
TIME_SINCE_LAST_RECV(seconds) = 16
PEER_WAIT_LIMIT(seconds) = 0
LOG_HADR_WAIT_CUR(seconds) = 0.000
LOG_HADR_WAIT_RECENT_AVG(seconds) = 0.006298
LOG_HADR_WAIT_ACCUMULATED(seconds) = 0.516
LOG_HADR_WAIT_COUNT = 82
SOCK_SEND_BUF_REQUESTED,ACTUAL(bytes) = 0, 16384
SOCK_RECV_BUF_REQUESTED,ACTUAL(bytes) = 0, 87380
PRIMARY_LOG_FILE,PAGE,POS = S0000009.LOG, 1, 49262315
STANDBY_LOG_FILE,PAGE,POS = S0000009.LOG, 1, 49262315
HADR_LOG_GAP(bytes) = 0
STANDBY_REPLAY_LOG_FILE,PAGE,POS = S0000009.LOG, 1, 49262315
STANDBY_RECV_REPLAY_GAP(bytes) = 0
PRIMARY_LOG_TIME = 06/08/2011 13:49:19.000000 (1307566159)
STANDBY_LOG_TIME = 06/08/2011 13:49:19.000000 (1307566159)
STANDBY_REPLAY_LOG_TIME = 06/08/2011 13:49:19.000000 (1307566159)
STANDBY_RECV_BUF_SIZE(pages) = 16
STANDBY_RECV_BUF_PERCENT = 0
STANDBY_SPOOL_LIMIT(pages) = 0
STANDBY_SPOOL_PERCENT = 0
PEER_WINDOW(seconds) = 0
READS_ON_STANDBY_ENABLED = Y
STANDBY_REPLAY_ONLY_WINDOW_ACTIVE = N
HADR_ROLE = PRIMARY
REPLAY_TYPE = PHYSICAL
HADR_SYNCMODE = SUPERASYNC
STANDBY_ID = 3
LOG_STREAM_ID = 0
HADR_STATE = REMOTE_CATCHUP
HADR_FLAGS =
PRIMARY_MEMBER_HOST = host1
PRIMARY_INSTANCE = db2inst1
PRIMARY_MEMBER = 0
STANDBY_MEMBER_HOST = host4
STANDBY_INSTANCE = db2inst4
STANDBY_MEMBER = 0
HADR_CONNECT_STATUS = CONNECTED
HADR_CONNECT_STATUS_TIME = 06/08/2011 13:46:51.561873 (1307566011)
HEARTBEAT_INTERVAL(seconds) = 30
HADR_TIMEOUT(seconds) = 120
TIME_SINCE_LAST_RECV(seconds) = 6
PEER_WAIT_LIMIT(seconds) = 0
LOG_HADR_WAIT_CUR(seconds) = 0.000
LOG_HADR_WAIT_RECENT_AVG(seconds) = 0.006298
LOG_HADR_WAIT_ACCUMULATED(seconds) = 0.516
LOG_HADR_WAIT_COUNT = 82
SOCK_SEND_BUF_REQUESTED,ACTUAL(bytes) = 0, 16384
SOCK_RECV_BUF_REQUESTED,ACTUAL(bytes) = 0, 87380
PRIMARY_LOG_FILE,PAGE,POS = S0000009.LOG, 1, 49262315
STANDBY_LOG_FILE,PAGE,POS = S0000009.LOG, 1, 49262315
HADR_LOG_GAP(bytes) = 0
STANDBY_REPLAY_LOG_FILE,PAGE,POS = S0000009.LOG, 1, 49262315
STANDBY_RECV_REPLAY_GAP(bytes) = 0
PRIMARY_LOG_TIME = 06/08/2011 13:49:19.000000 (1307566159)
STANDBY_LOG_TIME = 06/08/2011 13:49:19.000000 (1307566159)
STANDBY_REPLAY_LOG_TIME = 06/08/2011 13:49:19.000000 (1307566159)
STANDBY_RECV_BUF_SIZE(pages) = 16
STANDBY_RECV_BUF_PERCENT = 0
STANDBY_SPOOL_LIMIT(pages) = 0
STANDBY_SPOOL_PERCENT = 0
PEER_WINDOW(seconds) = 0
READS_ON_STANDBY_ENABLED = Y
STANDBY_REPLAY_ONLY_WINDOW_ACTIVE = N