AWS ALB を使用した Ejabberd クラスターの負荷分散

AWS ALB を使用した Ejabberd クラスターの負荷分散

ここで私の要件を要約します。

AWS アプリケーション ロード バランサーで Ejabberd クラスター セットアップを構成し、Ejabberd API リクエストを使用して 10,000 人のユーザーを登録します。ユーザー アカウントが作成されたら、それらのユーザーでログインし、ルームを作成し、複数のユーザー アカウントを持つ複数のルームでチャット テストを実行します。

既存の Ejabberd クラスターのセットアップの概要。

AWS インスタンスに 2 つのノードを持つ Ejabberd クラスター セットアップを構成しました。次に、2 つのターゲット グループを持つ AWS アプリケーション ロード バランサーを作成しました。1 つのターゲット グループはポート番号 5280 (管理 URL)、もう 1 つのターゲット グループは 5222 (XMPP クライアント認証) です。次に、以下の API リクエストを使用して ejabberd ユーザーを登録します (スクリプトを使用して 10,000 個のアカウントを作成する場合があります)。

http://<AWS Load balancer domain name>:5280/api/register
{
      "user": "test_user1",
      "host": "<AWS Load balancer domain name>",
      "password": "********"
}

ここまでは、Ejabberd のセットアップは正常に動作しています (Ejabberd 構成ファイル「/opt/ejabberd/conf/ejabberd.yml」に AWS ロードバランサーのドメイン名を使用して仮想ホストを作成しました)。

Pidgin XMPP クライアントを使用して登録済みユーザーを認証しようとすると、ロード バランサー ドメイン名を使用して登録済みユーザーを認証できません。

Ejabberd サーバーが AWS ロードバランサーの内部プライベート IP アドレス (ロードバランサーの実際のドメイン名からではない) からリクエストを受信して​​いるため、ejabberd 認証が AWS アプリケーション ロードバランサーで機能していないことに気付きました。

この要件を達成するために私を助けてください。

答え1

Pidgin XMPP クライアントを使用して登録済みユーザーを認証しようとすると、ロード バランサー ドメイン名を使用して登録済みユーザーを認証できません。

なぜダメなのでしょうか? 投稿を編集して、その認証試行に関して記録されたメッセージを表示する必要があります。

AWS の負荷分散についてはよくわかりませんが、奇妙な理由を 1 つだけ挙げておきます。

Ejabberd サーバーが AWS ロードバランサーの内部プライベート IP アドレス (ロードバランサーの実際のドメイン名からではない) からリクエストを受信して​​いるため、ejabberd 認証が AWS アプリケーション ロードバランサーで機能していないことに気付きました。

うーん... ejabberd が認証を試行する XMPP スタンザを受信し、正しいアカウント資格情報を提供している限り、その接続がどこから来るのか、どのインターフェイスに接続するのか (5222 リスナー、5280、127.0.0.1、または ejabberd がリッスンしているその他のアドレス) は問題ではありません。

たとえば、アカウントが登録され、正しくログインしたときに記録されるメッセージは次のとおりです。

2020-12-04 12:16:08.006547+01:00 [info] The account user2@localhost
 was registered from IP address 127.0.0.1

2020-12-04 12:16:13.502761+01:00 [info] (<0.675.0>)
 Accepted connection 127.0.0.1:46309 -> 127.0.0.1:5222
2020-12-04 12:16:13.607712+01:00 [info] (tls|<0.675.0>)
 Accepted c2s DIGEST-MD5 authentication for user2@localhost by mnesia backend from 127.0.0.1
2020-12-04 12:16:13.650407+01:00 [info] (tls|<0.675.0>)
 Opened c2s session for user2@localhost/tka1

あなたのアカウントは本当に登録されていますか? どうやって確認していますか? 正しいホストに登録されていますか?

アカウントは、ejabberd WebAdmin で確認することも、データベースをテキスト ファイルにダンプして passwd テーブルを確認することも、ejabberdctl debug または live と次のコマンドを使用することもできます。

(ejabberd@localhost)3> mnesia:dirty_read(passwd,mnesia:dirty_first(passwd)).
[{passwd,{<<"user2">>,<<"localhost">>},
         <<"mypass11'a},ca">>}]

関連情報