高可用性灾难恢复 (HADR) 是 DB2 的一个集成特性,它为 DB2 Enterprise Server Edition 和 DB2 pureScale® 提供了高可用性和灾难恢复支持。它是一种复制技术,将事务日志从主要数据库传输到备用数据库,并在备用数据库上应用这些日志让主要和备用数据库保持同步。如果主要数据库由于计划性维护活动或计划外的宕机而变得不可用,那么备用数据库将会承担主要数据库的角色。
下载DB2 和 Tivoli System Automation for Multiplatforms 的一个试用版。
Tivoli System Automation for Multiplatforms 是一个高可用性集群解决方案。它拥有检测系统故障和发起自动更正操作的机制,比如在无需用户干预的情况下重新启动资源或故障转移到备份资源。使用 Tivoli System Automation for Multiplatforms 配置 HADR 数据库的自动故障转移具有许多优势。
使用 Tivoli System Automation for Multiplatforms 的 HADR 数据库自动故障转移
如果 DB2 数据库配置了 HADR,但没有配置某种类型的集群管理器,那么数据库管理员就需要手动发出命令来让备用数据库承担主要数据库的角色。这需要数据库管理员手动监视系统的任何故障。
从 DB2 9.5 开始,DB2 产品中预先封装了 Tivoli System Automation for Multiplatforms,为配置 HADR 数据库的自动故障转移配提供了一个集成解决方案。基本上讲,可以使用 Tivoli System Automation for Multiplatforms 创建一个包含 HADR 主要和备用数据库机器的集群。然后,Tivoli System Automation for Multiplatforms 集群管理器可以监视集群的任何故障事件,比如系统崩溃或 DB2 实例崩溃。随后它会执行需要的更正操作(比如重新启动实例或将实例故障转移到备用数据库),以便确保高可用性。
回页首
理解 db2haicu(DB2 提供来使用 Tivoli System Automation for Multiplatforms 设置自动故障转移的工具)、虚拟 IP 和自动客户端重新路由很重要。
DB2 9.5 及更高版本提供了一个叫做 db2haicu(DB2 高可用性实例配置实用程序)的基于文本的实用程序,用于配置和管理高度可用的数据库。该实用程序需要各种各样的输入,比如主要和备用机器细节、网络细节和 HADR 数据库名称。
它可以在两种模式下运行:交互式或使用 XML 输入文件。在交互式模式下,系统会提示用户输入必要的详细信息,以便创建 System Automation for Multiplatforms 集群,并为数据库配置高可用性。对于 XML 输入文件,输入参数包含在该文件中并传递到 db2haicu。该实用程序将会解析此 XML 文件来收集与集群和数据库相关的各种细节,并执行必要的配置。
如何在交互式模式下使用 XML 文件运行 db2haicu 实用程序,这将在使用 db2haicu 设置高可用性一节中讨论。
可以将虚拟 IP 地址创建为一个公共 IP 地址,客户端应用程序可以使用该地址连接到主要数据库。在系统故障和后续的故障转移期间,Tivoli System Automation for Multiplatforms 将虚拟 IP 地址分配给备用数据库,后者承担了主要数据库的角色。这使得客户端应用程序能够无缝连接到新的主要数据库。
在备用数据库变成主要数据库时,自动客户端重新路由 (ACR) 特性自动将连接到主要数据库的客户端重新路由到该备用数据库。配置 ACR描述了如何设置 ACR。在使用 Tivoli System Automation for Multiplatforms 的高可用性设置中,虚拟 IP 是配置 ACR 的首选方法。
回页首
本节将介绍使用 Tivoli System Automation for Multiplatforms 为多个在同一个实例下运行的 DB2 HADR 数据库对配置自动故障转移的前提条件。图 1 显示了本教程中使用的示例网络的拓扑结构。
图 1. 使用 TSA 为多网络 HADR 拓扑结构配置自动故障转移
该拓扑结构中有两个节点:
这些节点是使用两个网络来连接的:一个公用网和一个私有网。客户端应用程序使用公用网中托管的虚拟 IP 地址来连接 HADR 数据库。私有网用于在主要和备用数据库之间执行 HADR 复制。在私有网不可用时,可以使用同一个网络来执行 HADR 复制和客户端连接。
要设置网络:
向您网络中的适配器分配一个静态 IP 地址。该示例使用了两个网络适配器:eth0 和 eth1,前者连接到客户端要连接的公用网,后者连接到用于执行 HADR 复制的私有网。
主要节点 (linuxnode01):
备用节点 (linuxnode02):
公共和私有网需要位于不同的子网掩码上。
hostname
命令在每个机器上执行时,这会提供机器名称或完全限定的域名作为输出。在 db2haicu 实用程序提示节点名称时需要提供同一个名称。在本例中,linuxnode01 上的 hostname
命令的输出必须为 linuxnode01 或 linuxnode01. fullyQualifiedDomainName .com。 ping linuxnode02
ping 198.72.81.89
ping linuxnode01
ping 198.72.81.88
使用 Tivoli System Automation for Multiplatforms 设置高可用性之前,必须为所有 3 个数据库设置 HADR:HADRDB1、HADRDB2 和 HADRDB3。
如图 1所示,我们在主要节点 linuxnode01 上创建了一个名为 db2inst1 的主要 DB2 实例,在备用实例上创建了一个名为 db2inst1 的备用 DB2 实例。主要数据库 HADRDB1、HADRDB2 和 HADRDB3 在 DB2 实例 db2inst1 中创建。
启用前滚恢复后,主要数据库需要备份到主要 DB2 实例上。该备份可以还原到备用 DB2 实例上。在这之后,需要在主要和备用数据库上更新与 HADR 相关的数据库配置参数。
要在主要和备用实例上为数据库 HADRDB1 设置的数据库配置参数如清单 1 和清单 2 所示。
该输出适用于 DB2 10.5。如果使用更早的版本,您可能不会看到与本例中相同的条目。
清单 1. 主要节点:主要节点上的 HADR 数据库配置
db2 get db cfg for hadrdb1 | grep -i hadr Database Configuration for Database hadrdb1 HADR database role = PRIMARY HADR local host name (HADR_LOCAL_HOST) = 198.72.81.88 HADR local service name (HADR_LOCAL_SVC) = 49868 HADR remote host name (HADR_REMOTE_HOST) = 198.72.81.89 HADR remote service name (HADR_REMOTE_SVC) = 49868 HADR instance name of remote server (HADR_REMOTE_INST) = db2inst1 HADR timeout value (HADR_TIMEOUT) = 120 HADR target list (HADR_TARGET_LIST) = HADR log write synchronization mode (HADR_SYNCMODE) = SYNC HADR spool log data limit (4KB) (HADR_SPOOL_LIMIT) = AUTOMATIC(53248) HADR log replay delay (seconds) (HADR_REPLAY_DELAY) = 0 HADR peer window duration (seconds) (HADR_PEER_WINDOW) = 300
清单 2. 备用节点:备用节点上的 HADR 数据库配置
db2 get db cfg for db hadrdb1 | grep -i hadr Database Configuration for Database hadrdb HADR database role = STANDBY HADR local host name (HADR_LOCAL_HOST) = 198.72.81.89 HADR local service name (HADR_LOCAL_SVC) = 49868 HADR remote host name (HADR_REMOTE_HOST) = 198.72.81.88 HADR remote service name (HADR_REMOTE_SVC) = 49868 HADR instance name of remote server (HADR_REMOTE_INST) = db2inst1 HADR timeout value (HADR_TIMEOUT) = 120 HADR target list (HADR_TARGET_LIST) = HADR log write synchronization mode (HADR_SYNCMODE) = SYNC HADR spool log data limit (4KB) (HADR_SPOOL_LIMIT) = AUTOMATIC(53248) HADR log replay delay (seconds) (HADR_REPLAY_DELAY) = 0 HADR peer window duration (seconds) (HADR_PEER_WINDOW) = 300
备注:
HADR_PEER_WINDOW
配置参数应设置为一个足够大的值,确保在发生故障时,它不会在 Tivoli System Automation for Multiplatforms 将主要角色故障转移到备用节点之前过期。因此,推荐该值不小于 180 秒,您可以根据自己环境的需求来增加该值。 HADR_SYNCMODE
配置参数可设置为 SYNC
或 NEARSYNC
。 SYNC
模式可确保零数据丢失,而 NEARSYNC
模式在 SYNC
模式基础上提供了性能改进,但有丢失数据的风险。 db2pd
命令输出在 DB2 10.1 中已更改。如果使用较早的版本,那么格式可能会有所不同。 在设置数据库配置参数后,需要在备用实例上启动 HADR,然后使用 START HADR
命令在主要实例上启动它。
可以使用 db2pd -hadr -db <dbname>
命令监视主要或备用实例上的 HADR。
清单 3 显示了为 HADRDB1 数据库执行 db2pd -hadr -db <dbname>
命令的示例输出。
清单 3. 备用实例上的 db2pd –hadr –db hadrdb1
输出
HADR_ROLE = STANDBY REPLAY_TYPE = PHYSICAL HADR_SYNCMODE = SYNC STANDBY_ID = 0 LOG_STREAM_ID = 0 HADR_STATE = PEER PRIMARY_MEMBER_HOST = 198.72.81.88 PRIMARY_INSTANCE = db2inst1 PRIMARY_MEMBER = 0 STANDBY_MEMBER_HOST = 198.72.81.89 STANDBY_INSTANCE = db2inst1 STANDBY_MEMBER = 0 HADR_CONNECT_STATUS = CONNECTED HADR_CONNECT_STATUS_TIME = 02/06/2014 07:06:17.405506 (1391688377) HEARTBEAT_INTERVAL(seconds) = 30 HEARTBEAT_MISSED = 1 HEARTBEAT_EXPECTED = 14775 HADR_TIMEOUT(seconds) = 120 TIME_SINCE_LAST_RECV(seconds) = 19 PEER_WAIT_LIMIT(seconds) = 0 LOG_HADR_WAIT_CUR(seconds) = 0.000 LOG_HADR_WAIT_RECENT_AVG(seconds) = 0.000000 LOG_HADR_WAIT_ACCUMULATED(seconds) = 0.000 LOG_HADR_WAIT_COUNT = 0 SOCK_SEND_BUF_REQUESTED,ACTUAL(bytes) = 0, 16384 SOCK_RECV_BUF_REQUESTED,ACTUAL(bytes) = 0, 87380 PRIMARY_LOG_FILE,PAGE,POS = S0000006.LOG, 0, 65802990 STANDBY_LOG_FILE,PAGE,POS = S0000006.LOG, 0, 65802990 HADR_LOG_GAP(bytes) = 0 STANDBY_REPLAY_LOG_FILE,PAGE,POS = S0000006.LOG, 0, 65802990 STANDBY_RECV_REPLAY_GAP(bytes) = 0 PRIMARY_LOG_TIME = 02/05/2014 13:44:17.000000 (1391625857) STANDBY_LOG_TIME = 02/05/2014 13:44:17.000000 (1391625857) STANDBY_REPLAY_LOG_TIME = 02/05/2014 13:44:17.000000 (1391625857) STANDBY_RECV_BUF_SIZE(pages) = 4298 STANDBY_RECV_BUF_PERCENT = 0 STANDBY_SPOOL_LIMIT(pages) = 53248 STANDBY_SPOOL_PERCENT = 0 PEER_WINDOW(seconds) = 120 PEER_WINDOW_END = 02/011/2014 08:00:25.000000 (1392123625) READS_ON_STANDBY_ENABLED = N
需要确保在继续使用 db2haicu 工具配置高可用性之前,所有 HADR 数据库都处于 PEER 状态。可使用 db2pd -hadr -db <dbname>
输出中的 HADR_STATE
字段验证此情形。
使用 db2haicu 工具之前,必须为主要和备用节点准备好合适的安全环境。
以根用户身份在主要和备用节点上发出 preprpnode
命令。在每个机器上,您提供的节点名称必须与 hostname
命令的输出相匹配。
清单 4. preprnode
preprpnode linuxnode01 linuxnode02
在发生网络故障或机器故障时,DB2 客户端应用程序无法连接到主要数据库。借助客户端重新路由特性,客户端应用程序在无法连接到主要服务器时,可以尝试连接到备用服务器。
在高可用性配置中,客户端使用虚拟 IP 地址连接到数据库。在主要节点发生故障期间,Tivoli System Automation for Multiplatforms 向备用节点执行故障转移,使其成为主要节点。虚拟 IP 地址被分配给主要节点,客户端应用程序可使用相同的虚拟 IP 地址连接到新的主要节点。
只有在集群使用 Tivoli System Automation for Multiplatforms 进行配置后,虚拟 IP 才会激活。在运行 db2haicu 工具之前,请确保虚拟 IP 无法 ping 通。
重要事项:虚拟 IP 是一种每数据库资源,而不是实例资源。因此,在示例设置中,我们需要识别 3 种不同的虚拟 IP — 每个对应一个数据库。
要设置 ACR,可提供在主要服务器不可用时,客户可连接到的备用服务器的主机名和端口号。这里的端口号是由 SVCENAME dbm cfg
参数所设置的,实例 TCP/IP 监听器的端口。请确保 TCP/IP 监听器已为主要和备用实例启动。本示例对 TCP/IP 监听器使用了端口 49864。
在备用和主要节点上发出 UPDATE ALTERNATE SERVER
命令,以配置用于客户端重新路由的虚拟 IP 地址。
清单 5. UPDATE ALTERNATE SERVER
DB2 UPDATE ALTERNATE SERVER FOR DB HADRDB1 USING HOSTNAME 9.26.98.232 SERVER 49864
对 HADRDB2 和 HADRDB3 重复同样的步骤,使用它们各自的虚拟 IP 作为主机名。
如果虚拟 IP 地址不可用,那么可以为 ACR 配置客户端用来连接到数据库的地址。
回页首
本节将介绍如何使用 db2haicu 自动化 HADR 故障转移。前面已经提到过,db2haicu 应在交互式模式下使用,或者它可以接受一个 XML 文件作为输入。在两种情况下,db2haicu 都需要首先在备用实例上运行,然后在主要实例上运行。
要在交互式模式下使用 db2haicu 来为 3 个 HADR 数据库设置自动故障转移,请按以下说明进行操作。
第一步是创建集群域。db2haicu 工具将会收集相关信息,比如当前的 DB2 实例和实例中的数据库,还会激活该实例下的所有数据库。
db2haicu
命令。将在屏幕上打印以下信息。因为系统中不存在域,所以 db2haicu 提示您创建一个集群域。
清单 6. 备用节点上的 db2haicu 输出
db2haicu Welcome to the DB2 High Availability Instance Configuration Utility (db2haicu). You can find detailed diagnostic information in the DB2 server diagnostic log file called db2diag.log. Also, you can use the utility called db2pd to query the status of the cluster domains you create. For more information about configuring your clustered environment using db2haicu, see the topic called 'DB2 High Availability Instance Configuration Utility (db2haicu)' in the DB2 Information Center. db2haicu determined the current DB2 database manager instance is db2inst1. The cluster configuration that follows will apply to this instance. db2haicu is collecting information on your current setup. This step may take some time as db2haicu will need to activate all databases for the instance to discover all paths ... When you use db2haicu to configure your clustered environment, you create cluster domains. For more information, see the topic 'Creating a cluster domain with db2haicu' in the DB2 Information Center. db2haicu is searching the current machine for an existing active cluster domain ... db2haicu did not find a cluster domain on this machine. db2haicu will now query the system for information about cluster nodes to create a new cluster domain ... db2haicu did not find a cluster domain on this machine. To continue configuring your clustered environment for high availability, you must create a cluster domain; otherwise, db2haicu will exit.
创建一个域并继续?[1]
1. 是
2. 否
在随后的初始提示下键入 1 并按下 Enter 。
输入域的惟一名称和域的节点数量。本例为我们想要创建的域使用名称 HADR_TSA_DOMAIN。
为新的域创建一个惟一名称:
HADR_TSA_DOMAIN
节点必须立刻添加到新域中。
我们的域中有两个节点:linuxnode01 是主要节点,linuxnode02 是备用节点。在随后的提示符下输入节点名称。
HADR_TSA_DOMAIN 域将包含多少个集群节点?
2
输入机器的主机名,以便将它添加到域:linuxnode01
输入机器的主机名,以便将它添加到域:linuxnode02
db2haicu 现在可以创建包含您指定的两台机器的一个新域。如果您选择立刻创建一个域,那么 db2haicu 将退出。
立刻创建域?[1]
1. 是
2. 否
Creating domain 'HADR_TSA_DOMAIN' in the cluster
Creating domain 'HADR_TSA_DOMAIN' in the cluster was successful.
可以在输出中看到,该实用程序指示了该域是否成功创建。
创建域之后,需要为集群域配置一个网络法定地址。 网络法定地址 是一个可从主要和备用节点 ping 的 IP 地址。在发生站点故障时,该配额决定了哪个节点被用作活动节点,哪个节点处于离线状态。在选择网络法定地址时,请确保该 IP 始终保持有效。DNS 服务器 IP 始终是网络法定地址的不错选择。
创建域后,db2haicu 会提示您输入法定设备的配置值
现在可为该域配置一个法定设备。有关更多信息,请参阅 DB2 信息中心中的 “法定设备”。如果没有为域配置法定设备,那么在集群中的部分机器失去连接时,需要一个人工操作员来手动干预。
为名为 HADR_TSA_DOMAIN 的域配置一个法定设备?[1]
1. 是
2. 否
选择一个法定设备。网络法定地址是惟一的选择,所以键入 1
并按下 Enter 。
以下是受支持的法定设备类型的列表:
1. 网络法定设备
输入对应于要使用的法定设备类型的数字: 1
在随后的提示符下,指定法定设备的网络地址:
指定 9.26.96.1
Configuring quorum device for domain 'HADR_TSA_DOMAIN'
Configuring quorum device for domain 'HADR_TSA_DOMAIN' was successful
。
输出显示了法定设备是否已成功配置。
在定义法定设备后,需要定义该设置中使用的网络。本例使用了两个网络:一个公用网和一个私有网,客户端应用程序使用公用网通过虚拟 IP 地址来连接数据库;HADR 复制在私有网上执行。在这部分设置中,db2haicu 自动发现任何网络接口卡 (NIC) 并提示您为它们创建网络。
为这些网络接口卡创建网络?[1]
1. 是
2. 否
将每个节点上的每个网络定义为公共或私有。如下面的示例输出中所示,我们希望将两个节点的 eth0 接口都添加到公用网中,将 eth1 接口添加到私有网中。
输入群集节点 linuxnode01 上的网络接口卡 'eth0' 的网络名称
1. 为网络接口卡创建一个新的公用网。
2. 为网络接口卡创建一个新的私有网。
您确定想要将集群节点 linuxnode01 上的网络接口卡 eth0 添加到网络 db2_public_network_0?[1]
1. 是
2. 否
Adding network interface card 'eth0' on cluster node 'linuxnode01' to the network
'db2_public_network_0' ...
Adding network interface card 'eth0' on cluster node 'linuxnode01' to the network
'db2_public_network_0' was successful.
输入集群节点 linuxnode02 上的网络接口卡 'eth0' 的网络的名称。
1. db2_public_network_0
2. 为这个网络接口卡创建一个新的公用网。
3. 为这个网络接口卡创建一个新的私有网。
您确定想要将集群节点 'linuxnode02' 上的网络接口卡 'eth0' 添加到网络 db2_public_network_0?[1]
1. 是
2. 否
Adding network interface card 'eth0' on cluster node 'linuxnode02' to the network
'db2_public_network_0' ...
Adding network interface card 'eth0' on cluster node 'linuxnode02' to the network
'db2_public_network_0' was successful.
输入集群节点 'linuxnode02' 上的网络接口卡 'eth1' 的网络的名称
1. db2_public_network_0
2. 为这个网络接口卡创建 一个新的公用网。
3. 为这个网络接口卡创建 一个新的私有网。
选择 3。
您确定想将集群节点 'linuxnode02' 上的网络接口卡 'eth1' 添加到网络 'db2_private_network_0'?[1] [1]
1. 是
2. 否
Adding network interface card 'eth1' on cluster node 'linuxnode02' to the network
'db2_private_network_0' ...
Adding network interface card 'eth1' on cluster node 'linuxnode02' to the network
'db2_private_network_0' was successful.
输入集群节点 linuxnode01 上的网络接口卡 'eth1' 的网络名称
1. db2_private_network_0
2. db2_public_network_0
3. 为这个网络接口卡创建 一个新的公用网。
4. 为这个网络接口卡创建 一个新的私有网。
您确定想要添加集群上的网络接口卡 'eth1'
将节点 'linuxnode01' 添加到网络 'db2_private_network_0'?[1] [1]
1. 是
2. 否
将集群节点 'linuxnode01' 上的网络接口卡 'eth1' 添加到网络
'db2_private_network_0'...
Adding network interface card 'eth1' on cluster node 'linuxnode01' to the network
'db2_private_network_0' was successful.
此刻,db2haicu 提示您选择用于配置高可用性的集群管理器,可以选择 Tivoli System Automation for Multiplatforms 或指定一个不同的供应商。示例为此配置使用了 TSA(Tivoli System Automation for Multiplatforms 的一个旧有名称),db2haicu 添加运行备用 HADR 数据库的数据库分区实例。
清单 7. 设置集群管理器
The cluster manager name configuration parameter (high-availability configuration parameter) is not set. For more information, see the topic "cluster_mgr - Cluster manager name configuration parameter" in the DB2 Information Center. Do you want to set the high-availability configuration parameter? 以下是适用于高可用性配置参数的有效设置: 1. TSA 2. Vendor 为可可用性配置参数输入一个值:[1] 1 Setting a high-availability configuration parameter for instance 'db2inst1' to 'TSA'. Adding DB2 database partition '0' to the cluster ... Adding DB2 database partition '0' to the cluster was successful.
将 DB2 备用实例添加到集群域后,db2haicu 会提示您确认实例中每个数据库的 HADR 自动化情况。在本示例中,db2haicu 提示为数据库 HADRDB1、HADRDB2 和 HADRDB3 启用故障转移。
清单 8. 为数据库配置自动 HADR 故障转移
Do you want to validate and automate HADR failover for the HADR database 'HADRDB1'? [1] 1. Yes 2.No 1 Adding HADR database HADRDB1 to the domain … The HADR database 'HADRDB1' has been determined to be valid for high availability. However, the database cannot be added to the cluster from this node because db2haicu detected this node is the standby for the HADR database 'HADRDB1'. Run db2haicu on the primary for the HADR database 'HADRDB1' to configure the database for automated failover. Do you want to validate and automate HADR failover for the HADR database 'HADRDB2'? [1] 1. Yes 2.No 1 Adding HADR database 'HADRDB2' to the domain … The HADR database 'HADRDB2' has been determined to be valid for high availability. However, the database cannot be added to the cluster from this node because db2haicu detected this node is the standby for the HADR database 'HADRDB2'. Run db2haicu on the primary for HADR database 'HADRDB2' to configure the database for automated failover. Do you want to validate and automate HADR failover for the HADR database 'HADRDB3'? [1] 1. Yes 2.No 1 Adding HADR database 'HADRDB3' to the domain … The HADR database 'HADRDB3' has been determined to be valid for high availability. However, the database cannot be added to the cluster from this node because db2haicu detected this node is the standby for the HADR database 'HADRDB3'. Run db2haicu on the primary for HADR database 'HADRDB3' to configure the database for automated failover. All cluster configurations have been completed successfully, db2haicu exiting …
配置备用实例后,需要从主要 DB2 实例运行 db2haicu。
清单 9. 主要实例上的 db2haicu 输出
$db2haicu Welcome to the DB2 High Availability Instance Configuration Utility (db2haicu). You can find detailed diagnostic information in the DB2 server diagnostic log file called db2diag.log. Also, you can use the utility called db2pd to query the status of the cluster domains you create. For more information about configuring your clustered environment using db2haicu, see the topic called 'DB2 High Availability Instance Configuration Utility (db2haicu)' in the DB2 Information Center. db2haicu determined the current DB2 database manager instance is 'db2inst1'. The cluster configuration that follows will apply to this instance. db2haicu is collecting information on your current setup. This step may take some time as db2haicu will need to activate all databases for the instance to discover all paths ... When you use db2haicu to configure your clustered environment, you create cluster domains. For more information, see the topic 'Creating a cluster domain with db2haicu' in the DB2 Information Center. db2haicu is searching the current machine for an existing active cluster domain ... db2haicu found a cluster domain called HADR_TSA_DOMAIN on this machine. The cluster configuration that follows will apply to this domain.
类似于备用实例上发生的情况,该工具提示您选择集群管理器。我们使用的是 TSA。该工具然后检测在该实例下创建的所有数据库,询问是否为数据库启用 HADR 故障转移。在这里,您对所有 3 个数据库(HADRDB1、HADRDB2 和 HADRDB3)启用 HADR 故障转移。将 HADR 数据库添加到集群后,db2haicu 会提示您为每个 HADR 数据库添加一个虚拟 IP 地址:
检索实例 ‘db2inst1’ 的高可用性配置参数
集群管理器名称配置参数(高可用性配置参数)未设置。有关的更多信息,请参阅 DB2 信息中心中的主题 “cluster_mgr — 集群管理器名称配置参数”。您想要设置高可用性配置参数吗?
以下是适用于高可用性配置参数的有效设置:
1. TSA
2. Vendor
为高可用性配置参数输入一个值:[1]
将实例 'db2inst1' 的一个高可用性配置参数设置为 'TSA'。
Adding DB2 database partition '0' to the cluster
Adding DB2 database partition '0' to the cluster was successful.
您是否想验证并自动化 HADR 数据库 'HADRDB1' 的 HADR 故障转移?[1]
1. 是
2. 否
Adding HADR database 'HADRDB1' to the domain
Adding HADR database 'HADRDB1' to the domain was successful.
您是否想为 HADR 数据库 'HADRDB1' 配置一个虚拟 IP 地址?[1]
1. 是
2. 否
输入虚拟 IP 地址:
9.26.98.232
输入虚拟 IP 地址 '9.26.98.232' 的子网掩码:[255.255.255.0]
255.255.252.0
选择虚拟 IP '9.26.98.232' 的地址:
1. db2_private_network_0
2. db2_public_network_0
选择 2。
Adding virtual IP address '9.26.98.232' to the domain
Adding virtual IP address '9.26.98.232' to the domain was successful.
您是否想验证和自动化 HADR 数据库 'HADRDB2' 的 HADR 故障转移?[1]
1. 是
2. 否
Adding HADR database 'HADRDB2' to the domain
Adding HADR database 'HADRDB2' to the domain was successful.
您是否想要为 HADR 数据库 'HADRDB2' 配置一个虚拟 IP 地址?[1]
1. 是
2. 否
输入虚拟 IP 地址:
9.26.98.181
输入虚拟 IP 地址 '9.26.98.181' 的子网掩码: [255.255.255.0]
255.255.252.0
选择虚拟 IP '9.26.98.181' 的网络:
1. db2_private_network_0
2. db2_public_network_0
选择 2。
Adding virtual IP address '9.26.98.181' to the domain
Adding virtual IP address '9.26.98.181' to the domain was successful.
您是否想要验证和自动化 HADR 数据库 'HADRDB3' 的 HADR 故障转移?[1]
1. 是
2. 否
Adding HADR database 'HADRDB3' to the domain
Adding HADR database 'HADRDB3' to the domain was successful.
您是否想要为 HADR 数据库 'HADRDB3' 配置一个虚拟 IP 地址?[1]
1. 是
2. 否
输入虚拟 IP 地址:
9.26.97.208
输入虚拟 IP 地址 '9.26.97.208' 的子网掩码:[255.255.255.0]
255.255.252.0
选择虚拟 IP '9.26.97.208' 的网络:
1. db2_private_network_0
2. db2_public_network_0
选择 2。
Adding virtual IP address '9.26.97.208' to the domain
Adding virtual IP address '9.26.97.208' to the domain was successful.
All cluster configurations have been completed successfully. db2haicu exiting
在设置集群后,可以采用以下两种方法之一来验证集群设置:
lssam
命令。 清单 10. 以根用户身份执行 lssam
的输出
Online IBM.ResourceGroup:db2_db2inst1_db2inst1_HADRDB1-rg Nominal=Online |- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB1-rs |- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB1-rs:linuxnode01 '- Offline IBM.Application:db2_db2inst1_db2inst1_HADRDB1-rs:linuxnode02 '- Online IBM.ServiceIP:db2ip_9_26_98_232-rs |- Online IBM.ServiceIP:db2ip_9_26_98_232-rs:linuxnode01 '- Offline IBM.ServiceIP:db2ip_9_26_98_232-rs:linuxnode02 Online IBM.ResourceGroup:db2_db2inst1_db2inst1_HADRDB2-rg Nominal=Online |- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB2-rs |- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB2-rs:linuxnode01 '- Offline IBM.Application:db2_db2inst1_db2inst1_HADRDB2-rs:linuxnode02 '- Online IBM.ServiceIP:db2ip_9_26_98_181-rs |- Online IBM.ServiceIP:db2ip_9_26_98_181-rs:linuxnode01 '- Offline IBM.ServiceIP:db2ip_9_26_98_181-rs:linuxnode02 Online IBM.ResourceGroup:db2_db2inst1_db2inst1_HADRDB3-rg Nominal=Online |- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB3-rs |- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB3-rs:linuxnode01 '- Offline IBM.Application:db2_db2inst1_db2inst1_HADRDB3-rs:linuxnode02 '- Online IBM.ServiceIP:db2ip_9_26_97_208-rs |- Online IBM.ServiceIP:db2ip_9_26_97_208-rs:linuxnode01 '- Offline IBM.ServiceIP:db2ip_9_26_97_208-rs:linuxnode02 Online IBM.ResourceGroup:db2_db2inst1_linuxnode02_0-rg Nominal=Online '- Online IBM.Application:db2_db2inst1_linuxnode02_0-rs '- Online IBM.Application:db2_db2inst1_linuxnode02_0-rs:linuxnode02 Online IBM.Equivalency:db2_private_network_0 |- Online IBM.NetworkInterface:eth1:linuxnode02 '- Online IBM.NetworkInterface:eth1:linuxnode01 Online IBM.Equivalency:db2_public_network_0 |- Online IBM.NetworkInterface:eth0:linuxnode01 '- Online IBM.NetworkInterface:eth0:linuxnode02 Online IBM.Equivalency:db2_db2inst1_db2inst1_HADRDB1-rg_group-equ |- Online IBM.PeerNode:linuxnode01:linuxnode01 '- Online IBM.PeerNode:linuxnode02:linuxnode02 Online IBM.Equivalency:db2_db2inst1_db2inst1_HADRDB2-rg_group-equ |- Online IBM.PeerNode:linuxnode01:linuxnode01 '- Online IBM.PeerNode:linuxnode02:linuxnode02 Online IBM.Equivalency:db2_db2inst1_db2inst1_HADRDB3-rg_group-equ |- Online IBM.PeerNode:linuxnode01:linuxnode01 '- Online IBM.PeerNode:linuxnode02:linuxnode02 Online IBM.Equivalency:db2_db2inst1_linuxnode02_0-rg_group-equ '- Online IBM.PeerNode:linuxnode02:linuxnode02
lssam
输出显示了集群中的实例、数据库和网络的状态。可以在输出中看到为每个 HADR 数据库(HADRDB1、HADRDB2 和 HADRDB3)创建的资源组。为每个数据库创建的虚拟 IP 地址显示为资源组 Service IP
。对于所有 3 个数据据库,该服务 IP 在主要实例 linuxnode01 中保持 Online
,在备用实例中为 Offline
。在故障转移期间,Tivoli System Automation for Multiplatforms 将该 IP 地址分配给备用实例,它在备用实例中变成 Online,在主要实例中变成 Offline。
db2pd –ha
命令,以获取资源的状态。 清单 11. db2pd –ha
输出
DB2 HA Status Instance Information: Instance Name = db2inst1 Number Of Domains = 1 Number Of RGs for instance = 3 Domain Information: Domain Name = HADR_TSA_DOMAIN Cluster Version = 3.1.2.2 Cluster State = Online Number of nodes = 2 Node Information: Node Name State --------------------- ------------------- linuxnode02 Online linuxnode01 Online Resource Group Information: Resource Group Name = db2_db2inst1_db2inst1_HADRDB3-rg Resource Group LockState = Unlocked Resource Group OpState = Online Resource Group Nominal OpState = Online Number of Group Resources = 2 Number of Allowed Nodes = 2 Allowed Nodes ------------- linuxnode01 linuxnode02 Member Resource Information: Resource Name = db2ip_9_26_97_208-rs Resource State = Online Resource Type = IP Resource Name = db2_db2inst1_db2inst1_HADRDB3-rs Resource State = Online Resource Type = HADR HADR Primary Instance = db2inst1 HADR Secondary Instance = db2inst1 HADR DB Name = HADRDB3 HADR Primary Node = linuxnode01 HADR Secondary Node = linuxnode02 Resource Group Name = db2_db2inst1_db2inst1_HADRDB2-rg Resource Group LockState = Unlocked Resource Group OpState = Online Resource Group Nominal OpState = Online Number of Group Resources = 2 Number of Allowed Nodes = 2 Allowed Nodes ------------- linuxnode01 linuxnode02
在成功完成集群配置后,所有资源状态都应为 Online
,锁状态应为 Unlocked
。
db2haicu 实用程序也可在 XML 模式下运行,其中该工具需要的所有输入都需要作为 XML 文件传递。清单 12 显示了我们的示例中使用的拓扑结构的 XML 文件。
清单 12. 示例 XML 文件
<DB2Cluster xsi:noNamespaceSchemaLocation="db2ha.xsd" clusterManagerName="TSA" version="1.0"> <ClusterDomain domainName="HADR_TSA_DOMAIN"> <Quorum quorumDeviceProtocol="network" quorumDeviceName="9.26.96.1"/> <PhysicalNetwork physicalNetworkName="db2_public_network_0" physicalNetworkProtocol="ip"> <Interface interfaceName="eth0" clusterNodeName="linuxnode01"> <IPAddress baseAddress="9.26.97.215" subnetMask="255.255.252.0" networkName="db2_public_network_0"/> </Interface> <Interface interfaceName="eth0" clusterNodeName="linuxnode02"> <IPAddress baseAddress="9.26.96.102" subnetMask="255.255.252.0" networkName="db2_public_network_0"/> </Interface> </PhysicalNetwork> <PhysicalNetwork physicalNetworkName="db2_private_network_0" physicalNetworkProtocol="ip"> <Interface interfaceName="eth1" clusterNodeName="linuxnode01"> <IPAddress baseAddress="198.72.81.88" subnetMask="255.255.255.0" networkName="db2_private_network_0"/> </Interface> <Interface interfaceName="eth1" clusterNodeName="linuxnode02"> <IPAddress baseAddress="198.72.81.89" subnetMask="255.255.255.0" networkName="db2_private_network_0"/> </Interface> </PhysicalNetwork> <ClusterNode clusterNodeName="linuxnode01"/> <ClusterNode clusterNodeName="linuxnode02"/> </ClusterDomain> <FailoverPolicy> <HADRFailover></HADRFailover> </FailoverPolicy> <DB2PartitionSet> <DB2Partition dbpartitionnum="0" instanceName="db2inst1"> </DB2Partition> </DB2PartitionSet> <HADRDBSet> <HADRDB databaseName="HADRDB1" localInstance="db2inst1" remoteInstance="db2inst1" localHost="linuxnode01" remoteHost="linuxnode02" /> <VirtualIPAddress baseAddress="9.26.98.232" subnetMask="255.255.252.0" networkName="db2_public_network_0"/> </HADRDBSet> <HADRDBSet> <HADRDB databaseName="HADRDB2" localInstance="db2inst1" remoteInstance="db2inst1" localHost="linuxnode01" remoteHost="linuxnode02" /> <VirtualIPAddress baseAddress="9.26.98.181" subnetMask="255.255.252.0" networkName="db2_public_network_0"/> </HADRDBSet> <HADRDBSet> <HADRDB databaseName="HADRDB3" localInstance="db2inst1" remoteInstance="db2inst1" localHost="linuxnode01" remoteHost="linuxnode02" /> <VirtualIPAddress baseAddress="9.26.97.208" subnetMask="255.255.252.0" networkName="db2_public_network_0"/> </HADRDBSet>
在该 XML 文件中:
<ClusterDomain>
元素包含集群级信息,比如法定地址、节点信息和域名。 <ClusterDomain>
元素的 <PhysicalNetwork>
子元素包含公用网、私有网和使用的 NIC 的所有网络相关信息。 <FailoverPolicy>
元素指定了要供集群管理器使用的故障转移策略。 <DB2PartitionSet>
元素包含实例名称和分区号等实例信息。 <HADRDBSet>
元素包含 HADR 数据库信息。它包含数据库名称、主要和备用实例名称、主要和备用节点名称,以及与数据库关联的虚拟 IP 地址。 要使用 db2haicu XML 模式配置自动故障转移,请执行以下操作:
db2haicu -f < XML file name >
命令。 db2haicu
命令使用 XML 文件在备用端执行所有必要的配置。XML 文件或配置中发生错误时,db2haicu 将退出并提供一个非 0 错误代码。在备用实例上使用 db2haicu 的实例输出如下所示。
清单 13. 在备用实例上使用 XML 文件的 db2haicu 的示例输出
$ db2haicu -f db2ha_sample_HADR.xml Welcome to the DB2 High Availability Instance Configuration Utility (db2haicu). You can find detailed diagnostic information in the DB2 server diagnostic log file called db2diag.log. Also, you can use the utility called db2pd to query the status of the cluster domains you create. For more information about configuring your clustered environment using db2haicu, see the topic called 'DB2 High Availability Instance Configuration Utility (db2haicu)' in the DB2 Information Center. db2haicu determined the current DB2 database manager instance is 'db2inst1'. The cluster configuration that follows will apply to this instance. db2haicu is collecting information on your current setup. This step may take some time as db2haicu will need to activate all databases for the instance to discover all paths … Creating domain 'HADR_TSA_DOMAIN' in the cluster … Creating domain 'HADR_TSA_DOMAIN' in the cluster was successful. Configuring quorum device for domain 'HADR_TSA_DOMAIN' ... Configuring quorum device for domain 'HADR_TSA_DOMAIN' was successful. Adding network interface card 'eth0' on cluster node 'linuxnode01' to the network 'db2_public_network_0' ... Adding network interface card 'eth0' on cluster node 'linuxnode01' to the network 'db2_public_network_0' was successful. Adding network interface card 'eth0' on cluster node 'linuxnode02' to the network 'db2_public_network_0' ... Adding network interface card 'eth0' on cluster node 'linuxnode02' to the network 'db2_public_network_0' was successful. Adding network interface card 'eth1' on cluster node 'linuxnode01' to the network 'db2_private_network_0' ... Adding network interface card 'eth1' on cluster node 'linuxnode01' to the network 'db2_private_network_0' was successful. Adding network interface card 'eth1' on cluster node 'linuxnode02' to the network 'db2_private_network_0' ... Adding network interface card 'eth1' on cluster node 'linuxnode02' to the network 'db2_private_network_0' was successful. Adding DB2 database partition '0' to the cluster ... Adding DB2 database partition '0' to the cluster was successful. HADR database 'HADRDB1' has been determined to be valid for high availability. However, the database cannot be added to the cluster from this node because db2haicu detected this node is the standby for HADR database 'HADRDB1'. Run db2haicu on the primary for HADR database 'HADRDB1' to configure the database for automated failover. HADR database 'HADRDB2' has been determined to be valid for high availability. However, the database cannot be added to the cluster from this node because db2haicu detected this node is the standby for HADR database 'HADRDB2'. Run db2haicu on the primary for HADR database 'HADRDB2' to configure the database for automated failover. HADR database 'HADRDB3' has been determined to be valid for high availability. However, the database cannot be added to the cluster from this node because db2haicu detected this node is the standby for HADR database 'HADRDB3'. Run db2haicu on the primary for HADR database 'HADRDB3' to configure the database for automated failover. All cluster configurations have been completed successfully. db2haicu exiting
db2haicu -f <XML file name>
命令。
db2haicu 现在配置主要实例,在遇到错误时,退出并提供一个非 0 错误代码。在主要实例上使用 db2haicu 的实例输出如下所示。
清单 14. 在主要实例上使用 XML 文件的 db2haicu 的示例输出
$db2haicu -f db2ha_sample_HADR.xml Welcome to the DB2 High Availability Instance Configuration Utility (db2haicu). You can find detailed diagnostic information in the DB2 server diagnostic log file called db2diag.log. Also, you can use the utility called db2pd to query the status of the cluster domains you create. For more information about configuring your clustered environment using db2haicu, see the topic called 'DB2 High Availability Instance Configuration Utility (db2haicu)' in the DB2 Information Center. db2haicu determined the current DB2 database manager instance is 'db2inst1'. The cluster configuration that follows will apply to this instance. db2haicu is collecting information on your current setup. This step may take some time as db2haicu will need to activate all databases for the instance to discover all paths ... Configuring quorum device for domain 'HADR_TSA_DOMAIN' ... Configuring quorum device for domain 'HADR_TSA_DOMAIN' was successful. Network adapter 'eth0' on node 'linuxnode01' is already defined in network 'db2_public_network_0' and cannot be added to another network until it is removed from its current network. Network adapter 'eth0' on node 'linuxnode02' is already defined in network 'db2_public_network_0' and cannot be added to another network until it is removed from its current network. Network adapter 'eth1' on node 'linuxnode01' is already defined in network 'db2_private_network_0' and cannot be added to another network until it is removed from its current network. Network adapter 'eth1' on node 'linuxnode02' is already defined in network 'db2_private_network_0' and cannot be added to another network until it is removed from its current network. Adding DB2 database partition '0' to the cluster ... Adding DB2 database partition '0' to the cluster was successful. Adding HADR database 'HADRDB1' to the domain ... Adding HADR database 'HADRDB1' to the domain was successful. Adding HADR database 'HADRDB2' to the domain ... Adding HADR database 'HADRDB2' to the domain was successful. Adding HADR database 'HADRDB3' to the domain ... Adding HADR database 'HADRDB3' to the domain was successful. All cluster configurations have been completed successfully. db2haicu exiting ...
与交互式模式一样,可以使用 lssam
命令或 db2pd
命令和 -ha
选项对集群状态执行配置后验证。
回页首
本节讨论了主要或备用实例宕机期间的集群行为,以及使用温和的接管功能执行角色切换活动时的集群行为。这些示例仍采用图 1中所示的拓扑结构。
从备用节点 linuxnode02 对任何数据库执行 温和接管 时,该备用节点会承担主要节点的角色。在成功完成 takeover
命令后,Tivoli System Automation for Multiplatforms 将此数据库的虚拟 IP 地址分配给新主要节点。
TAKEOVER HADR
命令,如清单 15 所示。 清单 15. TAKEOVER HADR
DB2 TAKEOVER HADR ON DB HADRDB1 DB20000I The TAKEOVER HADR ON DATABASE command completed successfully.
lssam
命令。清单 16 显示了接管后的输出。 清单 16. 接管后的 lssam
输出
Online IBM.ResourceGroup:db2_db2inst1_db2inst1_HADRDB1-rg Nominal=Online |- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB1-rs |- Offline IBM.Application:db2_db2inst1_db2inst1_HADRDB1-rs:linuxnode01 '- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB1-rs:linuxnode02 '- Online IBM.ServiceIP:db2ip_9_26_98_232-rs |- Offline IBM.ServiceIP:db2ip_9_26_98_232-rs:linuxnode01 '- Online IBM.ServiceIP:db2ip_9_26_98_232-rs:linuxnode02 Online IBM.ResourceGroup:db2_db2inst1_db2inst1_HADRDB2-rg Nominal=Online |- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB2-rs |- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB2-rs:linuxnode01 '- Offline IBM.Application:db2_db2inst1_db2inst1_HADRDB2-rs:linuxnode02 '- Online IBM.ServiceIP:db2ip_9_26_98_181-rs |- Online IBM.ServiceIP:db2ip_9_26_98_181-rs:linuxnode01 '- Offline IBM.ServiceIP:db2ip_9_26_98_181-rs:linuxnode02 Online IBM.ResourceGroup:db2_db2inst1_db2inst1_HADRDB3-rg Nominal=Online |- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB3-rs |- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB3-rs:linuxnode01 '- Offline IBM.Application:db2_db2inst1_db2inst1_HADRDB3-rs:linuxnode02 '- Online IBM.ServiceIP:db2ip_9_26_97_208-rs |- Online IBM.ServiceIP:db2ip_9_26_97_208-rs:linuxnode01 '- Offline IBM.ServiceIP:db2ip_9_26_97_208-rs:linuxnode02
lssam
输出显示,Tivoli System Automation for Multiplatforms 已将数据库 HADRDB1 的资源组转移到新的主要节点:linuxnode02。
数据库 HADRDB1 的虚拟 IP 地址 9.26.98.232 现在在节点 linuxnode02 已在线。任何连接到旧主要节点 linuxnode01 上的数据库 HADRDB1 的客户端应用程序,现在将使用这个虚拟 IP 地址连接到新主要节点 linuxnode02。
其他数据库 HADRDB2 和 HADRDB3 的数据库资源继续位于节点 linuxnode01 上,因为仅对 HADRDB1 数据库发出了温和接管命令。
在主要或备用实例被以外终止时,Tivoli System Automation for Multiplatforms 会尝试重新启动该实例并将集群恢复正常状态。要模拟此场景,请执行以下操作:
db2_kill
命令。 lssam
命令。从输出结果中可以看出,所有 3 个数据库的 HADR 资源和主要实例上的 DB2 实例资源会的状态已从 Online
更改为 Pending Online
。 清单 17. 在主要节点上发出 db2_kill 后的 lssam
输出。
Online IBM.ResourceGroup:db2_db2inst1_linuxnode01_0-rg Nominal=Online '- Online IBM.Application:db2_db2inst1_linuxnode01_0-rs '- Online IBM.Application:db2_db2inst1_linuxnode01_0-rs:linuxnode01 Pending online IBM.ResourceGroup:db2_db2inst1_db2inst1_HADRDB1-rg Nominal=Online |- Pending online IBM.Application:db2_db2inst1_db2inst1_HADRDB1-rs |- Pending online IBM.Application:db2_db2inst1_db2inst1_HADRDB1-rs:linuxnode01 '- Offline IBM.Application:db2_db2inst1_db2inst1_HADRDB1-rs:linuxnode02 '- Online IBM.ServiceIP:db2ip_9_26_98_232-rs |- Online IBM.ServiceIP:db2ip_9_26_98_232-rs:linuxnode01 '- Offline IBM.ServiceIP:db2ip_9_26_98_232-rs:linuxnode02 Pending online IBM.ResourceGroup:db2_db2inst1_db2inst1_HADRDB2-rg Nominal=Online |- Pending online IBM.Application:db2_db2inst1_db2inst1_HADRDB2-rs |- Pending online IBM.Application:db2_db2inst1_db2inst1_HADRDB2-rs:linuxnode01 '- Offline IBM.Application:db2_db2inst1_db2inst1_HADRDB2-rs:linuxnode02 '- Online IBM.ServiceIP:db2ip_9_26_98_181-rs |- Online IBM.ServiceIP:db2ip_9_26_98_181-rs:linuxnode01 '- Offline IBM.ServiceIP:db2ip_9_26_98_181-rs:linuxnode02 Pending online IBM.ResourceGroup:db2_db2inst1_db2inst1_HADRDB3-rg Nominal=Online |- Pending online IBM.Application:db2_db2inst1_db2inst1_HADRDB3-rs |- Pending online IBM.Application:db2_db2inst1_db2inst1_HADRDB3-rs:linuxnode01 '- Offline IBM.Application:db2_db2inst1_db2inst1_HADRDB3-rs:linuxnode02 '- Online IBM.ServiceIP:db2ip_9_26_97_208-rs |- Online IBM.ServiceIP:db2ip_9_26_97_208-rs:linuxnode01 '- Offline IBM.ServiceIP:db2ip_9_26_97_208-rs:linuxnode02
lssam
命令来监视重新启动的进度。集群管理器重新启动实例后, Pending online
状态将更改回 Online
。 lssam
输出类似于下面这个示例。 清单 18. 资源上线后的 lssam
输出
Online IBM.ResourceGroup:db2_db2inst1_linuxnode01_0-rg Nominal=Online '- Online IBM.Application:db2_db2inst1_linuxnode01_0-rs '- Online IBM.Application:db2_db2inst1_linuxnode01_0-rs:linuxnode01 Online IBM.ResourceGroup:db2_db2inst1_db2inst1_HADRDB1-rg Nominal=Online |- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB1-rs |- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB1-rs:linuxnode01 '- Offline IBM.Application:db2_db2inst1_db2inst1_HADRDB1-rs:linuxnode02 '- Online IBM.ServiceIP:db2ip_9_26_98_232-rs |- Online IBM.ServiceIP:db2ip_9_26_98_232-rs:linuxnode01 '- Offline IBM.ServiceIP:db2ip_9_26_98_232-rs:linuxnode02 Online IBM.ResourceGroup:db2_db2inst1_db2inst1_HADRDB2-rg Nominal=Online |- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB2-rs |- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB2-rs:linuxnode01 '- Offline IBM.Application:db2_db2inst1_db2inst1_HADRDB2-rs:linuxnode02 '- Online IBM.ServiceIP:db2ip_9_26_98_181-rs |- Online IBM.ServiceIP:db2ip_9_26_98_181-rs:linuxnode01 '- Offline IBM.ServiceIP:db2ip_9_26_98_181-rs:linuxnode02 Online IBM.ResourceGroup:db2_db2inst1_db2inst1_HADRDB3-rg Nominal=Online |- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB3-rs |- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB3-rs:linuxnode01 '- Offline IBM.Application:db2_db2inst1_db2inst1_HADRDB3-rs:linuxnode02 '- Online IBM.ServiceIP:db2ip_9_26_97_208-rs |- Online IBM.ServiceIP:db2ip_9_26_97_208-rs:linuxnode01 '- Offline IBM.ServiceIP:db2ip_9_26_97_208-rs:linuxnode02
在此场景中,与您在备用实例上发出 db2_kill
命令的行为类似。备用实例上的 HADR 和 DB2 实例资源的状态被更改为 Pending online
,在该实例重新启动后,它会返回到 Online
状态。
在某些情况下,比如在系统崩溃时,同一个机器内重新启动故障实例的尝试会失败,而且 Tivoli System Automation for Multiplatforms 会将 HADR 资源故障转移到备用机器。
要模拟主要机器故障:
lssam
命令。在下面的示例输出中,与主要节点有关联的所有资源组都处于 Failed Offline 状态。
清单 19. 拔出电源线后备用节点上的 lssam
输出
Failed offline IBM.ResourceGroup:db2_db2inst1_linuxnode01_0-rg Control=MemberInProblemState Nominal=Online '- Failed offline IBM.Application:db2_db2inst1_linuxnode01_0-rs Control=MemberInProblemState '- Failed offline IBM.Application:db2_db2inst1_linuxnode01_0-rs:linuxnode01 Node=Offline Pending online IBM.ResourceGroup:db2_db2inst1_db2inst1_HADRDB1-rg Control=MemberInProblemState Nominal=Online |- Pending online IBM.Application:db2_db2inst1_db2inst1_HADRDB1-rs Control=MemberInProblemState |- Failed offline IBM.Application:db2_db2inst1_db2inst1_HADRDB1-rs:linuxnode01 Node=Offline '- Pending online IBM.Application:db2_db2inst1_db2inst1_HADRDB1-rs:linuxnode02 '- Online IBM.ServiceIP:db2ip_9_26_98_232-rs Control=MemberInProblemState |- Failed offline IBM.ServiceIP:db2ip_9_26_98_232-rs:linuxnode01 Node=Offline '- Online IBM.ServiceIP:db2ip_9_26_98_232-rs:linuxnode02 Pending online IBM.ResourceGroup:db2_db2inst1_db2inst1_HADRDB2-rg Control=MemberInProblemState Nominal=Online |- Pending online IBM.Application:db2_db2inst1_db2inst1_HADRDB2-rs Control=MemberInProblemState |- Failed offline IBM.Application:db2_db2inst1_db2inst1_HADRDB2-rs:linuxnode01 Node=Offline '- Pending online IBM.Application:db2_db2inst1_db2inst1_HADRDB2-rs:linuxnode02 '- Online IBM.ServiceIP:db2ip_9_26_98_181-rs Control=MemberInProblemState |- Failed offline IBM.ServiceIP:db2ip_9_26_98_181-rs:linuxnode01 Node=Offline '- Online IBM.ServiceIP:db2ip_9_26_98_181-rs:linuxnode02 Pending online IBM.ResourceGroup:db2_db2inst1_db2inst1_HADRDB3-rg Control=MemberInProblemState Nominal=Online |- Pending online IBM.Application:db2_db2inst1_db2inst1_HADRDB3-rs Control=MemberInProblemState |- Failed offline IBM.Application:db2_db2inst1_db2inst1_HADRDB3-rs:linuxnode01 Node=Offline '- Pending online IBM.Application:db2_db2inst1_db2inst1_HADRDB3-rs:linuxnode02 '- Online IBM.ServiceIP:db2ip_9_26_97_208-rs Control=MemberInProblemState |- Failed offline IBM.ServiceIP:db2ip_9_26_97_208-rs:linuxnode01 '- Online IBM.ServiceIP:db2ip_9_26_97_208-rs:linuxnode02
在此场景中,客户端无法连接到数据库,集群管理器对 HADR 资源组发起故障转移。
备用机器 linuxnode02 发出 ping 并获取网络法定地址后,Tivoli System Automation for Multiplatforms 将每个 HADR 数据库(HADRDB1、HADRDB2 和 HADRDB3)的虚拟 IP 地址分配给备用机器上的 eth0 NIC。然后,Tivoli System Automation for Multiplatforms 发起一次强制接管 ( TAKEOVER HADR ON DB HADRDB1 BY FORCE PEER WINDOW ONLY
),导致备用机器承担主要机器的角色。
lssam
命令。 清单 20. 在主要节点上恢复电源后的 lssam
输出
Online IBM.ResourceGroup:db2_db2inst1_linuxnode01_0-rg Nominal=Online '- Online IBM.Application:db2_db2inst1_linuxnode01_0-rs '- Online IBM.Application:db2_db2inst1_linuxnode01_0-rs:linuxnode01 Online IBM.ResourceGroup:db2_db2inst1_db2inst1_HADRDB1-rg Nominal=Online |- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB1-rs |- Offline IBM.Application:db2_db2inst1_db2inst1_HADRDB1-rs:linuxnode01 '- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB1-rs:linuxnode02 '- Online IBM.ServiceIP:db2ip_9_26_98_232-rs |- Offline IBM.ServiceIP:db2ip_9_26_98_232-rs:linuxnode01 '- Online IBM.ServiceIP:db2ip_9_26_98_232-rs:linuxnode02 Online IBM.ResourceGroup:db2_db2inst1_db2inst1_HADRDB2-rg Nominal=Online |- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB2-rs |- Offline IBM.Application:db2_db2inst1_db2inst1_HADRDB2-rs:linuxnode01 '- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB2-rs:linuxnode02 '- Online IBM.ServiceIP:db2ip_9_26_98_181-rs |- Offline IBM.ServiceIP:db2ip_9_26_98_181-rs:linuxnode01 '- Online IBM.ServiceIP:db2ip_9_26_98_181-rs:linuxnode02 Online IBM.ResourceGroup:db2_db2inst1_db2inst1_HADRDB3-rg Nominal=Online |- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB3-rs |- Offline IBM.Application:db2_db2inst1_db2inst1_HADRDB3-rs:linuxnode01 '- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB3-rs:linuxnode02 '- Online IBM.ServiceIP:db2ip_9_26_97_208-rs |- Offline IBM.ServiceIP:db2ip_9_26_97_208-rs:linuxnode01 '- Online IBM.ServiceIP:db2ip_9_26_97_208-rs:linuxnode02
如果某个备用机器宕机,所有数据库的 HADR 资源都将切换为 Failed Offline 状态,类似于上面的示例。备用机器重新启动后,备用实例会自动启动,备用数据库最终达到与主要数据库的 PEER 状态。
回页首
db2haicu 提供了一些命令来维护 System Automation for Multiplatforms 集群,比如禁用和启用高可用性。它还提供了完全删除 System Automation for Multiplatforms 集群的选项。
为集群配置了自动故障转移后,可以使用 db2haicu
命令和 -disable
选项临时禁用它。在禁用高可用性后,Tivoli System Automation for Multiplatforms 在主要节点中发生系统故障时不会执行任何自动故障转移。
清单 21 中的快照显示了执行的带 -disable
选项的 db2haicu
命令。
清单 21. db2haicu –disable
输出
db2haicu -disable Welcome to the DB2 High Availability Instance Configuration Utility (db2haicu). You can find detailed diagnostic information in the DB2 server diagnostic log file called db2diag.log. Also, you can use the utility called db2pd to query the status of the cluster domains you create. For more information about configuring your clustered environment using db2haicu, see the topic called 'DB2 High Availability Instance Configuration Utility (db2haicu)' in the DB2 Information Center. db2haicu determined the current DB2 database manager instance is 'db2inst1'. The cluster configuration that follows will apply to this instance. Are you sure you want to disable high availability (HA) for the database instance 'db2inst1'. This will lock all the resource groups for the instance and disable the HA configuration parameter. The instance will not failover if a system outage occurs while the instance is disabled. You will need to run db2haicu again to enable the instance for HA. Disable HA for the instance 'db2inst1'? [1] 1. Yes 2. No 1 Disabling high availability for instance 'db2inst1' ... Locking the resource group for HADR database 'HADRDB3' ... Locking the resource group for HADR database 'HADRDB3' was successful. Locking the resource group for HADR database 'HADRDB2' ... Locking the resource group for HADR database 'HADRDB2' was successful. Locking the resource group for HADR database 'HADRDB1' ... Locking the resource group for HADR database 'HADRDB1' was successful. Locking the resource group for DB2 database partition '0' ... Locking the resource group for DB2 database partition '0' was successful. Locking the resource group for DB2 database partition '0' ... Locking the resource group for DB2 database partition '0' was successful. Disabling high availability for instance 'db2inst1' was successful. All cluster configurations have been completed successfully. db2haicu exiting …
下面这个清单显示了为所有数据库禁用高可用性后的 lssam
输出。
清单 22. 禁用高可用性后的 lssam
输出
lssam Online IBM.ResourceGroup:db2_db2inst1_linuxnode01_0-rg Request=Lock Nominal=Online '- Online IBM.Application:db2_db2inst1_linuxnode01_0-rs Control=SuspendedPropagated '- Online IBM.Application:db2_db2inst1_linuxnode01_0-rs:linuxnode01 Online IBM.ResourceGroup:db2_db2inst1_db2inst1_HADRDB1-rg Request=Lock Nominal=Online |- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB1-rs Control=SuspendedPropagated |- Offline IBM.Application:db2_db2inst1_db2inst1_HADRDB1-rs:linuxnode01 '- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB1-rs:linuxnode02 '- Online IBM.ServiceIP:db2ip_9_26_98_232-rs Control=SuspendedPropagated |- Offline IBM.ServiceIP:db2ip_9_26_98_232-rs:linuxnode01 '- Online IBM.ServiceIP:db2ip_9_26_98_232-rs:linuxnode02 Online IBM.ResourceGroup:db2_db2inst1_db2inst1_HADRDB2-rg Request=Lock Nominal=Online |- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB2-rs Control=SuspendedPropagated |- Offline IBM.Application:db2_db2inst1_db2inst1_HADRDB2-rs:linuxnode01 '- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB2-rs:linuxnode02 '- Online IBM.ServiceIP:db2ip_9_26_98_181-rs Control=SuspendedPropagated |- Offline IBM.ServiceIP:db2ip_9_26_98_181-rs:linuxnode01 '- Online IBM.ServiceIP:db2ip_9_26_98_181-rs:linuxnode02 Online IBM.ResourceGroup:db2_db2inst1_db2inst1_HADRDB3-rg Request=Lock Nominal=Online |- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB3-rs Control=SuspendedPropagated |- Offline IBM.Application:db2_db2inst1_db2inst1_HADRDB3-rs:linuxnode01 '- Online IBM.Application:db2_db2inst1_db2inst1_HADRDB3-rs:linuxnode02 '- Online IBM.ServiceIP:db2ip_9_26_97_208-rs Control=SuspendedPropagated |- Offline IBM.ServiceIP:db2ip_9_26_97_208-rs:linuxnode01 '- Online IBM.ServiceIP:db2ip_9_26_97_208-rs:linuxnode02 Online IBM.ResourceGroup:db2_db2inst1_linuxnode02_0-rg Request=Lock Nominal=Online '- Online IBM.Application:db2_db2inst1_linuxnode02_0-rs Control=SuspendedPropagated '- Online IBM.Application:db2_db2inst1_linuxnode02_0-rs:linuxnode02 Continues…
禁用高可用性后,可运行不带任何选项的 db2haicu
来重新启用它。该实用程序检测高可用性是否已禁用,并提示用户是否启用高可用性。下面这个示例展示了如何在禁用高可用性后启用它。
清单 23. 启用高可用性的 db2haicu
输出
db2haicu Welcome to the DB2 High Availability Instance Configuration Utility (db2haicu). You can find detailed diagnostic information in the DB2 server diagnostic log file called db2diag.log. Also, you can use the utility called db2pd to query the status of the cluster domains you create. For more information about configuring your clustered environment using db2haicu, see the topic called 'DB2 High Availability Instance Configuration Utility (db2haicu)' in the DB2 Information Center. db2haicu determined the current DB2 database manager instance is 'db2inst1'. The cluster configuration that follows will apply to this instance. db2haicu is collecting information on your current setup. This step may take some time as db2haicu will need to activate all databases for the instance to discover all paths ... When you use db2haicu to configure your clustered environment, you create cluster domains. For more information, see the topic 'Creating a cluster domain with db2haicu' in the DB2 Information Center. db2haicu is searching the current machine for an existing active cluster domain ... db2haicu found a cluster domain called 'HADR_TSA_DOMAIN' on this machine. The cluster configuration that follows will apply to this domain. db2haicu has detected that high availability has been disabled for the instance 'db2inst1'. Do you want to enable high availability for the instance 'db2inst1'? [1] 1. Yes 2. No 1 Retrieving high-availability configuration parameter for instance 'db2inst1' ... The cluster manager name configuration parameter (high-availability configuration parameter) is not set. For more information, see the topic "cluster_mgr - Cluster manager name configuration parameter" in the DB2 Information Center. Do you want to set the high-availability configuration parameter? The following are valid settings for the high-availability configuration parameter: 1.TSA 2.Vendor Enter a value for the high-availability configuration parameter: [1] 1 Setting a high-availability configuration parameter for instance 'db2inst1' to 'TSA'. Enabling high availability for instance 'db2inst1' ... Enabling high availability for instance 'db2inst1' was successful. All cluster configurations have been completed successfully. db2haicu exiting ..
要完全删除您创建的 Tivoli System Automation for Multiplatforms 域并删除 HADR 数据库的自动故障转移,可运行带 -delete
选项的 db2haicu
命令。
-delete
选项的 db2haicu
命令。在该示例中,它从节点 linuxnode02 发出。 清单 24. 备用节点上的 db2haicu –delete
输出
db2haicu -delete Welcome to the DB2 High Availability Instance Configuration Utility (db2haicu). You can find detailed diagnostic information in the DB2 server diagnostic log file called db2diag.log. Also, you can use the utility called db2pd to query the status of the cluster domains you create. For more information about configuring your clustered environment using db2haicu, see the topic called 'DB2 High Availability Instance Configuration Utility (db2haicu)' in the DB2 Information Center. db2haicu determined the current DB2 database manager instance is 'db2inst1'. The cluster configuration that follows will apply to this instance. When you use db2haicu to configure your clustered environment, you create cluster domains. For more information, see the topic 'Creating a cluster domain with db2haicu' in the DB2 Information Center. db2haicu is searching the current machine for an existing active cluster domain ... db2haicu found a cluster domain called 'HADR_TSA_DOMAIN' on this machine. The cluster configuration that follows will apply to this domain. Removing HADR database 'HADRDB3' from the domain ... Removing HADR database 'HADRDB3' from the domain was successful. Removing HADR database 'HADRDB2' from the domain ... Removing HADR database 'HADRDB2' from the domain was successful. Removing HADR database 'HADRDB1' from the domain ... Removing HADR database 'HADRDB1' from the domain was successful. Removing DB2 database partition '0' from the cluster ... Removing DB2 database partition '0' from the cluster was successful. All cluster configurations have been completed successfully. db2haicu exiting …
-delete
选项的 db2haicu
命令。在该示例中,它从节点 linuxnode01 发出。 清单 25. 主要节点上的 db2haicu –delete
输出
db2haicu -delete Welcome to the DB2 High Availability Instance Configuration Utility (db2haicu). You can find detailed diagnostic information in the DB2 server diagnostic log file called db2diag.log. Also, you can use the utility called db2pd to query the status of the cluster domains you create. For more information about configuring your clustered environment using db2haicu, see the topic called 'DB2 High Availability Instance Configuration Utility (db2haicu)' in the DB2 Information Center. db2haicu determined the current DB2 database manager instance is 'db2inst1'. The cluster configuration that follows will apply to this instance. When you use db2haicu to configure your clustered environment, you create cluster domains. For more information, see the topic 'Creating a cluster domain with db2haicu' in the DB2 Information Center. db2haicu is searching the current machine for an existing active cluster domain ... db2haicu found a cluster domain called 'HADR_TSA_DOMAIN' on this machine. The cluster configuration that follows will apply to this domain. Removing DB2 database partition '0' from the cluster ... Removing DB2 database partition '0' from the cluster was successful. Deleting the domain 'HADR_TSA_DOMAIN' from the cluster ... Deleting the domain 'HADR_TSA_DOMAIN' from the cluster was successful. All cluster configurations have been completed successfully. db2haicu exiting ...
回页首
在本文中,您学习了如何使用 Tivoli System Automation for Multiplatforms,为一个 DB2 实例中的多个 HADR 数据库设置自动故障转移。我们讨论了使用 db2haicu 设置高可用性的两种方法:使用 XML 文件和交互式模式。我们还探讨了不同宕机场景下的集群行为。
回页首
感谢 IBM Software Group 的 Information Management 部门的 Phil Stedman 为本文的贡献。
还要感谢 Rob Causley 对本文所做的编辑工作。