RabbitMQ 고가용성(HA) 를 위해 Cluster 하는 방법 (RabbitMQ HA)

RabbitMQ를 두대 이상의 PC/Server/VM 에 설치 하는 경우 HA(High Availability)를 확보 하기 위해 클러스터 Cluster로 만들어서 사용 할 수 있습니다. 이번 포스트에서는 커맨드 위주로 간단하게 클러스터를 만들어 보겠습니다.

참고: https://www.rabbitmq.com/clustering.html

rabbitmq 클러스터링 하기

PC2를 PC1의 클러스터에 join 시키는 예로 진행 해 보겠습니다.

@ 커맨드는 centos6 기준으로 작성 되었습니다.

  1. rabbitmq-env.conf 파일 확인

    1
    sudo vi /etc/rabbitmq/rabbitmq-env.conf

    port나 directory등이 클러스터링 할 노드들 간에 서로 동일하게 설정 되어 있는지 확인 합니다.

  2. service stop (PC2에서)

    1
    sudo service rabbitmq-server stop
  3. erlang cookie 맞추기 (한개서버의 erlang cookie값으로 통일)

    1
    sudo cat /var/lib/rabbitmq/.erlang.cookie
  4. startup (PC2에서)

    1
    sudo service rabbitmq-server start
  5. 각 서버 cluster_status 확인 (PC1 클러스터 이름확인)

    1
    sudo rabbitmqctl cluster_status

    클러스터 이름은 rabbit@nakjunizm 으로 확인 됐습니다.

  6. application stop (PC2에서)

    1
    sudo rabbitmqctl stop_app
  7. join (PC2에서)

    1
    sudo rabbitmqctl join_cluster rabbit@nakjunizm
  8. application start (PC2에서)

    1
    sudo rabbitmqctl start_app

작업내용을 기록해 놓기 위한 포스트로 각 단계의 자세한 설명은 생략하였습니다.
주의사항은 Queue는 mirror 되어 있어야 합니다. (제 경우 ha-all)

queue mirror 관련 docs: https://www.rabbitmq.com/ha.html

위 단계들을 모두 마치고 cluster를 만들었으면 Active/Active 상태의 클러스터 이기 때문에, 어느 쪽에 데이터가 들어가던지 ha 전략에 따라 각 노드에 분산 됩니다. 그러므로

  1. 클러스터의 앞단에 Load balancer를 놓고 클라이언트에서는 Load balancer에 request를 요청한다.
  2. 클라이언트에서 각 클러스터의 주소값을 다 알고 있고, 코드에서 어느쪽으로 request를 요청할지 결정한다.

두가지 옵션 중 편한쪽으로 선택하여 사용하기시 바랍니다.

Share