使用 AWS ALB 實現 Ejabberd 叢集負載平衡

使用 AWS ALB 實現 Ejabberd 叢集負載平衡

在這裡總結一下我的要求。

在 AWS 應用程式負載平衡器下配置 Ejabberd 叢集設置,然後使用 Ejabberd API 請求註冊 10K 使用者。建立使用者帳戶後,使用這些使用者登錄,建立房間並使用多個使用者帳戶的多個房間執行聊天測試。

總結現有的 Ejabberd 叢集設定。

我已在 AWS 執行個體中使用兩個節點配置了 Ejabberd 叢集設定。然後,我建立了一個具有兩個目標群組的 AWS 應用程式負載平衡器,一個目標群組的連接埠號碼為 5280(管理 URL),另一個目標群組為 5222(XMPP 用戶端驗證)。然後我使用下面的 API 請求註冊 ejabberd 用戶(我可以使用腳本建立 10K 個帳戶)。

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

到目前為止,Ejabberd 設定正常運作(我在 Ejabberd 設定檔中使用 AWS 負載平衡器網域建立了一個虛擬主機:「/opt/ejabberd/conf/ejabberd.yml」)。

當我嘗試使用 Pidgin XMPP 用戶端對註冊用戶進行身份驗證時,我無法使用負載平衡器網域對註冊用戶進行身份驗證。

我注意到 Ejabberd 伺服器正在接收來自 AWS 負載平衡器內部私人 IP 位址(而不是來自負載平衡器實際網域名稱)的請求,因此 ejabberd 驗證不適用於 AWS 應用程式負載平衡器。

請幫我實現這個要求..

答案1

當我嘗試使用 Pidgin XMPP 用戶端對註冊用戶進行身份驗證時,我無法使用負載平衡器網域對註冊用戶進行身份驗證。

為什麼不?您應該編輯您的貼文並顯示有關該身份驗證嘗試的記錄訊息。

我不了解AWS負載平衡,但我只想提一個奇怪的推理:

我注意到 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">>}]

相關內容