使用 Websphere Message Broker 来配置 WebSphere Adapter for SAP 以提供高可用性

这篇文章展示了如何在主动-主动高可用性 (HA) 解决方 案中配置 WebSphere Adapter for SAP(以下简称为 SAP Adapter)及 Websphere Message Broker(以下简称为 Message Broker)。本文还展示了如何设置一个共享队列,处理事务 ID (TID) 存储

Matu Agarwal, 软件工程师, WebSphere Adapters, IBM

Matu Agarwal 的照片Matu Agarwal 是 IBM India 的 WebSphere Adapters 团队的一名软件工程师,从事开发和客户支持方面的工作。他获得了坎普尔 H.B.T.I. 的计算机科学和工程学技术学位,在使用包括 JCA 在内的各种 Java 技术方面拥有 3 年半的经验。



Ribu Rajan, 软件工程师, IBM

作者照片Ribu Rajan 拥有 5 年工作经验,其中 IT 经验超过 2 年,其余时间从事管理工作。他与 WebSphere Application Server 服务团队进行过合作,目前从事 WebSphere Message Broker Post GA 测试工作。Ribu 是计算机科学专业的研究生,并获得了软件工程专业的高级文凭。他还拥有 .Net、Java 和 WebSphere Application Server 领域的证书。



Ritesh Srivastava, 系统软件工程师, IBM

Ritesh Srivastava 的照片Ritesh Srivastava 是位于印度班加罗尔的 IBM 软件实验室的 WebSphere Message Broker Post-GA Test 团队的一名系统软件工程师。他拥有电子学学士学位和 5 年软件测试和自动化经验。



2012 年 6 月 11 日

免费下载:IBM® WebSphere® Message Broker 试用版
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

简介

主动-主动高可用性 (HA) 解决方案保持两个或更多的系统始终联机,即便出现任何故障,应用程序和用户也能继续正常工作,不会出现出现中断。您可以在一个主动-主动配置中使用多个代理实例,设置 IBM® WebSphere® Message Broker 的高可用性。如果一个代理崩溃,另外一个运行相同应用程序的代理将取而代之,确保应用程序的连续可用性,完全不需要任何管理干预。当然,高可用性在很多场景中都极其重要,例如涉及关键数据库、财务交易和电子商务的场景。

先决条件

为了配置和部署模块,您需要具备:

  • WebSphere Message Broker V7
  • WebSphere Adapter for SAP V7 软件
  • 通过预先配置的 IDoc/BAPI 处理来访问 SAP 系统
  • 安装了必要的代理的服务器
  • 对 Message Broker 和 SAP Adapter 有基本认识。如需了解有关这两种产品的更多信息,请参见本文末尾处的 参考资料 部分。

Message Broker 高可用性支持

Message Broker V6.1 不支持在共享队列中存储 TID 存储,因为每个代理都具有一个独立的 TID 存储。因此,如果 SAP Adapter 交付了一个事件,并在完成更新之前断开连接,那么 SAP 会尝试重新将消息交付至另外一个代理。由于代理具有独立的 TID 存储,因此第二个代理将重新交付事件,即便第一个代理已经对事件进行了处理。正因如此,Message Broker V6.1 无法保证仅有一次的交付。

Message Broker V6.1 上的 SAP Adapter 高可用性设置
Message Broker V6.1 上的 SAP Adapter 高可用性设置

利用 Message Broker V7 解决重复事件问题

Message Broker V7 支持将共享队列作为 TID 存储,运行在单独一个远程队列管理器中配置两个或更多代理的 TID 存储。由于所有代理均读取同一个 TID 存储,因此 Message Broker 就能够确保事务完整性,在发生连接故障时避免出现重复的事件交付。

Message Broker V7 上的 SAP Adapter 高可用性设置
Message Broker V7 上的 SAP Adapter 高可用性设置

SAP Adapter 高可用性设置

下面的场景使用了两个代理实例,这两个示例分别安装在不同的服务器上,用于实现高可用性。用来维护 TID 存储的队列管理器是安装在另外一台服务器上的一个共享队列。因此,如果一个代理发生故障,另一个代理仍将保持活动状态,以便提供连续可用性。该场景使用以下服务器:

  • 服务器 1 -- 托管远程队列管理器 SAPQM 及 TID 存储和一个 SVRCONN 信道
  • 服务器 2 -- 托管代理 BRK1,部署了 SAP 消息流,指向远程队列管理器 SAPQM 的一个 CLNTCONN 信道
  • 服务器 3 -- 托管代理 BRK2,部署了 SAP 消息流,指向远程队列管理器 SAPQM 的一个 CLNTCONN 信道

在服务器 1 上创建通用 TID 存储

要实现高可用性,则需要先在服务器 1 中为 SAP 适配器事件存储设置一个共享队列。如前文所述,代理将配置为使用远程队列管理器,保持 SAP 事务 RFC (tRFC) 数据的 TID 存储。利用这样的配置,部署在两个不同代理上的两个 SAP 消息流即可共享远程队列管理器上的相同 TID 存储,因此可以作为单独一个 RFC 服务器运行。如果 SAP 消息流是使用相同的 RFC 程序 ID 进行配置的,那么这种配置非常重要。

为了使两个代理都使用远程队列管理器中的 TID 存储,请按以下步骤操作,您可以利用 WebSphere MQ Explorer 执行这些步骤,也可以在 WebSphere MQ runmqsc 中运行命令来实现相同的目标。本文将使用 Microsoft® Windows® 命令。

  1. 创建队列管理器 SAPQM
    CRTMQM SAPQM
  2. 创建队列 SYSTEM.BROKER.ADAPTER.PROCESSED,用它作为远程代理使用的共享 TID 存储:
    DEFINE QLOCAL('SYSTEM.BROKER.ADAPTER.PROCESSED')
  3. 创建服务器信道,用它来实现远程代理与 SAPQM 的通信。信道名称是 SAPBRKCHL
    DEFINE CHANNEL ('SAPBRKCHL') CHLTYPE (SVRCONN) TRPTYPE(TCP)
  4. 启动信道:
    START CHANNEL ('SAPBRKCHL')
  5. 创建客户端定义文件 AMQCLCHL.TAB
    DEFINE CHANNEL ('SAPBRKCHL') CHLTYPE (CLNTCONN) CONNAME('myhost.ibm.com(1414)') TRPTYPE(TCP) QMNAME(QMGR)
    1. SAPBRKCHL -- 第 3 步中创建的 SVRCONN 信道名称。
    2. myhost.ibm.com -- 定义共享队列管理器的服务器主机名,在本例中为服务器 1。
    3. 1414 -- 在队列管理器 SAPQM 上运行监听器的默认监听器端口编号。
    4. QMGR -- 队列管理器名称,即 SAPQM
  6. 在 Windows 中,您可以在以下目录找到此文件:
    C:\Program Files\IBM\WebSphere MQ\Qmgrs\QMGR_NAME\@ipcc\AMQCLCHL.TAB
    将此文件移动到服务器 2 和服务器 3 中,将其存储在代理 BRK1 和 BRK2 可以访问的某个目录中。

创建 SAP 适配器输入节点并配置入站消息流

  1. 在服务器 2 和服务器 3 上创建和配置代理实例之前,务必确保您的 SAP Adapter 消息流已经准备就绪。
  2. 对 SAP Adapter 入站场景运行 Adapter Connection 向导(ALE 入站界面),为 IDoc (ORDERS05) 创建消息集合。
  3. 提供要将 IDoc 发送给 SQP Adapter 的 SAP 端配置的 RFCProgramId。
  4. 将所创建的 SAPInput 节点命名为 SAPHA.inadapter
  5. 配置消息流,将 SAP Adapter 接收到的 Idoc 发送至 MQ 队列。

有关在 Broker 上创建和配置 SAP Adapter 的更多信息,请参见本文末尾处的 参考资料 部分。

配置代理实例并将其连接到 TID 存储

服务器 2

  1. 创建代理 BRK1:
    mqsicreatebroker BRK1 -i [Serviceuserid] -a [Password] -q [BrokerQueueManager]
  2. 启动代理 BRK1:
    mqsistart BRK1
  3. 配置代理 BRK1,以便获取必要的 JAR 文件,连接到 SAP:
    1. 配置 JAR URL:
      mqsichangeproperties BRK1 -c EISProviders -o SAP -n jarsURL -v C:\SAP_JCO
    2. 配置 nativeLibs:
      mqsichangeproperties BRK1 -c EISProviders -o SAP -n nativeLibs -v C:\SAP_JCO
      • Filepath -- sapjco3.jarsapjco3.dll 复制到 C:\SAP_JCO
    3. 重新启动代理 BRK1
    4. 确认代理属性已经正确设置:
      mqsireportproperties BRK1 -c EISProviders -o SAP -r
  4. 将代理 BRK1 连接到工具包。
  5. 为代理 BRK1 创建执行组 SAPEG1。
  6. 为 BRK1 创建可配置的服务,以便读取远程队列管理器中的 TID 存储:
    1. 为 BRK1 创建可配置的服务:
      mqsicreateconfigurableservice BRK1 -c SAPConnection -o SAPHA.inadapter
      • AdapterNodeName -- SAP Adapter 节点为 SAPHA.inadapter
    2. mqsichangeproperties BRK1 -c SAPConnection -n sharedTidStoreClientDefinitionFile, sharedTidStoreQmgr -v [PathToClientDefinitionFile],[RemoteQueueManagerName]
      • [PathToClientDefinitionFile] -- AMQCLCHL.TAB,这是从服务器 1 中复制而来的。
      • [RemoteQueueManagerName] -- SAPQM
    3. 重新启动代理 BRK1。
    4. 按照上述步骤的说明,确定代理属性已经正确设置:
      mqsireportproperties BRK1 -c SAPConnection -o SAPHA.inadapter -r
  7. 确保服务器 1 的配置已经完成,从而确保 BRK 1 可以使用 TID 存储。
  8. 将 SAP 消息流部署到 SAPEG1
  9. 完成这些步骤之后,检查用户跟踪记录,确认代理使用的是远程队列管理器中的队列。如果设置成功,则将发出一条 BIP3470 消息,指定代理用作 TID 存储的队列管理器。

服务器 3

对于服务器 3,使用与服务器 2 相同的命令来创建和配置代理 BRK2。随后部署之前在 SAPEG2 中创建的相同消息流。为了确认代理正在使用远程 TID 存储,请检查事件日志中是否有 BIP3470 消息。

测试消息流

  1. 确保所有代理实例(BRK1 和 BRK2)均有处于活动状态的消息流,且正在侦听 IDoc。
  2. 将 IDoc 从 SAP 发送到已配置的 RFC ProgramId。
  3. 转到消息流中指明的 MQ 队列,确认它接收到了 SAP 发送的 IDoc。应该有一个代理接收到 SAP 发送的 IDoc。
  4. 为了进行测试,请停用接收到 IDoc 的代理实例 BRK1。代理 BRK2 上部署的消息流现在应该接收到后续 IDoc。
  5. 将另一个 IDoc 从 SAP 发送到已配置的 RFC ProgramId。转到消息流中指明的 MQ 队列,确认它接收到了 BRK2 发送的 IDoc。

重点:在这篇文章中,我们使用了两个代理,创建了主动-主动高可用性配置。当然,可以根据需要添加更多的代理实例,如果其中某个代理实例崩溃,应用程序仍能够继续正常运行、继续监听 IDoc。但在本文中,如果 SAPQM 队列管理器发生故障,则会出现故障点,因为该队列管理器没有备份。为了给这个队列管理器添加冗余,您需要添加一个多实例队列管理器,如需了解相关细节,请参阅本文末尾处的 参考资料 部分。

故障排除

请核对下列要点,以避免常见问题:

  1. SVRCONN 信道正常运行。
  2. 两台服务器上的代理均能访问客户端信道定义文件。
  3. 代理指向正确的 SAP JCO 文件。
  4. sharedTidStoreClientDefinitionFile 和 sharedTidStoreQmgr 的值是正确的。
  5. 如需验证各代理的属性值,可以使用命令 mqsireportproperties [BROKERNAME] -c SAPConnection -o [ADAPTERNODE] -r
  6. 如需了解更多具体信息,可以查看系统日志、Event Viewer 或用户跟踪记录及系统跟踪记录。

结束语

高可用性实现在集群中构建冗余来消除单一故障点。本文介绍了 WebSphere Message Broker 与 WebSphere Adapter for SAP 软件的主动-主动高可用性配置,在这种配置中,所有代理实例均始终保持活动,任何一个实例均可接收事件。

致谢

作者特此感谢 WebSphere Adapters 开发团队的 Ramkumar Ramalingam 和 WebSphere 技术支持团队的 Devipriya Selvarajan 对本文做出的精心审查。

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=820657
ArticleTitle=使用 Websphere Message Broker 来配置 WebSphere Adapter for SAP 以提供高可用性
publish-date=06112012