如何正确配置实现消息引擎的故障转移

日期: 2010-02-24 来源:TechTarget中国 英文

    问题描述; 当运行中的消息引擎所在的机器出现网络故障或者宕机时,在延迟许多分钟后,仍无法进行故障转移以切换至另一个服务器上运行的消息引擎,并在日志中显示以下错误消息:

[3/9/09 18:07:54:327 CST] 00000086 SibMessage I [SCA.SYSTEM.saic_gbom_cell.Bus:default.AppTarget.000-SCA.SYSTEM.saic_gbom_cell.Bus] CWSIS1538I: The messaging engine, ME_UUID=2025B17928C161D6, INC_UUID=303A303AEAB3EDD7, is attempting to obtain an exclusive lock on the data store.

[3/9/09 18:07:59:343 CST] 00000086 SibMessage I [SCA.SYSTEM.saic_gbom_cell.Bus:default.AppTarget.000-SCA.SYSTEM.saic_gbom_cell.Bus] CWSIS1546I: The messaging engine, ME_UUID=2025B17928C161D6, INC_UUID=303A303AEAB3EDD7, has lost an existing lock or failed to gain an initial lock on the data store.

  解答:消息引擎在运行时,会通过TCP/IP方式与后台数据存储器相连,并对数据存储器中的SIBOWNER表锁定,保存为一行中的一对唯一标识。当消息引擎启动时,它使用可以确定唯一性的标识来获得并维护它的互斥锁定。当消息引擎突然主动关闭连接时(网络故障或宕机),数据库方面不会主动探测连接状况,所以不会释放对SIBOWNER表上的互斥锁,因此在这段时间内其余的消息引擎无法顺利启动。

  对于消息引擎的调优,必须把握一个原则:其他服务器消息引擎尝试连接数据库的时间>数据库探测以前的连接丢失的时间。

  WebSphere Process Server/WebSphere Application Server会在一定时间内等待数据库连接恢复。缺省状况下,其他服务器上消息引擎会在15分钟内以2秒的频率尝试连接数据库,如果仍无法连接则放弃重连;而数据库所在的操作系统通过keepalive等参数来探测连接是否丢失。对于常用操作系统如Windows,AIX等,缺省是2个小时。可见,如果使用缺省值,数据库机器会在连接丢失后2小时内保持互斥锁,而可用的其它消息引擎只会尝试15分钟重连,造成无法实现错误转移的现象。因此,可以从两个方面分别对WPS和数据库所在机器进行调优,实现消息引擎的故障转移:

  1. 配置数据库所在机器:

  操作系统控制TCP/IP连接的参数有:

 在Windows系统上参数名 在AIX系统上参数名 参数描述
 KeepAliveTime tcp_keepidle 对于不活动的连接方发送keepalive请求的间隔
 KeepAliveInterval tcp_keepintvl 等待请求回复的间隔
 TCPMaxDataRetransmissions tcp_keepcnt 重复发送请求的次数

    在Windows系统上参数名 在AIX系统上参数名 参数描述

  KeepAliveTime tcp_keepidle 对于不活动的连接方发送keepalive请求的间隔

  KeepAliveInterval tcp_keepintvl 等待请求回复的间隔

  TCPMaxDataRetransmissions tcp_keepcnt 重复发送请求的次数

  操作系统获知连接丢失的时间=keep alive time + (keep alive interval x 请求次数)。保证调优后此数值小于消息引擎尝试连接时间即可实现正确的故障转移。

  2. 配置WPS/WAS:

  a.在管理控制台里点击服务集成(Service integration) > 总线(Buses) > 总线名称 > 消息引擎([Topology] Messaging engines) > 引擎名(engine_name) > [Additional Properties] Custom properties

  b.新建定制属性并起名为sib.msgstore.jdbcInitialDatasourceWaitTimeout,此属性控制等待重连数据库的时间。并输入属性值,单位为毫秒。缺省值为900000(15分钟)。点击OK。保证调优后此数值大于数据库探测连接丢失的时间即可。

  c.另新建定制属性sib.msgstore.jdbcStaleConnectionRetryDelay,本属性控制每次重连数据库的时间间隔。输入属性值,单位为毫秒,缺省为2000(2秒)。点击OK。

  d.将修改保存到主配置。

  e.在集群环境中,对其中的每一个消息引擎都重复上述步骤。

  f.重启服务器。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国