引言
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 和自动客户端重新路由功能构建高可用性数据库环境的步骤。
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 主要服务器和备用服务器时都涉及哪些内容:
- 在主要计算机和备用计算机上安装 DB2 UDB Enterprise Server Edition。在两台计算机上都启动 DB2 服务器,如果尚未运行,则在主要计算机上创建数据库和所需的表。为了便于说明,我们将使用“Sample”作为数据库名称。(有关详细的安装信息,请参见 DB2 信息中心。)
- 接下来,为主要计算机和备用计算机上的每个数据库确定 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) 来指定端口。(注意,只有管理员帐户才能够编辑这些文件。)
为主要计算机上的每个数据库配置 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 >db2 update db cfg for Sample using hadr_remote_host >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 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 port 60000 |
上例中,NEARSYNC 被选为同步模式。此模式虽然比 SYNC 模式提供较少的事务丢失保护,但比 SYNC 模式的事务响应时间要短一些。注意,清单 2 中的最后命令可以为 DB2 HADR 启用自动客户端重新路由功能,并且端口 60000 是备用计算机上的 DB2 实例端口号。