利用 IBM® DB2® 高可用性灾难恢复 (HADR) 和自动客户端重新路由功能,可以将其客户端应用程序从发生故障的数据库服务器中恢复过来,并且可以最大限度地减少中断时间。本文向您介绍使用 IBM WebSphere® Application Server Network Deployment V6.1 作为客户端应用程序并利用 DB2 HADR 和自动客户端重新路由功能构建高可用性数据库环境的步骤。
IBM DB2 Universal Database (UDB) Enterprise Server Edition V8.2 引入了一种新的称为高可用性灾难恢复 (HADR) 的高可用性功能,它通过将数据从主要数据库复制到备用数据库为其客户端应用程序提供了一种故障转移功能。这使得客户端应用程序可以方便地从部分或完全灾难中恢复过来。另外,DB2 HADR 还与自动客户端路由 (ACR) 功能相关联,使灾难恢复行为对其客户端应用程序实际上是透明的。
例如,IBM WebSphere Application Server Network Deployment (ND) V6.1 使用 DB2 来存储其应用程序的持久性数据。WebSphere Application Server 应用程序只需要与主要数据库进行连接即可。为了在备用服务器上保持数据库的一个同步副本,系统会一致地将 DB2 HADR 日志文件从主要服务器发送到备用服务器来保持二者的同步。当主要服务器脱机时(计划内或计划外停机),备用服务器将联机代替其工作。在启用自动客户端重新路由功能时,DB2 重新路由逻辑将检查是否可以找到备用服务器。如果可以找到,重新路由功能将首先重新尝试连接失败的主要服务器,如果该操作失败,重新路由将尝试连接替代的备用服务器。这时,WebSphere Application Server 就会与备用服务器重新建立连接,并将回滚事务,然后在备用服务器上重新发布。整个 DB2 HADR 故障转移过程对 WebSphere Application Server ND 应用程序是透明的。
DB2 HADR 和自动客户端重新路由功能使得其客户端应用程序可以从发生故障的数据库服务器中恢复过来,最大限度地减少了中断时间。本文介绍使用 WebSphere Application Server ND V6.1 作为客户端应用程序并利用 DB2 HADR 和自动客户端重新路由功能构建高可用性数据库环境的步骤。
本文假定您熟悉 IBM WebSphere Application Server Network Deployment V6.x 和 DB2 Universal Database (UDB) Enterprise Server 的基本概念和设置。
DB2 HADR 准备工作
DB2 HADR 要求
在将 DB2 和 HADR 用作 WebSphere Application Server 应用程序数据存储库之前,您需要了解对主要 DB2 服务器和备用 DB2 服务器的下列基本要求:
- 需要完全相同的操作系统和 DB2 版本。
- 必须使用相同的容器文件系统和安装路径,例如 /home/db2inst1/sqllib。
- 如果通过引用方式使用 HADR 功能,则需要指定 HADR 的通信端口:
- 对于 UNIX® 或 Linux®:/etc/services
- 对于 Windows®:c:/windows/system32/drivers/etc/services
- 主要服务器和客户端应用程序应能够通过 TCP/IP 连接到备用服务器计算机。
DB2 HADR 设置
现在我们将了解,在设置 DB2 HADR 主要服务器和备用服务器时都涉及哪些内容:
1. 在主要计算机和备用计算机上安装 DB2 UDB Enterprise Server Edition。在两台计算机上都启动 DB2 服务器,如果尚未运行,则在主要计算机上创建数据库和所需的表。为了便于说明,我们将使用“Sample”作为数据库名称。(有关详细的安装信息,请参见 DB2 信息中心。)
2. 接下来,为主要计算机和备用计算机上的每个数据库确定 TCP/IP 连接通信端口(按照常规的客户端/服务器数据库连接)。端口名是用户定义的,端口号可以是任意数字,只要没有冲突就行。不要求主要服务器和备用服务器上的端口相同;不过,如果保持这两台计算机上的端口相同,则配置起来将会非常方便。对于 Sample 数据库,我们在主要服务器和备用服务器上使用了两个端口(51012 和 51013):
清单 1. 用于“Sample”数据库的两个 HADR 端口
>more /etc/services
# HADR ports assigned by user ha_sample 51012/tcp ha_sample_int 51013/tcp |
您需要编辑 /etc/services 文件 (UNIX/Linux) 或 c:/windows/system32/drivers/etc/services (Windows) 来指定端口。(注意,只有管理员帐户才能够编辑这些文件。)
3. 为主要计算机上的每个数据库配置 HADR 变量。(此处显示的步骤仅适用于主要计算机。)必须对每个数据库重复此过程。在设置这些变量时,请验证 hard_local_host 和 hard_remote_host 变量是否引用了正确的计算机。而且,hadr_local_svc 和 hadr_remote_svc 变量必须与上述 /etc/services 文件中定义的名称相匹配。下面我们以“Sample”数据库为例进行说明:
清单 2. Sample 数据库的 HADR 变量
>db2 update db cfg for Sample using hadr_local_host <primary machine IP address> >db2 update db cfg for Sample using hadr_remote_host <standby machine IP address> >db2 update db cfg for Sample using hadr_local_svc ha_sample >db2 update db cfg for Sample using hadr_remote_svc ha_sample_int >db2 update db cfg for Sample using hadr_remote_inst <DB2 instance name on the standby> >db2 update db cfg for Sample using hadr_timeout 120 >db2 update db cfg for Sample using hadr_syncmode nearsync >db2 update db cfg for Sample using logretain on >db2 update db cfg for Sample using LOGINDEXBUILD on >db2 update alternate server for database Sample using hostname <Standby IP address> port 60000 |
上例中,NEARSYNC 被选为同步模式。此模式虽然比 SYNC 模式提供较少的事务丢失保护,但比 SYNC 模式的事务响应时间要短一些。注意,清单 2 中的最后命令可以为 DB2 HADR 启用自动客户端重新路由功能,并且端口 60000 是备用计算机上的 DB2 实例端口号。
4. 请通过输入此命令来验证您的配置值,如清单 3 所示:
db2 get db cfg for <database_name> | grep HADR
清单 3. 主要计算机上 Sample 数据库的 HADR 配置
>db2 get db cfg for sample | grep HADR
HADR database role = STANDARD HADR local host name (HADR_LOCAL_HOST) = svtlewis.rchland.ibm.com HADR local service name (HADR_LOCAL_SVC) = ha_sample HADR remote host name (HADR_REMOTE_HOST) = svtclark.rchland.ibm.com HADR remote service name (HADR_REMOTE_SVC) = ha_sample_int HADR instance name of remote server (HADR_REMOTE_INST) = db2inst1 HADR timeout value (HADR_TIMEOUT) = 120 HADR log write synchronization mode (HADR_SYNCMODE) = NEARSYNC |
5. 现在,我们可以从主要计算机上备份数据库,并将其还原到备用计算机上。下面的命令将备份主要计算机上的数据库(如清单 4 中所示。)您需要对每个数据库重复此命令。请注意,您无法对正在连接其客户端应用程序的数据库执行备份。
cd <temp_backup_directory>
db2 backup db <database_name>
每个数据库的备份副本将存储在 <temp_backup_directory> 中。
清单 4. 主要计算机上的备份数据库
>cd tmpdir >db2 backup db sample
Backup successful. The timestamp for this backup image is :20061101161943 |
将主要机计算机上生成的备份文件传输到备用计算机。要将数据库还原到备用计算机,请使用您的 DB2 用户 ID 登录到备用计算机。下面的命令将把数据库还原到备用计算机上(清单 5)。您需要对每个数据库重复此命令:
db2 restore db <database_name> from <temp_restore_directory> replace history file
清单 5. 将数据库还原到备用计算机上
>cd tmpdir >db2 restore db sample replace history file
DB20000I The RESTORE DATABASE command completed successfully. |
6. 在将所有数据库还原到备用计算机上之后,必须将清单 6 中所示的用于各个数据库的所有 DB2 HADR 变量从主要 DB2 服务器复制到备用服务器。从备用 DB2 服务器的角度看,主要 DB2 服务器就是远程主机。因此,您需要修改备用计算机上的 hadr_local_host、hadr_remote_host、hadr_local_svc 和 hadr_remote_svc 值。另外,必须更新自动客户端重新路由,以指向主要计算机。
请注意,端口 60000 是主要计算机上的 DB2 实例端口号。
清单 6. 备用计算机上 Sample 数据库的 HADR 变量
>db2 update db cfg for Sample using hadr_local_host <standby machine IP address> >db2 update db cfg for Sample using hadr_remote_host <primary machine IP address> >db2 update db cfg for Sample using hadr_local_svc ha_sample_int >db2 update db cfg for Sample using hadr_remote_svc ha_sample
>db2 update alternate server for database Sample using hostname <Primary machine IP address> port 60000 |
7. 在主要计算机或备用计算机上启动 DB2 HADR 之前,正确设置所有 HADR 参数的值非常重要。如果这些参数中任何一个参数为空或者配置不正确,DB2 HADR 服务器都不会正常启动。另外,还需要先在备用计算机上启动 DB2 HADR,然后才可以在主要计算机上启动它。
在备用计算机上,首先禁用数据库,然后发出 start hadr 命令,将其作为备用数据库启动(清单 7)。
db2 deactivate db <database_name>
db2 start hadr on db <database_name> as standby
清单 7. 禁用 Sample 并将其作为备用数据库启动
>db2 deactivate db sample >db2 start hadr on db sample as standby
DB20000I The START HADR ON DATABASE command completed successfully
>db2 get snapshot for db on sample | grep Role
Role = Standby |
在主要计算机上,首先激活数据库,然后发出 start hadr 命令将其作为主要数据库启动(清单 8)。
db2 activate db <database_name>
db2 start hadr on db <database_name> as primary
清单 8. 激活 Sample 并将其作为主要数据库启动
> db2 activate db sample > db2 start hadr on db sample as primary
DB20000I The START HADR ON DATABASE command completed successfully
> db2 get snapshot for db on sample | grep Role
Role = Primary |
8. 在启动 DB2 HADR 服务器时,您会收到一条指示“START HADR ON DATABASE command completed successfully”的消息。为确保 HADR 服务器在主要计算机和备用计算机上使用了正确的角色运行,您可以向主要计算机和备用计算机发出以下命令进行验证:
db2 get snapshot for db on <database_name> | grep Role
在 HADR 状态角色下,您将看到用于备用计算机的“Standby”状态和用于主要计算机的“Primary”状态。如果得不到每个数据库的正确标识符,则需要检查前面的所有步骤。
9. 在备用计算机和主要计算机上的数据库成功启动后,您需要确保两个数据库处于同步状态。否则,故障转移将无法成功进行,从而会导致发生不希望的结果,如数据丢失。发出以下命令,以检查主要和备用数据库计算机上两个数据库的状态:
db2 get snapshot for database on <database_name> | grep State
您需要等待备用数据库连接到主要数据库之后,才能使两个数据库处于对等模式。在数据库处于对等模式之后,主要计算机和备用计算机上的 DB2 HADR 服务器就准备就绪可供使用了。
需要详细的请联系:blackleak@gmail.com.