使用 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 中检查帐户,或将数据库转储到文本文件并查看密码表,或使用 ejabberdctl debug 或 live 和命令:

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

相关内容