RabbitMQ 일시 중지된 대기열 동기화 문제 해결 - Amazon MQ

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

RabbitMQ 일시 중지된 대기열 동기화 문제 해결

RabbitMQ용 Amazon MQ 클러스터 배포에서 각 대기열에 게시된 메시지는 세 개의 브로커 노드 간에 복제됩니다. 미러링이라고 하는 이 복제는 RabbitMQ 브로커에 고가용성(HA)을 제공합니다. 클러스터 배포의 대기열은 한 노드의 기본 복제본과 하나 이상의 미러로 구성됩니다. 미러링된 대기열에 적용되는 메시지 대기열에 넣기를 비롯한 모든 작업은 먼저 기본 대기열에 적용된 다음 해당 미러 전체에 복제됩니다.

예를 들어 미러링된 대기열이 기본 노드(main)와 두 개 미러(mirror-1mirror-2)의 세 개 노드에서 복제된다고 가정합니다. 이 미러링된 대기열의 모든 메시지가 모든 미러에 전파되면 대기열이 동기화됩니다. 노드(mirror-1)가 일정 시간 사용할 수 없게 되더라도 대기열은 작동하고 계속 메시지를 대기열에 넣을 수 있습니다. 그러나 대기열을 동기화하려면 mirror-1을 사용할 수 없는 동안 main에 게시된 메시지를 mirror-1에 복제해야 합니다.

미러링에 대한 자세한 내용은 RabbitMQ 웹 사이트에서 클래식 미러링된 대기열을 참조하세요.

유지 관리 및 대기열 동기화

유지 관리 기간 중 Amazon MQ는 모든 유지 관리 작업을 한 번에 한 노드에서 수행하여 브로커가 계속 작동하도록 합니다. 따라서 각 노드의 작동이 다시 시작할 때 대기열을 동기화해야 할 수 있습니다. 동기화하는 동안 미러에 복제되어야 하는 메시지는 해당하는 Amazon Elastic Block Store(Amazon EBS) 볼륨에서 메모리로 로드되어 배치로 처리됩니다. 메시지를 배치로 처리하면 대기열을 더 빠르게 동기화할 수 있습니다.

대기열이 짧게 유지되고 메시지가 작으면 대기열이 성공적으로 동기화되고 예상대로 작업이 재개됩니다. 그러나 배치의 데이터 양이 노드의 메모리 한도에 가까워지면 노드에서 고용량 메모리 경보가 발생하여 대기열 동기화가 일시 중지됩니다. 메모리 사용량은 CloudWatch의 브로커 노드 지표 RabbitMemUsedRabbitMqMemLimit를 비교하여 확인할 수 있습니다. 메시지가 사용 또는 삭제되거나 배치의 메시지 수가 줄지 않으면 동기화가 완료될 수 없습니다.

참고

대기열 동기화 배치 크기를 줄이면 복제 트랜잭션 수가 더 많아질 수 있습니다.

일시 중지된 대기열 동기화 문제를 해결하려면 ha-sync-batch-size 정책을 적용하고 대기열 동기화를 다시 시작하는 방법을 보여주는 이 자습서의 단계를 따릅니다.

사전 조건

이 자습서를 사용하려면 관리자 권한이 있는 RabbitMQ용 Amazon MQ 브로커 사용자가 있어야 합니다. 브로커를 처음 생성할 때 만든 관리자 사용자를 사용하거나 나중에 만들었을 수 있는 다른 사용자를 사용할 수 있습니다. 다음 표에는 필요한 관리자 사용자 태그 및 권한이 정규식(regexp) 패턴으로 나와 있습니다.

태그 regexp 읽기 regexp 구성 regexp 쓰기
administrator .* .* .*

RabbitMQ 사용자를 생성하고 사용자 태그 및 권한을 관리하는 방법에 대한 자세한 내용은 래빗MQ 브로커 사용자를 위한 아마존 MQ 단원을 참조하세요.

1단계: ha-sync-batch-size 정책 적용

다음 절차에서는 브로커에서 생성되는 모든 대기열에 적용되는 정책을 추가하는 방법을 보여줍니다. RabbitMQ 웹 콘솔이나 RabbitMQ 관리 API를 사용할 수 있습니다. 자세한 내용은 RabbitMQ 웹 사이트에서 관리 플러그 인을 참조하세요.

RabbitMQ 웹 콘솔을 사용하여 ha-sync-batch-size 정책을 적용하려면
  1. Amazon MQ 콘솔에 로그인합니다.

  2. 왼쪽 탐색 창에서 Brokers(브로커)를 선택합니다.

  3. 브로커 목록에서 새 정책을 적용할 브로커의 이름을 선택합니다.

  4. 브로커 페이지의 Connections(연결) 섹션에서 RabbitMQ 웹 콘솔 URL을 선택합니다. RabbitMQ 웹 콘솔이 새 브라우저 탭 또는 창에 열립니다.

  5. 브로커 관리자 로그인 보안 인증 정보를 사용하여 RabbitMQ 웹 콘솔에 로그인합니다.

  6. RabbitMQ 웹 콘솔의 페이지 상단에서 Admin(관리자)을 선택합니다.

  7. Admin(관리자) 페이지의 오른쪽 탐색 창에서 Policies(정책)를 선택합니다.

  8. Policies(정책) 페이지에서 브로커의 현재 User policies(사용자 정책) 목록을 볼 수 있습니다. User policies(사용자 정책) 아래에서 Add / update a policy(정책 추가/업데이트)를 확장합니다.

    참고

    기본적으로 RabbitMQ용 Amazon MQ 클러스터는 ha-all-AWS-OWNED-DO-NOT-DELETE라는 초기 브로커 정책과 함께 생성됩니다. Amazon MQ는 브로커의 모든 대기열이 세 노드 모두에 복제되고 대기열이 자동으로 동기화되도록 이 정책을 관리합니다.

  9. 새 브로커 정책을 생성하려면 Add / update a policy(정책 추가/업데이트)에서 다음을 수행합니다.

    1. Name(이름)에 정책의 이름을 입력합니다(예: batch-size-policy).

    2. Pattern(패턴)에 regexp 패턴 .*를 입력합니다. 이 경우 정책이 브로커의 모든 대기열과 일치합니다.

    3. Apply to(적용 대상)의 드롭다운 목록에서 Exchanges and queues(교환 및 대기열)를 선택합니다.

    4. Priority(우선 순위)에 vhost에 적용된 다른 모든 정책보다 큰 정수를 입력합니다. 지정된 시간에 RabbitMQ 대기열 및 교환에 정확히 하나의 정책 정의 집합을 적용할 수 있습니다. RabbitMQ는 가장 높은 우선 순위 값과 일치하는 정책을 선택합니다. 정책 우선 순위 및 정책을 결합하는 방법에 대한 자세한 내용은 RabbitMQ Server 설명서에서 정책을 참조하세요.

    5. Definition(정의)에 다음 키-값 페어를 추가합니다.

      • ha-sync-batch-size=100. 드롭다운 목록에서 Number(숫자)를 선택합니다.

        참고

        대기열에 있는 동기화되지 않은 메시지 수와 크기를 기준으로 ha-sync-batch-size 값을 조정하고 보정해야 할 수 있습니다.

      • ha-mode=all. 드롭다운 목록에서 String(문자열)을 선택합니다.

        중요

        ha-mode 정의는 모든 HA 관련 정책에 필요합니다. 생략하면 검증이 실패합니다.

      • ha-sync-mode=automatic. 드롭다운 목록에서 String(문자열)을 선택합니다.

        참고

        ha-sync-mode 정의는 모든 사용자 지정 정책에 필요합니다. 생략하면 Amazon MQ가 자동으로 정의를 추가합니다.

    6. Add / update policy(정책 추가/업데이트)를 선택합니다.

  10. 새 정책이 User policies(사용자 정책)의 목록에 표시되는지 확인합니다.

RabbitMQ 관리 API를 사용하여 ha-sync-batch-size 정책을 적용하려면
  1. Amazon MQ 콘솔에 로그인합니다.

  2. 왼쪽 탐색 창에서 Brokers(브로커)를 선택합니다.

  3. 브로커 목록에서 새 정책을 적용할 브로커의 이름을 선택합니다.

  4. 브로커 페이지의 Connections(연결) 섹션에서 RabbitMQ 웹 콘솔 URL을 기록합니다. 이는 HTTP 요청에서 사용하는 브로커 엔드포인트입니다.

  5. 새 터미널 또는 원하는 명령줄 창을 엽니다.

  6. 새 브로커 정책을 생성하려면 다음 curl 명령을 입력합니다. 이 명령에서는 대기열이 %2F로 인코딩된 기본 / vhost에 있다고 가정합니다.

    참고

    사용자 이름비밀번호를 브로커 관리자 로그인 보안 인증 정보로 바꾸세요. 대기열에 있는 동기화되지 않은 메시지 수와 크기를 기준으로 ha-sync-batch-size 값(100)을 조정하고 보정해야 할 수 있습니다. 브로커 엔드포인트를 이전에 기록한 URL로 바꿉니다.

    curl -i -u username:password -H "content-type:application/json" -XPUT \ -d '{"pattern":".*", "priority":1, "definition":{"ha-sync-batch-size":100, "ha-mode":"all", "ha-sync-mode":"automatic"}}' \ https://b-589c045f-f8ln-4ab0-a89c-co62e1c32ef8.mq.us-west-2.amazonaws.com/api/policies/%2F/batch-size-policy
  7. 브로커의 사용자 정책에 새 정책이 추가되었는지 확인하려면 다음 curl 명령을 입력하여 모든 브로커 정책을 나열합니다.

    curl -i -u username:password https://b-589c045f-f8ln-4ab0-a89c-co62e1c32ef8.mq.us-west-2.amazonaws.com/api/policies

2단계: 대기열 동기화 다시 시작

브로커에 새 ha-sync-batch-size 정책을 적용한 후 대기열 동기화를 다시 시작합니다.

RabbitMQ 웹 콘솔을 사용하여 대기열 동기화를 다시 시작하려면
참고

RabbitMQ 웹 콘솔을 열려면 이 자습서 1단계의 이전 지침을 참조하세요.

  1. RabbitMQ 웹 콘솔의 페이지 상단에서 Queues(대기열)를 선택합니다.

  2. Queues(대기열) 페이지의 All queues(모든 대기열)에서 일시 중지된 대기열을 찾습니다. Features(기능) 열에서 생성한 새 정책의 이름(예:batch-size-policy)이 대기열에 표시되어야 합니다.

  3. 줄어든 배치 크기로 동기화 프로세스를 다시 시작하려면 Restart sync(동기화 다시 시작)를 선택합니다.

참고

동기화가 일시 중지되고 성공적으로 완료되지 않으면 ha-sync-batch-size 값을 줄이고 대기열 동기화를 다시 시작해 보세요.

다음 단계

  • 대기열이 동기화되면 Amazon CloudWatch 지표 RabbitMQMemUsed를 확인하여 RabbitMQ 노드에서 사용하는 메모리 양을 모니터링할 수 있습니다. 또한 RabbitMQMemLimit 지표를 확인하여 노드의 메모리 제한을 모니터링할 수 있습니다. 자세한 내용은 Amazon CloudWatch MQ 지표에 액세스RabbitMQ 브로커를 위한 Amazon MQ에 사용할 수 있는 CloudWatch 측정항목 단원을 참조하세요.

  • 대기열 동기화 일시 중지를 방지하려면 대기열을 짧게 유지하고 메시지를 처리하는 것이 좋습니다. 메시지 크기가 더 큰 워크로드의 경우 브로커 인스턴스 유형을 메모리가 더 많은 더 큰 인스턴스 크기로 업그레이드하는 것이 좋습니다. 브로커 인스턴스 유형 및 브로커 기본 설정 편집에 대한 자세한 내용은 RabbitMQ용 Amazon MQ 인스턴스 유형브로커 기본 설정 편집 단원을 참조하세요.

  • 새 RabbitMQ용 Amazon MQ 브로커를 생성할 때 Amazon MQ는 브로커 성능을 최적화하기 위해 기본 집합의 브로커 정책 및 가상 호스트 제한을 적용합니다. 브로커에 권장되는 기본 정책 및 제한이 없는 경우 직접 생성하는 것이 좋습니다. 기본 정책 및 vhost 제한을 생성하는 방법에 대한 자세한 내용은 RabbitMQ용 Amazon MQ 브로커 기본값 단원을 참조하세요.

  • UpdateBrokerInput - Amazon MQ API를 사용하여 브로커 인스턴스 유형을 업데이트하려면 이 브로커 속성을 사용합니다.

  • 파라미터 및 정책(RabbitMQ Server 설명서) - RabbitMQ 웹 사이트에서 RabbitMQ 파라미터 및 정책에 대해 자세히 알아봅니다.

  • RabbitMQ 관리 HTTP API - RabbitMQ 관리 API에 대해 자세히 알아봅니다.