3

2 つの Tibco-Ems サーバーを実行しており、フォールト トレラント セットアップを使用しています。1 つのサーバーが使用できない場合、アクティブ サーバーは期待どおりにフェールオーバー サーバーに切り替わります。

ただし、時々奇妙なエラーが発生します。次に、新しいアクティブサーバーは次のように言います:「再接続に失敗しました:id = XYの接続が不明です」

これは、クライアントに開いている接続がある場合にのみ発生します。しかし、それは私が期待することであり、接続も新しいアクティブサーバーに切り替わるはずです。そして、私が言ったように、うまくいくこともあれば、うまくいかないこともあります。

クライアントで EMS-Exceptions に登録すると、「トランスポート接続からデータを読み取れません: 既存の接続がリモート ホストによって強制的に閉じられました。」というエラーが表示されます。

スタックトレース: System.Net.Sockets.NetworkStream.Read(Byte[] バッファー、Int32 オフセット、Int32 サイズ) で TIBCO.EMS.LinkTcp._readEx(Byte[] バッファー、Int32 オフセット、Int32 サイズ) で TIBCO.EMS.LinkTcp ._ReadWireMsg() at TIBCO.EMS.LinkTcp.LinkReader.Work()

今、私は自分に何ができるのか分かりません。たぶん、誰かが正確な問題が何であるかを理解するのを手伝ってくれるでしょう。前もって感謝します

更新: ここでの最新の更新:「再接続に失敗しました」というエラーが表示されても、期待どおりに動作します。2 番目のサーバーが引き継ぎます。

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 に答える
0

これは、サーバー レベルの FT ではなく、クライアント サイドの FT を使用している場合に発生します。少なくとも、根本的な原因であるこの問題に直面した場合に発生します。

FT URL server1:port,server2:port で ems サーバーを使用しているが、サーバーが実際には FT モードではない場合、これら 2 つのサーバー間で接続が切り替わると、接続が別のサーバーに移動するときにこの問題が発生します。しかし、FT セットアップの一貫性がないため、障害が発生したサーバーの既存の接続を新しいアクティブ サーバーが破棄または取得できませんでした。

サーバー側の真の FT セットアップでは、アクティブ サーバーはこれらの接続がアクティブであると自動的に想定し、サービスを提供し続けます。サーバー レベルの構成を確認してください。

私たちにとって、サーバー レベルの FT を提供することは、この問題の解決に役立ちました。

于 2014-10-27T12:37:54.077 に答える