无论何时,高可用性灾难恢复 (HADR) 备用数据库都处于五个状态之一:本地同步复制、远程同步复制暂挂、远程同步复制、对等和断开对等。这些状态由日志装入状态定义。无论该状态如何,都会重放所有可用日志。
如果备用数据库已连接到主数据库,那么会在 MON_GET_HADR 表函数和 db2pd 命令输出的 HADR_STATE 字段中报告备用数据库的状态。(如果它未连接到主数据库,那么会报告 DISCONNECTED。)
图 1 显示不同备用数据库状态的变化顺序。
图 1. 备用数据库的状态
本地同步复制状态
借助 HADR 功能,启动数据库作为备用数据库时,该数据库将进入本地同步复制状态,并且将读取其本地日志路径中的日志文件以确定哪些日志在本地可用。处于此状态时,即使已配置日志归档方法,也不会从归档中检索日志。并且,处于此状态时,不需要与主数据库的连接;但是,如果连接不存在,那么备用数据库会尝试连接到主数据库。当到达本地日志文件末尾时,备用数据库进入远程同步复制暂挂状态。
远程同步复制暂挂状态
当备用数据库进入远程同步复制暂挂状态时,如果尚未建立与主数据库的连接,那么备用数据库会等待连接。建立连接之后,备用数据库会获取主数据库的当前日志链信息。这使备用数据库能够在配置了日志归档的情况下从该归档中检索日志文件以及验证日志文件是否有效。
处于远程同步复制状态和对等状态时,如果备用数据库失去与主数据库的连接,那么它将回到远程同步复制暂挂状态。重新建立连接时,备用数据库会尝试从该归档中检索日志。因此,如果您配置了共享归档设备,那么备用数据库也许能够找到比使用独立归档设备时更多的日志。因此,使用归档对主数据库的影响会小于通过 HADR 连接从主数据库进行发送的影响。
远程同步复制状态
处于远程同步复制状态时,主数据库从其日志路径中或者通过日志归档方法读取日志数据,并且这些日志数据将发送到备用数据库。备用数据库接收到主数据库机器磁盘上的所有日志数据后,主数据库和备用数据库进入对等状态。如果您正在使用 SUPERASYNC 同步方式,那么主数据库和备用数据库永远不会进入对等状态。它们会永远留在远程同步复制状态,这可以防止在对等状态下发生主数据库日志写入阻塞。
如果在远程同步复制状态期间主数据库和备用数据库之间的连接断开,那么备用数据库将进入远程同步复制暂挂状态。
受助远程同步复制
受助远程同步复制状态是 DB2® pureScale® 环境中的 HADR 所特有的。
由于网络出现问题或主数据库上的成员处于不活动状态,备用重放成员可能无法直接连接到主数据库上的成员。在这种情况下,备用重放成员将在可以连接到备用数据库的主数据库上另一成员的帮助下获取无法访问的主数据库上的一个成员的日志。此提供帮助的成员将对它要帮助的每个成员使用专用 TCP 连接。可以处于受助远程同步复制状态的日志流永远都不可能进入对等状态,这是因为对它们使用了间接连接。当备用重放成员可以直接连接到主数据库上的成员时,将自动终止受助远程同步复制。
您可以使用 MON_GET_HADR 表函数或 db2pd 命令来确定成员的日志流是否处于受助远程同步复制状态。对于主数据库上的成员,其日志流显示为处于 REMOTE_CATCHUP 状态,并且 HADR_FLAGS 字段包含 ASSISTED_REMOTE_CATCHUP 标志。
对等状态
处于对等状态时,每当主数据库将其日志页面清空到磁盘时,日志数据将从主数据库的日志写缓冲区直接传送到备用数据库。HADR 同步方式指定主数据库是否等待备用数据库发送已接收到日志数据的确认消息。日志页始终写至备用数据库上的本地日志文件。此行为可以防止发生崩溃,并允许在执行接管后在新主数据库上将文件进行归档(如果在旧主数据库上未将该文件进行归档)。在将接收到的日志页面写至本地磁盘后,可以在备用数据库上重放这些日志页面。如果禁用了日志假脱机(这是缺省值),那么日志重放将仅从日志接收缓冲区读取日志。
如果日志重放较慢,那么接收缓冲区可能会被填满,这时备用数据库会停止接收新日志。如果发生这种情况,那么主数据库日志写入将被阻塞。如果启用日志假脱机,那么将释放部分日志缓冲区(即使尚未重放该部分),以便主数据库日志写入可以继续进行。稍后,日志重放将从磁盘读取日志数据。如果假脱机设备已填满,或者达到了已配置的假脱机限制,那么备用数据库仍会停止接收,并且将再次阻塞主数据库。
如果主数据库与备用数据库在处于对等状态时断开了连接,并且 hadr_peer_window 数据库配置参数设置为 0(这是缺省值),那么备用数据库将进入远程同步复制暂挂状态。但是,如果主数据库与备用数据库在处于对等状态期间断开了连接,并且您将 hadr_peer_window 参数设置为非零值(这意味着您配置了对等时间),那么备用数据库将进入断开连接的对等状态。
断开连接的对等状态
如果您配置了对等时间,并且主数据库与备用数据库在处于对等状态时断开了连接,那么主数据库会继续执行操作,就好像主数据库和备用数据库仍处于对等状态一样。此行为持续到对等时间到期或者备用数据库重新连接为止,以先发生的情况为准。主数据库和备用数据库之间的连接断开,但它们仍像处于对等状态那样运行的状态,称为断开连接的对等。
配置对等时间的优点是可以降低多重或级联失败期间丢失事务的风险。 如果没有对等窗口,那么当主数据库和备用数据库之间的连接断开时,主数据库将立即脱离对等状态并继续进行事务处理。这些事务将不会被复制到备用数据库。如果主数据库在与备用数据库的连接断开后的短时间内发生故障,那么在故障转移中发生事务丢失的风险很高。如果启用了对等时间,那么在主数据库与备用数据库在处于对等状态时断开了连接之后,主数据库会将事务处理阻塞一段时间,以便防止发生级联故障。并且,备用数据库可以在对等时间内进行接管,没有数据丢失的风险。
配置对等时间有一个缺点,那就是主数据库上的事务处理将要花较长的时间,甚至当主数据库在对等时间中等待与要复原的备用数据库的连接或等待对等时间到期时发生超时。另外,间歇性的网络故障也可能对主数据库事务处理造成严重影响。
可以使用 MON_GET_HADR 表函数或带 -hadr 参数的 db2pd 命令来确定对等时间大小,即 hadr_peer_window 数据库配置参数的值。
手动将日志文件从主数据库复制到备用数据库
一种用于使主数据库与备用数据库同步的方法是将主数据库日志文件手动复制到备用数据库日志路径或溢出日志路径(如果配置了该路径)。如果主数据库与备用数据库之间存在较大的日志间隔时(例如,因为备用数据库关闭了较长时间),那么手动复制文件会特别有用。手动复制文件可以减少备用数据库的延迟(因为这使它不必从归档中检索日志),也可以降低对主数据库的影响(因为这使它不必传送这些日志文件,也不必从归档中检索这些日志文件)。
在激活备用数据库之前执行此步骤很重要。在您取消激活备用数据库之后,它将继续搜索本地日志文件,尝试从归档中进行检索,并使主数据库忙于日志传送(如上所述)。如果您在激活备用数据库之后将日志文件复制到备用数据库,那么此步骤会妨碍备用数据库的正常操作。




