DB2 HADR

利用 IBM® DB2® 高可用性灾难恢复 (HADR) 和自动客户端重新路由功能,可以将其客户端应用程序从发生故障的数据库服务器中恢复过来,并且可以最大限度地减少中断时间。本文向您介绍使用 IBM WebSphere® Application Server Network Deployment V6.1 作为客户端应用程序并利用 DB2 HADR 和自动客户端重新路由功能构建高可用性数据库环境的步骤。

摘自 IBM WebSphere 开发者技术期刊

引言

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_hosthadr_remote_hosthadr_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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值