1

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:ノード0

ノード 1:ノード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

多分これが役立つかもしれません...私たちは実際にどこを探すべきかわかりません。

ありがとう!

4

1 に答える 1

1

[更新] Hazelcast のドキュメントによる注意- WAN レプリケーションはエンタープライズ バージョンでのみサポートされており、Openfire に同梱されているコミュニティ バージョンではサポートされていません。この機能を使用するには、Hazelcast からエンタープライズ ライセンス キーを取得する必要があります。

複数の LAN ベースの Openfire クラスターをセットアップし、S2S 統合を使用してそれらを個別の XMPP ドメイン間でフェデレーションすることを選択できます。これは、非常に大規模なユーザー ベース向けに Openfire をスケールアップする場合に推奨されるアプローチです。

【原文続きます】

私の推測では、リモート クラスター構成での長いネットワーク レイテンシーが、Hazelcast エグゼキューター スレッド (クエリとイベント用) を拘束している可能性があります。これらのイベントとクエリの一部は、Openfire クラスター内で同期的に呼び出されます。次のプロパティを調整してみてください。

hazelcast.executor.query.thread.count (default: 8)
hazelcast.executor.event.thread.count (default: 16)

これらの値をそれぞれ 40/80 (5x) に設定することから始めて、アプリケーション全体の応答性に改善があるかどうかを確認します。予想される負荷に基づいてさらに改善される可能性もあります。追加の Hazelcast 設定 (他のスレッド プールを含む) と、これらのプロパティを構成 XML に追加する手順は、次の場所にあります。

Hazelcast 構成プロパティ

お役に立てば幸いです...そして頑張ってください!

于 2013-05-22T06:37:59.703 に答える