转载

针对 HADR for DB2 pureScale 的 IBM Data Server Driver for JDBC and SQLJ 配置参数

简介

DB2 pureScale(用于 Linux、UNIX 和 Windows)是一种共享磁盘架构集群技术,其中多个 DB2 成员处理对数据库的单个共享副本的数据库请求。HADR for DB2 pureScale 通过在一个备用成员中保存一个数据副本,分别提供了故障转移(持续可用性)和灾难恢复功能。我们将介绍从客户端应用程序角度看的最佳配置/设置/环境的一些基础知识。

备注:DB2 10.5 及更高版本支持 HADR for DB2 pureScale。主要和备用数据库之间的数据复制是通过日志流事务来完成的。备用数据库通过重放日志来同步数据。

下图描绘了客户端应用程序与具有 HADR 配置的数据共享群组之间的 HADR for DB2 pureScale 连接性。客户端可以是独立的应用程序或中间件,比如 WebSphere® Application Server,它们使用 IBM Data Server Driver for JDBC and SQLJ 所提供的连接来连接到 DB2 数据共享群组。主要数据库和包含 3 个成员的备用集群可以位于不同的位置。HADR 使用 TCP/IP 通信来发布事务日志,备用集群中首选的重放成员会接收和重放日志。

图 1. HADR for DB2 pureScale 连接性

针对 HADR for DB2 pureScale 的 IBM Data Server Driver for JDBC and SQLJ 配置参数

回页首

使用 pureScale 平衡工作负载

在 DB2 for pureScale 或 Sysplex(DB2 for z/OS® 数据服务器)等集群环境中运行的应用程序,使用工作负载平衡 (WLB) 功能在事务和连接级别上将对新事务的传入请求或来自应用程序的新传入连接分配给集群的每个 DB2 成员。工作负载对每个 DB2 成员执行的分配由目标数据服务器集群来确定。该分配将依据集群所返回的服务器列表中提到的集群的每个 DB2 成员的容量来进行。服务器列表是 IBM Data Server Driver for JDBC and SQLJ 的工作负载平衡和 ACR 操作的基础。服务器列表包含 DB2 成员处理工作负载的可用性和容量的信息。

IBM Data Server Driver for JDBC and SQLJ 仅支持事务级 WLB,而事务级平衡自动包含连接级平衡。

WLB 可通过 IBM Data Server Driver for JDBC and SQLJ 属性 enableSysplexWLB=true 与 pureScale 结合使用。

回页首

备用群组支持:驱动程序透视图

结合使用 IBM Data Server Driver for JDBC and SQLJ 和 ACR/WLB 的故障转移在群组级别上执行,而主要和备用数据服务器形成了一个集群/群组。一个集群或群组包含多个成员。故障转移也可跨群组或在群组内执行。当群组的所有成员都宕机且事务将故障转移到备用群组时,具有备用群组的 DB2 pureScale 就会启动 HADR 支持。当群组的一个成员宕机而其他成员可用时,事务处理会继续在同一个群组的剩余成员上进行。

在 HADR for pureScale 中,IBM Data Server Driver for JDBC and SQLJ 中的备用群组支持可在连接 URL 或数据源级别上使用 alternateGroupServerNamealternateGroupPortNumberalternateGroupDatabaseName 实现。

这些属性可在连接 URL、数据源级别、属性文件、WebSphere Application Server 中的自定义 JNDI 属性等中设置。

在连接 URL 上:

  • String url = "jdbc:db2://jaxxx.svl.ibm.com:50000/databaseName:user=user;password=passwd; alternateGroupDatabaseName=databaseName;alternateGroupPortNumber=50000; alternateGroupServerName=jaxxx1.svl.ibm.com;enableAlternateGroupSeamlessACR=true;";

在数据源级别上:

  • com.ibm.db2.jcc.DB2SimpleDataSource ds__ = new DB2SimpleDataSource();
  • ds__.setAlternateGroupDatabaseName("databaseName");
  • ds__.setAlternateGroupPortNumber("50000");
  • ds__.setAlternateGroupServerName("jaxxx1.svl.ibm.com");
  • ds__.setEnableAlternateGroupSeamlessACR(true);

使用 WebSphere Application Server 添加自定义属性:

  • 以下步骤和插图演示了如何使用 IBM Data Server Driver for JDBC and SQLJ 数据源属性配置自定义属性,这些属性默认情况下不会在管理控制台中显示。

图 2. 选择 DB2 连接数据库

针对 HADR for DB2 pureScale 的 IBM Data Server Driver for JDBC and SQLJ 配置参数

在左侧导航窗口中的 Resources 下,单击 JDBC > Data sources ,然后选择 Web 应用程序想要连接和执行的 JNDI 资源/数据源

图 3. 为选定的数据库选择自定义属性

针对 HADR for DB2 pureScale 的 IBM Data Server Driver for JDBC and SQLJ 配置参数

单击右侧 Additional properties 下选定的 JNDI/数据源并单击 custom properties

图 4. 为新属性提供名称值输入

针对 HADR for DB2 pureScale 的 IBM Data Server Driver for JDBC and SQLJ 配置参数

添加一个新属性,方法是单击 New 选项卡并提供新属性的名称值输入,然后保存。

通过使用 enableAlternateGroupSeamlessACR ,IBM Data Server Driver for JDBC and SQLJ 使得在 HADR for pureScale 环境中执行无缝群组故障转移变得很容易。 enableAlternateGroupSeamlessACR 表明是否启用了跨群组的无缝故障转移行为。只有在指定了备用群组时,跨群组的无缝故障转移行为才可用。

回页首

使用 IBM Data Server Driver for JDBC and SQLJ 配置 HADR for DB2 pureScale

HADR for DB2 pureScale 中的故障转移和灾难恢复可以使用 IBM Data Server Driver for JDBC and SQLJ 实现,如下所示:

  1. 使用 WLB 的经典的 HADR 自动客户端重新路由 (ACR)
  2. 备用群组支持

HADR for DB2 pureScale 的 WLB 可使用 IBM Data Server Driver for JDBC and SQLJ 属性 enableSysplexWLB=true 来实现。如果启用了 WLB,那么还会隐式地启用 ACR。

回页首

具有 WLB 的经典 HADR ACR for DB2 pureScale

使用 HADR for DB2 pureScale 的自动客户端重新路由也提供同样的故障转移(连续可用性)和灾难恢复功能。如果主要数据服务器发生宕机,自动客户端重新路由(也称为经典配置)允许连接故障转移到一个备用的数据服务器。失败的事务需要在故障转移到应用程序上后处理并重新提交,当客户端应用程序中启用了经典配置时,非无缝事务故障转移会向应用程序抛出错误代码 -4498 或 -30108。

IBM Data Server Driver for JDBC and SQLJ 定期从一个数据共享群组接收服务器列表。群组的每个成员都保留服务器列表的一个副本,该副本可供 IBM Data Server Driver for JDBC and SQLJ 使用。尝试获取一个新连接或开始在现有连接上执行一个新事务时,IBM Data Server Driver for JDBC and SQLJ 使用 WLB 算法确定要将请求路由到的和来自服务器列表的最佳成员。在任何成员发生宕机时,IBM Data Server Driver for JDBC and SQLJ 将尝试使用从服务器列表收到的主要集群的每个成员。如果主要集群中没有成员可供使用,那么IBM Data Server Driver for JDBC and SQLJ 会尝试故障转移到备用服务器。如果尝试所有备用服务器后仍无法成功连接,IBM Data Server Driver for JDBC and SQLJ 会循环到主要服务器,并每次重复此过程 10 分钟。

在经典配置中,客户端可选择配置一个备用服务器,所以即使任何与主要集群的连接均未成功(返回一个备用服务器列表),也可以故障转移到备用服务器。SQL 命令 UPDATE ALTERNATE SERVER FOR DATABASE 用于在主要和辅助集群中找到备用服务器。也就是说,主要集群的备用服务器将是辅助集群,辅助集群的备用服务器将是主要集群。这称为 DB2 pureScale 的经典 HADR ACR 设置。

DB2 pureScale 的 HADR 设置默认情况下已启用 ACR。HADR for DB2 pureScale 设置包含主要和辅助集群,在客户端与主要集群建立连接时,备用服务器列表会加载到客户端缓存中。服务器/备用服务器列表将包含主要集群的成员和辅助集群的信息。

DB2 pureScale 的经典 HADR ACR 设置的配置

使用 IBM Data Server Driver for JDBC and SQLJ,DB2 pureScale 的经典 HADR ACR 可按以下方式进行配置:

  1. 使用 clientRerouteAlternateServerNameclientRerouteAlternatePortNumber 配置备用集群及主要集群的服务器名称和端口号的详细信息。
  2. 使用可选的 maxRetriesForClientReroute 遍历服务器列表中的每个成员指定的次数
  3. 使用可选的 retryIntervalForClientReroute 等待尝试不同服务器列表的间隔时间量用完

如果与主要集群的第一个连接成功,备用集群的应用程序级别上的属性 clientRerouteAlternateServerNameclientRerouteAlternatePortNumber 将被 IBM Data Server Driver for JDBC and SQLJ 忽略。如果未成功,则会使用 clientRerouteAlternateServerName 中提及的备用集群信息来建立第一个连接。

建议:当客户在故障转移到备用集群时想要使用 WLB 功能时,为 WLB for DB2 pureScale 使用经典的 HADR ACR 设置。如果集群内的故障转移未成功,将跨集群执行故障转移并执行工作负载平衡。

备注:

  1. 当目标服务器没有配置 HADR for DB2 pureScale 设置且客户端想要获得备用群组支持时,推荐使用客户端备用群组属性 alternateGroupServerNamealternateGroupPortNumberalternateGroupDatabaseName
  2. 当目标服务器配置了 HADR for DB2 pureScale 设置时,客户端可忽略备用群组支持属性。HADR for DB2 pureScale 服务器配置将负责故障转移到备用群组。对于经典 HADR ACR,始终推荐使用客户端属性 clientRerouteAlternateServerNameclientRerouteAlternatePortNumber

清单 1 中的示例代码展示了如何编写一个应用程序,在执行事务期间为 DB2 pureScale 实现经典 HADR ACR 设置。属性可在属性文件中配置,无需修改应用程序。这些属性可在连接 URL、数据源级别、属性文件、WebSphere Application Server 中的自定义 JNDI 属性等中设置。

下面的代码清单给出了应用程序通常在 HADR for DB2 pureScale 的经典 ACR 中用来设置属性文件的属性,加载该文件,获取连接和启动一个事务的常规 JDBC 代码。以这种方式设置属性文件来创建一个具有类似 jcc.properties 的名称的文件,并使用键值对添加以下属性:

enableSysplexWLB=true                 clientRerouteAlternateServerName=jafvt2xxx.svl.ibm.com                 clientRerouteAlternatePortNumber=50000 maxRetriesForClientReroute=2                 retryIntervalForClientReroute=1

jafvt1xxx.svl.ibm.com 是具有两个成员的主要集群, jafvt2xxx.svl.ibm.com 是具有两个成员的辅助集群。

*/ // Load the driver class  Class.forName("com.ibm.db2.jcc.DB2Driver");  // Create DB2SimpleDataSource object  com.ibm.db2.jcc.DB2SimpleDataSource ds__ = new DB2SimpleDataSource();  // Create statement ,PreparedStatement,  // property utility and InputStream objects  java.sql.Statement stmt = null;  java.sql.PreparedStatement pstmt = null;  java.util.Properties prop = null;  java.io.InputStream input = null;  //Connection URL with primary cluster  String url ="jdbc:db2://jafvt1xxx.svl.ibm.com:50000 /SAMPLE:user=user;password=passwd;";  // Load the properties file  try {   input = new FileInputStream("jcc.properties");   // load a properties file   prop.load(input);  } catch (IOException ex) { ex.printStackTrace(); } // Get a connection using the property utility  java.sql.Connection con =java.sql.DriverManager.getConnection(url,prop);  // execute transaction SQLs  stmt =con.createStatement ();  stmt.executeUpdate ("sql statement1");  stmt.close ();  pstmt = con.prepareStatement ("sql statement2");  pstmt.setString (1, ".."); pstmt.executeUpdate ();  pstmt.close ();  } 

没有 WLB 的 HADR for DB2 pureScale 配置

假设 HADR for DB2 pureScale 的设置包含两个集群(主要和辅助),每个集群包含两个成员,在客户端请求一个新的 JDBC 连接时,SQLJ 选择一个要请求路由到 DB2 成员和从服务器列表选择一个成员。在任何成员发生宕机时,IBM Data Server Driver for JDBC and SQLJ 将会尝试使用从服务器列表收到的主要集群的每个成员。如果主要集群中没有成员可供使用,IBM Data Server Driver for JDBC and SQLJ 会尝试故障转移到一个备用群组成员。如果尝试使用所有备用服务器后仍无法成功连接,IBM Data Server Driver for JDBC and SQLJ 将循环到主要集群并重复此过程 10 分钟。

使用 IBM Data Server Driver for JDBC and SQLJ,HADR for DB2 pureScale 可按以下方式进行配置:

  1. 使用 alternateGroupServerNamealternateGroupPortNumberalternateGroupDatabaseName 配置备用群组集群规格
  2. 使用 enableAlternateGroupSeamlessACR 启用跨备用集群的无缝事务
  3. 使用可选的 maxRetriesForClientReroute 遍历服务器列表中的每个成员给定的次数
  4. 使用可选的 retryIntervalForClientReroute 等待尝试不同服务器列表的间隔时间量用完

在 IBM Data Server Driver for JDBC and SQLJ 想要在集群内故障转移时,推荐使用具有备用群组支持的 HADR for DB2 pureScale。如果未成功,故障转移会发生在集群群组外。

下面的代码展示了如何编写一个应用程序,对 HADR for DB2 pureScale 使用 IBM Data Server Driver for JDBC and SQLJ 来实现备用群组支持(包含两个集群)。属性可使用属性文件来设置,无需修改应用程序代码。属性文件可以使用实用程序类 java.util.Properties 的 load 函数来加载。

示例 JDBC 代码使用属性文件在 HADR for DB2 pureScale 上实现备用群组支持。以下代码展示了针对两个集群 jafvt1xxxjafvt2xxx 的示例代码,该代码在属性文件上设置备用群组支持属性,加载该文件,建立一个连接和启动一个事务。在这个代码段中, jafvt1xxx 是主要集群, jafvt2xxx 是备用集群。通过创建一个具有类似 jcc.properties 的名称的文件,以这种方式设置属性文件。使用键值对添加以下属性:

enableAlternateGroupSeamlessACR=true alternateGroupServerName=jafvt2xxx.svl.ibm.com alternateGroupPortNumber=50000 alternateGroupDatabaseName=SAMPLE maxRetriesForClientReroute=2 retryIntervalForClientReroute=1 */  // Load the driver class  Class.forName("com.ibm.db2.jcc.DB2Driver");  // Create DB2SimpleDataSource object  com.ibm.db2.jcc.DB2SimpleDataSource ds__ = new DB2SimpleDataSource();  // Create statement ,PreparedStatement,  // property utility and InputStream objects  java.sql.Statement stmt = null;  java.sql.PreparedStatement pstmt = null; java.util.Properties prop = null; java.io.InputStream input = null;  // Connection URL with primary cluster  String url = "jdbc:db2://jafvt1xxx.svl.ibm.com:50000/SAMPLE:user=user;password=passwd;";  // Load the properties file  try {    input = new FileInputStream("jcc.properties");  // load a properties file   prop.load(input);  } catch (IOException ex) { ex.printStackTrace(); }  // Get a connection  java.sql.Connection con = java.sql.DriverManager.getConnection(url,prop);  // execute transaction SQLs  stmt = con.createStatement ();  stmt.executeUpdate ("sql statement1");  stmt.close ();  pstmt = con.prepareStatement ("sql statement2"); pstmt.setString (1, "..");  pstmt.executeUpdate (); pstmt.close ();  } 

回页首

结束语

在客户想要 WLB 和故障转移到备用集群时,推荐使用为 DB2 pureScale 启用了 WLB 的经典 HADR ACR 设置。这将适用于客户想要在集群内执行故障转移并进行工作负载平衡的情形。如果集群内的故障转移未取得成功,则会跨集群执行故障转移并执行 WLB。如果驱动程序位于最后一个备用群组上,则会循环回到备用群组列表的开头部分。

借助 IBM Data Server Driver for JDBC and SQLJ,可以轻松地开发应用程序,充分利用来自 IBM 的 HADR for DB2 pureScale 数据共享技术的优势。WLB 只需启用驱动程序中的属性,从而扩展应用程序的可伸缩性和故障恢复能力。到此为止,我们介绍了与具有经典 HADR ACR 支持的 WLB 相关的技术细节、驱动程序属性和编程建议。

正文到此结束
Loading...