Windows Server 2003R2/2008R2/2012、Openfire 3.8.1、 Hazelcast 1.0.4、MySQL 5.5.30 -ndb-7.2.12-cluster-gpl-log
Openfire Clusterに5 つのサーバーをセットアップしました。それぞれが異なるサブネットにあり、サブネットは異なる都市にあり、VPN ルーター ( 2-8 Mbps )を介して相互接続されています。
192.168.0.1 - node0
192.168.1.1 - node1
192.168.2.1 - node2
192.168.3.1 - node3
192.168.4.1 - node4
Openfireは、マスター node0からすべてのスレーブ ノードに正常に複製されるMySQL データベースを使用するように構成されています(各ノードは、スレーブとして機能する独自のローカル データベース サーバーを使用します)。
Openfire Web Admin > Server Manager > Clusteringで、すべてのクラスタ ノードを確認できます。
Hazelcast のOpenfireカスタム設定:
hazelcast.max.execution.seconds - 30
hazelcast.startup.delay.seconds - 3
hazelcast.startup.retry.count - 3
hazelcast.startup.retry.seconds - 10
node0 の Hazelcast 構成(インターフェイス セクションを除く他のノードでも同様) (%PROGRAMFILES%\Openfire\plugins\hazelcast\classes\hazelcast-cache-config.xml):
<join>
<multicast enabled="false" />
<tcp-ip enabled="true">
<hostname>192.168.0.1:5701</hostname>
<hostname>192.168.1.1:5701</hostname>
<hostname>192.168.2.1:5701</hostname>
<hostname>192.168.3.1:5701</hostname>
<hostname>192.168.4.1:5701</hostname>
</tcp-ip>
<aws enabled="false" />
</join>
<interfaces enabled="true">
<interface>192.168.0.1</interface>
</interfaces>
これらは、デフォルトの設定から変更された唯一の設定です。
問題は、XMPP クライアントの認証が長すぎることです。約 3 ~ 4 分、認証後、名簿内の他のユーザーは5 ~ 7 分間非アクティブです。この間、Openfire Web Admin にログインしているユーザー > セッションはOfflineとしてマークされます。ユーザーが他のログイン ユーザーをアクティブとして表示できた後でも、メッセージが配信されないか、5 ~ 10 分後または Openfire を数回再起動した後に配信されます...
助けていただければ幸いです。このモンスターをセットアップするのに約 5 日間を費やしましたが、アイデアがありません... :(
よろしくお願いします!
UPD 1: Hazelcast 2.5.1 ビルド 20130427と同じ問題でOpenfire 3.8.2 アルファをインストールしました
UPD 2:おそらく1〜2ホップ@ 1〜5ミリ秒のpingで区切られた、同じ都市にある2つのサーバーでクラスターを起動しようとしました。すべてが完璧に機能します!次に、これらのサーバーの1つを停止し、別の都市で1つを開始しました(80〜100ミリ秒のpingで3〜4ホップ)、問題が再び発生しました...承認が遅い、名簿内のユーザーがログオフしている、メッセージが時間通りに配信されないなど.
UPD 3: Openfire 3.8.2を JRE なしでインストールし、Java SDK 1.70_25をインストールしました。
JMX のスクリーンショットは次のとおりです。
ノード 0:
ノード 1:
赤い線は最初のクライアント接続です (Openfire の再起動後)。2 人のユーザーでテスト済み。同じこと...最初のユーザー (node0) は即座に接続し、2 番目のユーザー (node1) は接続に 5 秒を費やしました。名簿には、20 ~ 30 秒間、両側にオフライン ユーザーが表示され、その後、オンライン ユーザーが表示され始めます。最初のユーザーが 2 番目のユーザーにメッセージを送信します。2 番目のユーザーは 20 秒間待機してから、最初のメッセージを受信します。返信と他のすべてのメッセージは即座に転送されます。
更新 4:
JConsole の [Threads] タブを調べていると、次のようなさまざまな状態が見つかりました。
たとえば、hz.openfire.cached.thread-3 :
WAITING on java.util.concurrent.SynchronousQueue$TransferStack@8a5325
Total blocked: 0 Total waited: 449
多分これが役立つかもしれません...私たちは実際にどこを探すべきかわかりません。
ありがとう!