Db2 pureScale 环境中的 HADR 接管操作
当 HADR 备用数据库在 Db2 pureScale 环境中作为主数据库进行接管时,与其他环境中的 HADR 存在许多重要差异。
对于 HADR,存在以下两种类型的接管:角色切换和故障转移。 仅当主数据库可用并且切换主数据库与备用数据库的角色时,才能执行角色切换(有时称为正常接管或者非强制接管)。 当主数据库不可用时,可以执行故障转移或者强制接管。 这种接管通常用于主数据库故障情况,以使备用数据库成为新的主数据库。 在强制接管过程中,旧主数据库仍然保持主要角色,但备用数据库会向它发送消息以将它禁用。 这两种类型的接管在 Db2 pureScale 环境中都受支持,并且可以从任何备用数据库成员 (而不仅仅是当前重放成员) 发出这两种类型的接管。 但是,在备用数据库完成到主要角色的转变之后,将仅在执行接管之前充当重放成员的成员上启动该数据库。 可以通过发出 ACTIVATE DATABASE 命令或通过客户机连接以隐式方式在其他成员上启动数据库。
角色切换
在执行角色切换(通过从任何备用成员发出
TAKEOVER HADR 命令来启动该切换)之后,备用集群成为主集群,反之亦然。 角色切换可帮助确保旧主数据库与新主数据库之间不会丢失数据。 仅在以下情况下,才能启动角色切换:
- 主集群上未发生崩溃恢复,其中包括暂挂或正在进行的成员崩溃恢复。
- 所有日志流都处于对等状态或受助远程同步复制状态。
- 所有日志流都处于远程同步复制状态或受助远程同步复制状态,并且同步方式为 SUPERASYNC。
在角色切换期间,主数据库上将执行以下步骤:
- 在所有成员上拒绝新连接,回滚所有已打开的事务,然后将所有剩余日志传送到备用数据库。
- 主集群的数据库角色更改为备用角色。
- 与备用数据库具有直接连接的成员将选择为重放成员,将优先选择首选重放成员(即,从中启动了 HADR 的成员)。
- 在重放成员上启动日志接收和重放。
- 在集群的其他非重放成员上关闭该数据库。
- 在每个日志流上到达日志末尾之后,将对重放成员停止日志接收,以帮助确保不丢失任何数据。
- 重放成员完成重放所有已接收到的日志。
- 在确认主集群现在进入备用角色之后,重放成员将备用集群的角色更改为主要角色。
- 对于客户机连接,该数据库处于打开状态,但只会在先前是备用数据库重放成员的成员上激活该数据库。
故障转移
通过从任何备用成员发出带有 BY FORCE 选项的 TAKEOVER HADR 命令来启动故障转移后,备用集群将成为主集群。 将向旧主集群发送一条禁用消息,但是不会更改其角色。 接收到此消息的主集群上的任何成员都会禁用整个主集群。 启动故障转移之后,就表示您接受可能丢失数据与具有一个可以运行的数据库之间的折衷选择。 如果数据库处于本地同步复制状态,那么不能启动故障转移。
注: 与先前发行版不同,现在您可以启动故障转移,即使正在进行日志归档检索也是如此。
在故障转移期间,主数据库(假定它处于联机状态并且已连接到备用数据库)上将执行以下步骤:
- 在它接收到禁用消息之后,该数据库将关闭并停止日志写入。
- 将禁用消息发送到主数据库(如果已连接主数据库)。
- 停止日志装入和日志检索,这将承担数据丢失的风险。
- 重放成员完成重放所有已接收到的日志(即,存储在日志路径中的日志)。
- 回滚所有已打开的事务。
- 重放成员将备用集群的角色更改为主要角色。
- 对于客户机连接,该数据库处于打开状态,但只会在先前是备用数据库重放成员的成员上激活该数据库。
仅当旧主数据库的日志流未与新主数据库的日志流分离时,才可将旧主数据库重新集成为新备用数据库。 在可以启动 HADR 之前,数据库必须在所有旧主数据库的成员上处于脱机状态; 但是, 集群高速缓存工具可以保持联机状态。 如果任何成员处于联机状态,请将其终止,而不是在这些成员上发出 DEACTIVATE DATABASE 命令。