通常在以下一个位置指定第一个连接的主服务器的连接信息(例如数据库名称、服务器名称和 ">TCP/IP 端口号):
应用程序连接字符串
JCC Type 4 URL 或属性字符串
目录条目
db2dsdriver.cfg 文件的 <dsn> 节
当第一次连接主服务器时,DB2 pureScale 集群将所有成员的列表以及它们的优先级返回到服务器列表中的 DB2 客户端。DB2 客户端依靠此服务器列表,根据成员的优先级在可用的 DB2 pureScale 成员之间分发或平衡应用程序请求。
但是,如果由于在连接信息中指定的主要 DB2 pureScale 成员是离线的,导致应用程序未能在第一次连接到该成员,DB2 客户端则不会收到一个服务器列表。因此,DB2 客户端无从知道其他哪些 DB2 pureScale 成员可用。因此,与一个 DB2 pureScale 成员成功建立第一次连接对 WLB 在 DB2 pureScale 环境中生效非常重要。如果指定的主服务器无法连接上,DB2 提供了一种机制来允许 DB2 客户端重试与指定的备用服务器进行第一次连接。在 DB2 Version 9.7 Fix Pack 1 或更高版本中,在 DB2 Java 客户端和 DB2 非 Java 客户端上都可使用 enableAlternateServerListFirstConnect 功能实现此目的。在 DB2 Java 客户端上,您也可通过已有的 JCC clientRerouteAlternateServerName 和 clientRerouteAlternatePortNumber 属性指定备用服务器。
在启动应用程序之前,可使用 enableAlternateServerListFirstConnect 功能或 clientRerouteAlternateServerName 和 clientRerouteAlternatePortNumber 属性配置备用服务器。DB2 客户端在应用程序启动时将这个预配置的备用服务器列表加载到内存中,并尝试打开第一个连接。只有在客户端未能与指定的主服务器建立第一次连接时,该列表才用于这个特定的应用程序进程。此列表需要手动维护来确保它包含您的 DB2 pureScale 集群的当前成员。
为了避免手动维护备用服务器列表,Version 9.7 Fix Pack 4 中为 DB2 非 Java 客户端引入了一项名为服务器列表缓存的功能。Version 9.7 Fix Pack 3 中为 DB2 Java 客户端引入了一项类似的功能,但从 Version 9.7 Fix Pack 5 开始,此功能不支持 WLB。 使用服务器列表缓存功能,一个 DB2 客户端可基于 DB2 pureScale 集群返回的信息来维护最新的服务器列表。此信息允许 DB2 客户端基于最后已知的 DB2 pureScale 集群配置来重建备用服务器列表。多个应用程序进程可共享备用服务器列表,只要这些应用程序在同一个 DB2 客户端上运行并连接到同一个 DB2 pureScale 集群上的同一个数据库。例如,考虑这样一种环境中的应用程序 A 与 DB2 pureScale 集群建立第一次连接并创建一个缓存的服务器列表。随后启动的应用程序(比如 B 和 C)会共享应用程序 A 创建的服务器列表缓存文件,无需提供它们自己的备用服务器列表。
6.1 启用 enableAlternateServerListFirstConnect 功能
要启用 enableAlternateServerListFirstConnect 功能,您必须在 db2dsdriver.cfg 文件中将 enableAlternateServerListFirstConnect 参数设置为 true 并定义备用服务器列表。下面的示例展示了如何在 DB2 非 Java 客户端上执行此任务:
<configuration> <dsncollection> <dsn alias="eComHQ" name="eComHQ" host="coralpib19a.torolab.ibm.com" port="56733"> <parameter name="
Authentication" value="Server_Encrypt"/> </dsn> </dsncollection> <databases> <database name="eComHQ" host="coralpib19a.torolab.ibm.com" port="56733"> <WLB> <parameter name="enableWLB" value="true"/> </WLB> <ACR> <parameter name="enableAcr" value="true"/> <parameter name="enableSeamlessAcr" value="true"/> <parameter name="enableAlternateServerListFirstConnect" value="true"/> <parameter name="maxAcrRetries" value="3"/> <parameter name="acrRetryInterval" value="2"/> <
alternate_server_list> <server name="alternateserver1" hostname="coralpib19b.torolab.ibm.com" port="56733"> </server> <server name="alternateserver2" hostname="coralpib19c.torolab.ibm.com" port="56733"> </server> </alternate_server_list> </ACR> </database> </databases> <parameters> <parameter name="CommProtocol" value="TCPIP"/> </parameters> </configuration>
在这个样例 db2dsdriver.cfg 文件中,备用服务器在 <alternate_server_list> 节中定义。成员 coralpib19a.torolab.ibm.com 指定为初始连接成员(也就是主服务器),而且有两个备用服务器(coralpib19b.torolab.ibm.com 和 coralpib19c.torolab.ibm.com)。如果应用程序未能与 coralpib19a.torolab.ibm.com 建立第一次连接,DB2 客户端会尝试连接 coralpib19b.torolab.ibm.com,因为这是 <alternate_server_list> 节中的第一个备用服务器。如果连接成功,DB2 客户端会获得 DB2 pureScale 集群返回的服务器列表并根据该信息来分发应用程序请求。任何后续的客户端重新路由操作都基于该服务器返回的服务器列表中的可用成员。如果应用程序未能连接到第一个备用服务器,DB2 客户端会尝试连接 <alternate_server_list> 节中的第二个备用服务器 (coralpib19c.torolab.ibm.com)。如果客户端无法连接到第二个备用服务器,该客户端则会继续遍历列表中可用的备用服务器,直到试尽列表中的所有成员。
可为 DB2 Java 客户端使用与此相同的配置,除了一些参数具有不同的名称:
enableAcr 更改为 enableACR。
maxAcrRetries 更改为 maxRetriesForClientReroute。
acrRetryInterval 更改为 retryIntervalForClientReroute。
6.2 启用服务器列表缓存功能
对于 DB2 非 Java 客户端,如果在 enableAlternateServerListFirstConnect 参数设置为 true 时未在 db2dsdriver.cfg 文件中定义备用服务器列表,服务器列表缓存功能则会启用。可使用上一个示例中所示的 db2dsdriver.cfg 文件,但删除 <alternate_server_list> 节。
对于 DB2 Java 客户端,当 JCC 驱动程序可找到将 jccServerListCache.bin 缓存文件写入到的目录位置,就启用服务器列表功能。您可通过 db2.jcc.outputDirectory JCC 属性或通过 java.io.tmpdir Java 系统属性设置此目录位置。 您可将 db2.jcc.outputDirectory 属性设置如下:
在 DB2JccConfiguration.properties JCC 属性文件中,如下面的示例所示:
db2.jcc.outputDirectory=/home/tmp
作为一个 Java 系统属性,在执行 Java 命令时指定 –Dproperty=value,如下面的示例所示:
java - Ddb2.jcc.outputDirectory=/home/tmp Test