![使用 AWS ALB 实现 Ejabberd 集群负载平衡](https://linux22.com/image/760596/%E4%BD%BF%E7%94%A8%20AWS%20ALB%20%E5%AE%9E%E7%8E%B0%20Ejabberd%20%E9%9B%86%E7%BE%A4%E8%B4%9F%E8%BD%BD%E5%B9%B3%E8%A1%A1.png)
在此总结一下我的要求。
在 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">>}]