AWS ALB를 사용한 Ejabberd 클러스터 로드 밸런싱

AWS ALB를 사용한 Ejabberd 클러스터 로드 밸런싱

여기에 내 요구 사항을 요약합니다.

AWS 애플리케이션 로드 밸런서에서 Ejabberd 클러스터 설정을 구성한 다음 Ejabberd API 요청으로 10,000명의 사용자를 등록합니다. 사용자 계정이 생성되면 해당 사용자로 로그인하고 방을 만들고 여러 사용자 계정이 있는 여러 방에서 채팅 테스트를 수행합니다.

기존 Ejabberd 클러스터 설정을 요약합니다.

AWS 인스턴스에 두 개의 노드가 있는 Ejabberd 클러스터 설정을 구성했습니다. 그런 다음 두 개의 대상 그룹, 즉 포트 번호가 5280(관리 URL)인 대상 그룹 하나와 다른 대상 그룹 5222(XMPP 클라이언트 인증)가 있는 AWS Application Load Balancer를 생성했습니다. 그런 다음 아래 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 로드 밸런싱에 대해서는 모르지만 한 가지 이상한 이유를 언급하겠습니다.

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">>}]

관련 정보