高可用性灾难恢复 (HADR) 的数据库配置
您可以使用数据库配置参数来帮助实现 HADR 的最佳性能。 Db2® HADR 的最佳性能。
- 重放主数据库提供的日志文件时,可能会为备用数据库返回错误消息。
- 执行接管操作之后,新的主数据库可能无法处理工作负载,这将导致性能问题,或者,在接收错误消息的应用程序中,这些应用程序在与原始主数据库连接后无法接收到此类错误消息。
备用数据库上的日志文件大小配置参数
前一段落中描述的配置参数行为的一种例外情况是 logfilsiz 数据库配置参数的行为。 尽管不会将此参数的值复制到备用数据库中,但是为了确保两个数据库具有完全相同的日志文件,将忽略备用数据库的 logfilsiz 配置参数的设置。 备用数据库将创建其大小与主数据库上的日志文件大小相匹配的本地日志文件。
完成接管之后,原始备用数据库(也就是新的主数据库)将使用您对原始主数据库设置的 logfilsiz 参数值,直到您重新启动该数据库为止。 这时,新的主数据库将恢复为使用您在本地设置的值。 此外,在新的主数据库上,当前日志文件会被截断,并且会调整预先创建的任何日志文件的大小。
如果由于执行非强制接管而导致数据库不断切换角色,并且未取消激活任何一个数据库,那么所使用的日志文件大小始终是原始主数据库中的日志文件大小。 然而,如果取消激活原始备用数据库(也就是新的主数据库),然后将其重新启动,那么新的主数据库将使用您在本地配置的日志文件大小。 如果再次接管原始主数据库,仍将继续使用此日志文件大小。 只有将原始主数据库取消激活并接着重新启动它之后,日志文件大小才会恢复为原始主数据库上的设置。
数据库配置参数 autorestart
- 如果要重新启动,请手动运行 RESTART DATABASE 命令。 如果重新启动失败,请执行故障转移。
- 如果要进行故障转移,请执行下列步骤:
- 关闭旧的主数据库以防止
脑裂
。 通过停止 DB2 实例或关闭主机电源来实现此目的。 如果无法访问该服务器以便进行管理,请通过禁用客户机/服务器网络来将服务器与客户机隔开。注: 取消激活数据库是不够的,因为客户机连接可以使它重新联机。 如果在一致状态下发生故障,那么即使 autorestart 参数设置为 OFF,客户机连接也能使其重新联机。 - 在关闭旧主数据库之后,在备用数据库上发出带有 BY FORCE 选项的 TAKEOVER HADR 命令。
- 关闭旧的主数据库以防止
备用数据库上的日志接收缓冲区大小
- 通过修改 DB2_HADR_BUF_SIZE 注册表变量的值来增大备用数据库上的日志接收缓冲区大小。
- 通过设置 hadr_spool_limit 配置参数对备用数据库启用日志假脱机。
装入操作和 HADR
如果使用 COPY YES 参数在主数据库上发出 LOAD 命令,那么该命令将在主数据库上执行,如果可以通过该命令指定的路径或设备访问装入副本,那么会将数据复制到备用数据库。 如果从备用数据库无法访问装入副本数据,那么在备用数据库中就会将用来存储表的表空间标记为无效。 会跳过将来的任何与此表空间有关的日志记录。 要确保装入操作可以访问备用数据库上的装入副本,请使用共享位置来存储 COPY YES 参数产生的输出文件。 此外,您可以在对主数据库执行装入操作时取消激活备用数据库,将输出文件的副本放到备用数据库路径中,然后激活备用数据库。
如果在主数据库上发出带有 NONRECOVERABLE 参数的 LOAD 命令,那么该命令将在主数据库上执行,并且备用数据库上的表将被标记为无效。 会跳过将来的任何与此表有关的日志记录。 您可以使用 COPY YES 和 REPLACE 参数发布 LOAD 命令,在主数据库和备用数据库中使用新数据恢复表,也可以删除表来恢复空间。
- 该表使用 NOT LOGGED INITIALLY 属性进行创建。
- 该表是多维集群 (MDC) 表。
- 该表具有压缩字典。
- 该表具有 XML 列。
因为 HADR 不支持执行附带 COPY NO 参数的装入操作,所以会自动将此操作转换为附带 NONRECOVERABLE 参数的装入操作。 要允许将指定了 COPY NO 参数的装入操作转换为指定了 COPY YES 参数的装入操作,请在主数据库上设置 DB2_LOAD_COPY_NO_OVERRIDE 注册表变量。 会对备用数据库忽略此注册表变量。 请确保备用数据库可以通过使用相同的路径、设备或装入库来访问您为主数据库指定的设备或目录。
如果使用 Tivoli Storage Manager (TSM) 软件使用 COPY YES 参数执行加载操作,可能需要在主数据库和备用数据库上设置 vendoropt 配置参数。 根据 TSM 的配置方式不同,主数据库和备用数据库上的值可能不同。 此外,使用 TSM 执行带有 COPY YES 参数的装入操作时,必须发出带有 GRANT 参数的 db2adutl 命令,以使备用数据库对装入的文件具有读访问权。
- 如果使用 LOAD 命令指定 REBUILD 索引方式选项,并且 LOG INDEX BUILD 表属性设置为 ON (使用 ALTER TABLE 语句) ,或者如果设置为 NULL 并且 logindexbuild 数据库配置参数设置为 ON,那么主数据库将在副本文件中包含重建的索引对象 (即,对表定义的所有索引) ,以使备用数据库能够复制索引对象。 如果在执行装入操作之前备用数据库上的索引对象已标记为无效,那么在执行装入操作后,由于重建了索引,所以此索引对象将再次可用。
- 如果使用 LOAD 命令指定 INCREMENTAL 索引方式选项,并且 LOG INDEX BUILD 表属性设置为 ON (使用 ALTER TABLE 语句) ,或者如果设置为 NULL 并且主数据库上的 logindexbuild 数据库配置参数设置为 ON,那么仅当在装入操作之前未将备用数据库上的索引对象标记为无效时,才会更新该索引对象。 否则,在备用数据库上将索引标记为无效。
DB2_HADR_PEER_WAIT_LIMIT 注册表变量
在数据库脱离对等状态时执行对等时间转换可确保对等时间语义在所有情况下都适用于安全接管。 如果主数据库在转换期间失败,那么一般对等时间保护仍然适用:如果备用数据库仍然处于断开连接的对等状态,那么可以从备用数据库安全接管。
对于备用数据库,在断开连接后,它将继续重放已接收到的日志。 在重放接收到的日志后,备用数据库将重新连接至主数据库。 重放接收到的日志之后,备用数据库将重新连接至主数据库。 重新连接后会进行一般状态过渡:首先处于远程同步复制状态,然后处于对等状态。
- 与 hadr_timeout 数据库配置参数的关系
如果在阻塞期间主数据库不断地接收来自备用数据库的脉动信号消息,那么 hadr_timeout 数据库配置参数不会使主数据库脱离对等状态。 hadr_timeout 数据库配置参数指定 HADR 网络层的超时值。 如果 HADR 数据库在 hadr_timeout 配置参数所指定的时间段内未从其伙伴数据库接收到任何消息,那么该数据库将与其伙伴数据库断开连接。 此超时不控制更高层操作(例如,日志装入和 ACK(确认)信号)的超时。 如果备用数据库的日志重放在执行大型操作(例如,装入或重组)时被阻塞,那么 HADR 组件仍会按正常时间表将脉动信号消息发送至主数据库。 在这样的情况下,除非您设置 DB2_HADR_PEER_WAIT_LIMIT 注册表变量,否则只要备用数据库重放被阻塞,主数据库也会被阻塞。
无论连接状态如何,DB2_HADR_PEER_WAIT_LIMIT 注册表变量都将取消阻塞主数据库日志记录。 即使您未设置 DB2_HADR_PEER_WAIT_LIMIT 注册表变量,在检测到网络错误或者连接被关闭时(可能是由于 hadr_timeout 配置参数而导致),主数据库也始终会脱离对等状态。
DB2_FAIL_RECOVERY_ON_TABLESPACE_ERROR 注册表变量
在 HADR 环境中,缺省情况下,当备用数据库具有处于无效状态或错误状态的表空间时,将停止重放此表空间上的事务。 而在其他有效表空间上,仍将继续重放事务。 当受影响的表空间只是数据库的一小部分,大多数应用程序可以使用有效表空间运行时,此缺省行为更可取。
可以通过将 DB2_FAIL_RECOVERY_ON_TABLESPACE_ERROR 注册表变量设置为 ROLLFORWARD 来指定不同的行为。 使用此设置时,当遇到无效或出错的表空间时,备用数据库将关闭。 在修正错误之后,可以重新启动备用数据库。 但是,如果无法修复错误,则可以恢复受影响的表空间,详情请参阅恢复 HADR 备用数据库上的表空间错误。
HADR 配置参数
某些 HADR 配置参数是静态参数,例如,hadr_local_host 和 hadr_remote_host。 会在数据库启动时装入静态参数,并且在运行时会忽略更改。 在 START HADR 命令完成时,还会装入 HADR 参数。 在主数据库中,HADR 可以动态启动和停止,并且数据库保持联机状态。 因此,在不关闭数据库的情况下刷新 HADR 配置参数的有效值的一种方法是停止并重新启动 HADR。 相比之下,STOP HADR 会关闭备用数据库,因此,在数据库处于联机状态时无法刷新备用数据库的参数。
- 主机名参数以及服务和端口名参数
- HADR 有六个您需要设置的相互关联的配置参数:
- hadr_target_list
- hadr_local_host
- hadr_remote_host
- hadr_local_svc
- hadr_remote_svc (环境除外。 Db2 pureScale 环境中不使用该参数)
- hadr_remote_inst
目标列表指定一组 host:port 对,它们将充当备用数据库(对于主数据库),或者充当在备用数据库执行接管成为新的 HADR 主数据库时要使用的备用主机。 有关其用法的详细描述,请参阅“相关链接”中的 hadr_target_list 主题。
主数据库与备用数据库之间的通信使用 TCP 连接。
local
参数指定本地地址,remote
参数指定远程地址。 主数据库或主数据库成员侦听其新连接的本地地址。 未连接至主数据库的备用数据库将重试连接至其远程地址。备用数据库也会侦听其本地地址。 在某些情况下,另一个 HADR 数据库可以在此地址与备用数据库联系并向其发送消息。
除非设置了 HADR_NO_IP_CHECK 注册表变量,否则 HADR 会对主数据库和主体备用数据库连接时的本地和远程地址执行下列交叉检查:
和my local address = your remote address
使用 IP 地址和端口号来完成此检查,而不使用配置参数中的文字串。 您需要在 NAT(网络地址转换)环境中设置 HADR_NO_IP_CHECK 注册表变量以绕过此检查。my remote address = your local address您可以配置 HADR 数据库以使用 IPv4 或 IPv6 来找到其伙伴数据库。 如果主机服务器不支持 IPv6,那么您必须使用 IPv4。 如果服务器支持 IPv6,那么数据库是使用 IPv4 还是 IPv6 取决于您为 hadr_local_host 和 hadr_remote_host 配置参数指定的地址的格式。 数据库会尝试将这两个参数解析为相同的 IP 格式,并在可能时使用 IPv6。 表 1 显示了如何为 IPv6-enabled 服务器确定 IP 方式:表 1. 如何确定用于 HADR 通信的地址空间 用于 hadr_local_host 参数的 IP 方式 用于 hadr_remote_host 参数的 IP 方式 用于 HADR 通信的 IP 方式 IPv4 地址 IPv4 地址 IPv4 IPv4 地址 IPv6 地址 错误 IPv4 地址 主机名,仅映射至 IPv4 IPv4 IPv4 地址 主机名,仅映射至 IPv6 错误 IPv4 地址 主机名,映射至 IPv4 和 IPv6 IPv4 IPv6 地址 IPv4 地址 错误 IPv6 地址 IPv6 地址 IPv6 IPv6 地址 主机名,仅映射至 IPv4 错误 IPv6 地址 主机名,仅映射至 IPv6 IPv6 IPv6 地址 主机名,映射至 IPv4 和 IPv6 IPv6 主机名,仅映射至 IPv4 IPv4 地址 IPv4 主机名,仅映射至 IPv4 IPv6 地址 错误 主机名,仅映射至 IPv4 主机名,仅映射至 IPv4 IPv4 主机名,仅映射至 IPv4 主机名,仅映射至 IPv6 错误 主机名,仅映射至 IPv4 主机名,映射至 IPv4 和 IPv6 IPv4 主机名,仅映射至 IPv6 IPv4 地址 错误 主机名,仅映射至 IPv6 IPv6 地址 IPv6 主机名,仅映射至 IPv6 主机名,仅映射至 IPv4 错误 主机名,仅映射至 IPv6 主机名,仅映射至 IPv6 IPv6 主机名,仅映射至 IPv6 主机名,映射至 IPv4 和 IPv6 IPv6 主机名,映射至 IPv4 和 IPv6 IPv4 地址 IPv4 主机名,映射至 IPv4 和 IPv6 IPv6 地址 IPv6 主机名,映射至 IPv4 和 IPv6 主机名,仅映射至 IPv4 IPv4 主机名,映射至 IPv4 和 IPv6 主机名,仅映射至 IPv6 IPv6 主机名,映射至 IPv4 和 IPv6 主机名,映射至 IPv4 和 IPv6 IPv6 仅当主数据库与备用数据库使用同一种 IPv4 或 IPv6 格式时,它们才能建立 HADR 连接。 如果一台服务器支持 IPv6(但是也支持 IPv4),而另一台服务器仅支持 IPv4,那么 IPv6 服务器上的 hadr_local_host 和 hadr_remote_host 参数中至少有一个参数必须指定 IPv4 地址,以强制此服务器上的数据库使用 IPv4。
您可以将 HADR 本地服务参数和远程服务参数(即,hadr_local_svc 和 hadr_remote_svc)设置为端口号或服务名称。 您指定的值必须映射至任何其他服务(其中包括其他 DB2 组件或其他 HADR 数据库)都未使用的端口。 特别是,您无法将任何一个参数值设置为服务器在等待来自远程客户机的通信时使用的 TCP/IP 端口(svcename 数据库管理器配置参数的值)或下一个端口(svcename 参数的值加 1)。
如果主数据库与备用数据库在不同服务器上,那么它们可以使用同一端口号或服务名称;否则,它们必须具有不同的值。
- 自动重新配置
- 如果您未正确设置 hadr_remote_host、hadr_remote_svc 和 hadr_remote_inst 配置参数,那么当 HADR 启动时,会自动重置这些配置参数。 即使此自动重新配置发生,也始终尝试设置正确的初始值,因为直到在备用数据库与其主数据库之间建立连接,重新配置才有可能生效。 在某些 HADR 部署中,可能需要这些初始值。 例如,如果使用 IBM Tivoli System Automation for Multiplatforms 软件,则需要 hadr_remote_inst 配置参数的值来构建资源名称。注: 如果 DB2_HADR_NO_IP_CHECK 注册表变量设置为 ON,那么不会自动更新 hadr_remote_host 和 hadr_remote_svc 。
重新配置以 hadr_target_list 配置参数的值正确为基础;如果目标列表条目中的任何内容不正确,那么您必须手动更正。
在主数据库上,重新配置按以下方式进行:- 如果 hadr_remote_host 和 hadr_remote_svc 配置参数的值与 host:port 对(hadr_target_list 配置参数的第一个条目)(即,主体备用数据库)不匹配,那么系统会使用目标列表中的值更新 hadr_remote_host 和 hadr_remote_svc 配置参数。
- 如果 hadr_remote_inst 配置参数的值与主体备用数据库的实例名称不匹配,那么主体备用数据库连接至主数据库后,系统会将正确的实例名称复制到主数据库的 hadr_remote_inst 配置参数。
在备用数据库上,重新配置按以下方式进行:- 备用数据库启动时,它会尝试连接至其 hadr_remote_host、hadr_remote_inst 和 hadr_remote_svc 配置参数中指定的数据库。
- 如果备用数据库无法连接至主数据库,那么它会等待主数据库与其连接。
- 主数据库使用其 hadr_target_list 参数中所列的地址连接至其备用数据库。 主数据库连接至备用数据库之后,系统会使用主数据库的正确值更新备用数据库的 hadr_remote_host、hadr_remote_inst 和 hadr_remote_svc 配置参数。
在非强制接管中,新主数据库上的 hadr_remote_host、hadr_remote_inst 和 hadr_remote_svc 配置参数的值会自动更新为其主体备用数据库,该新主数据库的 hadr_target_list 中所列的备用数据库上的这些参数会自动更新为指向该新主数据库。 不会更新未列在新主数据库的 hadr_target_list 中的任何数据库。 这些数据库继续尝试连接到旧主数据库并遭到拒绝,因为旧主数据库现在已成为备用数据库。 旧主数据库一定会出现在新主数据库的目标列表中,因为系统要求在目标列表中进行相互包含。
在强制接管中,新主数据库及其备用数据库(不包括旧主数据库)进行自动更新的方式与在非强制接管中相同。 但是,直到旧主数据库关闭并作为备用数据库重新启动以进行重新集成之后,它才会自动更新。
在接管期间未联机的任何数据库会在启动后自动重新配置。 在启动时自动重新配置可能不会立即生效,因为它依赖于新主数据库定期与备用数据库联系。 在启动时,备用数据库可能会尝试连接到旧主数据库并遵循该旧主数据库的日志流,从而使其与新主数据库的日志流分开,并使该备用数据库无法与新主数据库配对。 因此,在接管之前,您必须关闭旧主数据库以避免发生此类分裂情况。
- 同步方式
- hadr_syncmode 配置参数的设置在主数据库和备用数据库上不必相同。 在备用数据库上指定的任意 hadr_syncmode 配置参数设置将被视为其已配置的同步方式;此配置仅在备用数据库成为主数据库时具有相关性。 系统会对备用数据库指定有效同步方式。 对于任何辅助备用数据库,有效同步方式始终为 SUPERASYNC。 对于主体备用数据库,有效同步方式为主数据库的 hadr_syncmode 配置参数设置。 对于备用数据库,监视接口会将有效同步方式显示为同步方式。注: 如果在未使用 hadr_target_list 配置参数 (从 10.5开始不推荐使用的方法) 的情况下设置 HADR ,那么 hadr_syncmode 配置参数在主数据库和备用数据库上必须相同。
有关更多详细信息,请参阅
Db2 高可用性灾难恢复 (HADR) 同步方式
。 - HADR 超时和对等时间
您使用 hadr_timeout 配置参数指定的超时时间段必须在主数据库和备用数据库上完全相同。 当 HADR 数据库对建立连接时,会检查这些配置参数的值的一致性。
有一种例外情况,当主数据库启动时,它会等待备用数据库与其连接,等待时间为以下两个时间段中的较长时间段:- 最短时间 30 秒
- 由 hadr_timeout 数据库配置参数所指定的秒数。
在 HADR 数据库对建立连接之后,它们将交换脉动信号消息。 根据诸如 hadr_timeout 和 hadr_peer_window 配置参数等因素来计算脉动信号间隔。 报HEARTBEAT_INTERVALMON_GET_HADR 表函数和 db2pd 命令中的字段。 如果一个数据库在 hadr_timeout 配置参数所指定的秒数内未从另一数据库接收到任何消息,那么它会启动断开连接操作。 此行为意味着 HADR 数据库最多耗用由 hadr_timeout 配置参数所指定的秒数来检测其伙伴数据库的故障或者这两个数据库之间的网络故障。 如果将 hadr_timeout 配置参数设置得太小,那么您可能会接收到假警报并频繁地断开连接。
hadr_peer_window 配置参数的设置在主数据库和备用数据库上不必相同;主体备用数据库使用主数据库的对等时间设置。 此情况的例外情况是,您在未使用 hadr_target_list 配置参数 (从 10.5开始不推荐使用的方法) 的情况下设置 HADR ,在这种情况下, hadr_peer_window 配置参数在主数据库和备用数据库上必须相同。
在下列情况下,不能启用对等时间(即,必须将对等时间设置为 0):- 如果您正在使用 Db2 pureScale 功能部件
- 如果 hadr_syncmode 参数设置为 ASYNC 或 SUPERASYNC
- 如果您要配置辅助备用数据库
如果您将 hadr_peer_window 配置参数设置为非零值,并且主数据库在对等状态下失去与备用数据库的连接,那么主数据库要在恢复与备用数据库的连接或者经过了 hadr_peer_window 配置参数指定的时间值(以这两种情况中先发生者为准)之后才会落实事务。
对于最大可用性,hadr_peer_window 数据库配置参数的缺省值为 0。 当此参数设置为 0 时,只要主数据库与备用数据库之间的连接关闭时,主数据库就会退出对等状态以避免阻塞事务。 连接可能会因为备用数据库关闭连接、检测到网路错误或者已达到超时时间而关闭。 为了增强数据一致性(但是会降低可用性),您可以将 hadr_peer_window 数据库配置参数设置为非零值。
有关更多信息,请参阅
设置 hadr_timeout 和 hadr_peer_window 数据库配置参数
。
以下是主数据库和备用数据库的样本配置:
HADR_TARGET_LIST host2.ibm.com:hadr_service
HADR_LOCAL_HOST host1.ibm.com
HADR_LOCAL_SVC hadr_service
HADR_REMOTE_HOST host2.ibm.com
HADR_REMOTE_SVC hadr_service
HADR_REMOTE_INST dbinst2
HADR_TIMEOUT 120
HADR_SYNCMODE NEARSYNC
HADR_PEER_WINDOW 120
HADR_TARGET_LIST host1.ibm.com:hadr_service
HADR_LOCAL_HOST host2.ibm.com
HADR_LOCAL_SVC hadr_service
HADR_REMOTE_HOST host1.ibm.com
HADR_REMOTE_SVC hadr_service
HADR_REMOTE_INST dbinst1
HADR_TIMEOUT 120
HADR_SYNCMODE NEARSYNC
HADR_PEER_WINDOW 120