RabbitMQ를 두대 이상의 PC/Server/VM 에 설치 하는 경우 HA(High Availability)를 확보 하기 위해 클러스터
Cluster
로 만들어서 사용 할 수 있습니다. 이번 포스트에서는 커맨드 위주로 간단하게 클러스터를 만들어 보겠습니다.
참고: https://www.rabbitmq.com/clustering.html
rabbitmq 클러스터링 하기
PC2를 PC1의 클러스터에 join 시키는 예로 진행 해 보겠습니다.
@ 커맨드는 centos6 기준으로 작성 되었습니다.
rabbitmq-env.conf 파일 확인
1
sudo vi /etc/rabbitmq/rabbitmq-env.conf
port나 directory등이 클러스터링 할 노드들 간에 서로 동일하게 설정 되어 있는지 확인 합니다.
service stop (PC2에서)
1
sudo service rabbitmq-server stop
erlang cookie 맞추기 (한개서버의 erlang cookie값으로 통일)
1
sudo cat /var/lib/rabbitmq/.erlang.cookie
startup (PC2에서)
1
sudo service rabbitmq-server start
각 서버 cluster_status 확인 (PC1 클러스터 이름확인)
1
sudo rabbitmqctl cluster_status
클러스터 이름은
rabbit@nakjunizm
으로 확인 됐습니다.application stop (PC2에서)
1
sudo rabbitmqctl stop_app
join (PC2에서)
1
sudo rabbitmqctl join_cluster rabbit@nakjunizm
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 전략에 따라 각 노드에 분산 됩니다. 그러므로
- 클러스터의 앞단에 Load balancer를 놓고 클라이언트에서는 Load balancer에 request를 요청한다.
- 클라이언트에서 각 클러스터의 주소값을 다 알고 있고, 코드에서 어느쪽으로 request를 요청할지 결정한다.
두가지 옵션 중 편한쪽으로 선택하여 사용하기시 바랍니다.