3

我有 2 个 Tibco-Ems 服务器正在运行,具有容错设置。如果一台服务器不可用,则活动服务器将按预期切换到故障转移服务器。

但是,我时不时会遇到奇怪的错误。然后新的活动服务器说:“重新连接失败:id = XY 的连接未知”

仅当我的客户端上有打开的连接时才会发生这种情况。但这就是我所期望的,连接也应该切换到新的活动服务器。正如我所说,有时它有效,有时无效。

当我在客户端注册 EMS-Exceptions 时,我收到错误消息:“无法从传输连接读取数据:现有连接被远程主机强行关闭。”

Stacktrace:在 System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) at TIBCO.EMS.LinkTcp._readEx(Byte[] buffer, Int32 offset, Int32 size) at TIBCO.EMS.LinkTcp ._ReadWireMsg() 在 TIBCO.EMS.LinkTcp.LinkReader.Work()

现在我不知道我能做什么。也许有人可以帮助我了解确切的问题是什么。提前致谢

更新: 此处更新较晚:即使我收到错误“重新连接失败”,它也可以按预期工作。第二台服务器将接管。

4

3 回答 3

4

这是正在发生的事情... EMS 服务器跟踪它拥有的活动客户端连接,并将有关这些连接的信息保存在 meta.db 存储文件中。在容错故障转移时,新的主 EMS 实例能够在客户端重新连接时通过将客户端提供的信息与存储在 meta.db 存储文件中的信息相匹配来恢复客户端连接。

有一个时间点,EMS 会清理尚未重新连接的客户端连接。该时间由 tibemsd.conf 配置文件中的 ft_reconnect_timeout 参数控制。此配置参数的默认设置为 60 秒。根据您在 EMS 清理“过期”连接时的日志记录设置,您可能会看到一条消息,表明它已在您的 EMS 日志中“清除”客户端连接。

在 EMS 服务器已清除“过期”连接后,有时客户端最终会尝试重新连接。如果网络分区阻止客户端成功重新连接到 EMS 服务器,直到 EMS 服务器清除连接后,就会发生这种情况。发生这种情况时,您将看到“重新连接失败:连接未知...”消息。

当客户端由于此错误而无法“重新连接”时,它只是尝试将连接作为“新”连接。这有效,并且能够继续处理。

于 2014-10-29T03:44:42.137 回答
1

我们遇到了同样的问题,我们的错误是存储(ems db)在活动节点和备用节点之间没有共享,所以当活动 em 失败时,新的活动 em 无法恢复连接和消息。

于 2018-03-13T12:51:18.573 回答
0

当您使用客户端 FT 而不是服务器级 FT 时会发生这种情况,至少在我们遇到这个问题时,这是根本原因。

如果您正在使用带有 FT URL server1:port,server2:port 的 ems 服务器,但服务器并非真正处于 FT 模式,则当这两个服务器之间的连接切换时,您将遇到此问题,因为连接会移动到不同的服务器,但由于 FT 设置不连贯,故障服务器上的现有连接无法被新的活动服务器破坏或获取。

在服务器端的真正 FT 设置中,活动服务器自动假定这些连接处于活动状态并继续为它们提供服务。请验证服务器级别配置。

对我们来说,提供服务器级别的 FT 有助于解决这个问题。

于 2014-10-27T12:37:54.077 回答