[IBM i][AIX Solaris HP-UX Linux Windows]

将事务日志和补偿日志存储在关系数据库中以获得高可用性

您可选择性地选择将 WebSphere® Application Server 事务日志和补偿日志存储在关系数据库中,而非存储为操作系统文件。此功能无需使用共享文件系统就可以提供高可用性 (HA) 支持。

关于此任务

对于涉及两个或多个资源或分布在多个服务器间的全局事务,WebSphere Application Server 事务服务将信息写入每个全局事务的事务日志。这些事务由应用程序或由在其中部署这些事务的容器来启动或停止。事务服务将保留事务日志以确保事务的完整性。信息将在分布式事务的准备阶段写入事务日志。如果具有活动事务的 WebSphere Application Server 在发生故障后重新启动,那么事务服务能够使用这些日志来重放任何未确定事务。此级别的完整性允许整个系统恢复到一致状态。

在 WebSphere Application Server 的先前发行版中,事务日志存储为操作系统文件。在 WebSphere Application Server V8.5.5 和更高版本中,此设置保持缺省配置。您还可以选择将事务日志存储在关系数据库中。此配置选项主要用于高可用性 (HA) 环境。此外,在 WebSphere Application Server 的先前发行版中,HA 事务支持需要使用共享文件系统(例如 NFSv4 挂载网络连接存储 (NAS) 或存储区域网络 (SAN))来托管事务日志。这项新功能使您(特别是在您投资了 HA 数据库技术时)能够将 HA 数据库用作事务日志的共享存储库,以替代共享文件系统。

注: 用于将事务日志和补偿日志存储在关系数据库中的当前实现支持 DB2® 和 Oracle 中的高可用性功能。例如,支持特定于客户机的功能(如 DB2 HADR 或 Oracle RAC DataGuard),这些功能允许在发生故障的情况下重新连接到其他数据库实例。其他供应商提供的关系数据库中的高可用性功能当前不受支持。

在当前实现中,如果核心恢复日志功能遇到意外的 JDBC 异常,那么将禁用事务日志记录,并且必须关闭服务器,以便可以恢复正在进行的事务。在服务器重新启动之前,不会尝试进行重新连接,并且当前实现不会尝试确定此情况是否为临时情况。

在 WebSphere Application Server V8.5.5 和更高版本中,您可以使用类似的工具(也是针对在 HA 环境中工作的客户)将补偿恢复日志存储在关系数据库中。WebSphere Application Server 补偿服务使不同系统上的应用程序能够协调耦合程度低于原子事务的活动。它将系统发生故障后完成补偿所必需的信息存储在它自己的专用恢复日志中。

避免故障 避免故障: SQL 恢复日志的数据源所需的最大池大小值为:
(2 * 要进行对等恢复的潜在服务器数目) + 2
。此最大池大小允许使用足够的数据库连接来关闭所有相关事务日志。如果未将最大池大小设置为此值,那么会因为没有足够的可用连接,而导致出现错误消息 J2CA0045E。gotcha

过程

必须先通过设置集群中每个服务器的 TransactionLogDirectoryCompensationLogDirectory 属性来配置每个服务器的事务日志位置和补偿日志位置,然后才能启用高可用性。集群中的每个服务器都必须通过指定不同的 tablesuffix 属性,来引用唯一的事务日志位置和补偿日志位置,以确保多个服务器不会争用关系数据库管理系统 (RDBMS) 资源。例如,如果您的某个集群名为 AppCluster 且具有下列四个成员服务器:
  • AppClusterMember1
  • AppClusterMember2
  • AppClusterMember3
  • AppClusterMember4
那么您可以为 AppCluster 定义以下表后缀:
  • App1(用于 AppClusterMember1)
  • App2(用于 AppClusterMember2)
  • App3(用于 AppClusterMember3)
  • App4(用于 AppClusterMember4)

请完成下列步骤:

  1. 配置非事务性数据源以用于事务日志和补偿恢复日志存储:
    1. 为特定 RDBMS 实现创建 JDBC 提供程序。将实现类型指定为非 XA。
    2. 创建 JAAS J2C 认证数据别名。此数据别名将定义用来连接至 RDBMS 的安全凭证。RDBMS 中定义的凭证必须具有足够的权限来在数据库中创建表。
    3. 使用步骤 a 中创建的 JDBC 提供程序来创建数据源。必须将其由组件管理的认证别名设置为步骤 b 中创建的 JAAS 别名。定义数据源的 URL,以指定与 RDBMS 的连接。
    4. 通过完成以下步骤,将新数据源配置为非事务性数据源:
      1. 打开新创建的数据源。
      2. 其他属性下,单击 WebSphere Application Server 数据源属性
      3. 选中非事务数据源复选框。
      4. 保存更改。
  2. 配置事务服务以将事务存储在关系数据库中:
    1. 在 WebSphere Application Server 管理控制台中,单击服务器 > 服务器类型 > WebSphere 应用程序服务器 > server_name 会显示所指定的应用程序服务器的属性。
    2. 容器设置部分中,单击容器服务 > 事务服务 将显示“事务服务设置”页面。
    3. 如果配置选项卡未显示,请选择该选项卡。
    4. 事务日志目录字段中,输入定制字符串以指示您希望将日志存储在数据库中。 字符串必须具有以下格式:
      custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=data_source_jndi_name,tablesuffix=suffix
      其中 data_source_jndi_name 是先前创建的非事务性数据源的 JNDI 名称,而 suffix 是必须设置的字符串,用于唯一标注 HA 集群的每个成员。
      限制: 如果使用 Oracle 数据库,那么 suffix 字符串的长度不得超过 15 个字符。
  3. (可选)如果您计划在 WebSphere Application Server 中使用补偿服务或活动服务,请将补偿服务配置为在关系数据库中存储事务:
    1. 在 WebSphere Application Server 管理控制台中,单击服务器 > 服务器类型 > WebSphere 应用程序服务器 > server_name 会显示所指定的应用程序服务器的属性。
    2. 容器设置部分中,单击容器服务 > 补偿服务 将显示“补偿服务设置”页面。
    3. 如果配置选项卡未显示,请选择该选项卡。
    4. 恢复日志目录字段中,输入定制字符串以指示您希望将日志存储在数据库中。 字符串必须具有以下格式:
      custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=data_source_jndi_name,tablesuffix=suffix
      其中 data_source_jndi_name 是先前创建的非事务性数据源的 JNDI 名称,而 suffix 是必须设置的字符串,用于唯一标注 HA 集群的每个成员。
      限制: 如果使用 Oracle 数据库,那么 suffix 字符串的长度不得超过 15 个字符。
  4. (可选)创建数据库表。

    WebSphere Application Server 将在首次启动时尝试创建必需的数据库表。如果无法创建这些数据库表(例如,由于没有足够的许可权),那么服务器将无法启动。在这些情况下,必须手动创建三个数据库表。

    以下 DDL 是一个有代表性的 DDL,它适用于独立服务器环境。在独立环境中,需要两个数据库表(一个事务日志表和一个合作伙伴日志表)来支持事务服务。如果您计划使用补偿服务或活动服务,那么还需要第三个补偿日志表。

    您可以为自己的环境定制表名称。例如,如果您的某个集群名为 AppCluster 且具有下列四个成员服务器,那么必须创建四个事务日志表、四个合作伙伴日志表和(可选)四个补偿日志表:
    • AppClusterMember1
    • AppClusterMember2
    • AppClusterMember3
    • AppClusterMember4
    因此,您可以为 AppCluster 定义下列表:
    集群名称 服务器名称 事务日志表 合作伙伴日志表 补偿日志表
    AppCluster AppClusterMember1 WAS_TRAN_LOGApp1 WAS_PARTNER_LOGApp1 WAS_COMP_LOGApp1
      AppClusterMember2 WAS_TRAN_LOGApp2 WAS_PARTNER_LOGApp2 WAS_COMP_LOGApp2
      AppClusterMember3 WAS_TRAN_LOGApp3 WAS_PARTNER_LOGApp3 WAS_COMP_LOGApp3
      AppClusterMember4 WAS_TRAN_LOGApp4 WAS_PARTNER_LOGApp4 WAS_COMP_LOGApp4
    以下 DDL 说明如何在 DB2 上创建带有 App1 表后缀的数据库表:
    CREATE TABLE WAS_TRAN_LOGApp1(
      SERVER_NAME VARCHAR(128),
      SERVICE_ID SMALLINT,
      RU_ID BIGINT,
      RUSECTION_ID BIGINT,
      RUSECTION_DATA_INDEX SMALLINT,
      DATA LONG VARCHAR FOR BIT DATA) 
    CREATE TABLE WAS_PARTNER_LOGApp1(
      SERVER_NAME VARCHAR(128),
      SERVICE_ID SMALLINT,
      RU_ID BIGINT,
      RUSECTION_ID BIGINT,
      RUSECTION_DATA_INDEX SMALLINT,
      DATA LONG VARCHAR FOR BIT DATA) 
    CREATE TABLE WAS_COMP_LOGApp1(
      SERVER_NAME VARCHAR(128),
      SERVICE_ID SMALLINT,
      RU_ID BIGINT,
      RUSECTION_ID BIGINT,
      RUSECTION_DATA_INDEX SMALLINT,
      DATA LONG VARCHAR FOR BIT DATA) 
    下列 DDL 结构说明如何在 Oracle 上创建数据库表:
    CREATE TABLE WAS_TRAN_LOGApp1(
      SERVER_NAME VARCHAR(128),
      SERVICE_ID SMALLINT,
      RU_ID NUMBER(19),
      RUSECTION_ID NUMBER(19),
      RUSECTION_DATA_INDEX SMALLINT,
      DATA BLOB)
    CREATE TABLE WAS_PARTNER_LOGApp1(
      SERVER_NAME VARCHAR(128),
      SERVICE_ID SMALLINT,
      RU_ID NUMBER(19),
      RUSECTION_ID NUMBER(19),
      RUSECTION_DATA_INDEX SMALLINT,
      DATA BLOB)
    CREATE TABLE WAS_COMP_LOGApp1(
      SERVER_NAME VARCHAR(128),
      SERVICE_ID SMALLINT,
      RU_ID NUMBER(19),
      RUSECTION_ID NUMBER(19),
      RUSECTION_DATA_INDEX SMALLINT,
      DATA BLOB)

示例

如果您的某个集群名为 AppCluster 且具有四个成员服务器 AppClusterMember1、AppClusterMember2、AppClusterMember3 和 AppClusterMember4,请按以下所示配置日志位置:
集群名称 服务器名称 事务日志表 补偿日志表
AppCluster AppClusterMember1 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App1 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App1
AppClusterMember2 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App2 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App2
AppClusterMember3 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App3 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App3
AppClusterMember4 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App4 custom://com.ibm.rls.jdbc.SQLRecoveryLog?datasource=jdbc/tranlog,tablesuffix=App4
在此示例中,表后缀设置为:
  • AppClusterMember1
  • AppClusterMember2
  • AppClusterMember3
  • AppClusterMember4
将创建具有下列名称的数据库表:
  • WAS_TRAN_LOGApp1
  • WAS_TRAN_LOGApp2
  • WAS_TRAN_LOGApp3
  • WAS_TRAN_LOGApp4
  • WAS_PARTNER_LOGApp1
  • WAS_PARTNER_LOGApp2
  • WAS_PARTNER_LOGApp3
  • WAS_PARTNER_LOGApp4
  • WAS_COMP_LOGApp1
  • WAS_COMP_LOGApp2
  • WAS_COMP_LOGApp3
  • WAS_COMP_LOGApp4

指示主题类型的图标 任务主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjta_store_logs_in_rdb
文件名:tjta_store_logs_in_rdb.html