RabbitMQ Clustering 구성하기
Published in
4 min readDec 7, 2018
OS 는 ubuntu 16.04(xenial) 으로 설치한다.
erlang 설치
$ wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb$ sudo dpkg -i erlang-solutions_1.0_all.deb$ sudo apt-get update$ sudo apt-get install erlang erlang-nox
RabbitMQ 설치
현재(2018년 3월 29일) 최신버전인 v1.7.4–1 을 설치 한다.
$ echo "deb https://dl.bintray.com/rabbitmq/debian xenial main" | sudo tee /etc/apt/sources.list.d/bintray.rabbitmq.list$ wget -O- https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc | sudo apt-key add -$ sudo apt-get update$ sudo apt-get install rabbitmq-server
클러스터 구성
$ sudo rabbitmqctl stop_app$ sudo rabbitmqctl join_cluster rabbit@rabbit1$ sudo rabbitmqctl start_app
클러스터 구성 확인
$ sudo rabbitmqctl cluster_status
미러링 구성
$ sudo rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all", "ha-sync-mode":"automatic"}'
클러스터에 묶여 있는 모든 호스트에 미러링하며 모든 큐를 대상으로 한다.
DNS 를 사용한 Load Balancing 및 Failover
아래 스크립트를 사용하여 Healthcheck 데이터를 Cloudwatch 에 전달하고 DNS 의 Failover 의 기준으로 활용한다.
#!/bin/bashINST_ID=i-0585d39be611fc72bSTATUS_OK=`curl http://guest:guest@localhost:15672/api/aliveness-test/%2F`function healthcheck {if [ "$STATUS_OK" == '{"status":"ok"}' ]; thenaws cloudwatch put-metric-data --metric-name "RabbitMQ staging UP/DOWN" --unit Count --value 1 --dimensions InstanceId=$INST_ID --namespace Rabbitmqecho "UP"elseaws cloudwatch put-metric-data --metric-name "RabbitMQ staging UP/DOWN" --unit Count --value 0 --dimensions InstanceId=$INST_ID --namespace Rabbitmqecho "DOWN"fi}healthchecksleep 30healthcheck
Cron 스케줄에 등록해 준다.
* * * * * bash /home/ubuntu/alive.sh >> /home/ubuntu/alive.log 2>&1
VM Instance Type 변경
rabbit1, rabbit2, rabbit3 차례 대로 Instance Type 을 변경해 준다.
RabbitMQ 서버를 정지하고 AWS Console 에서 해당 Instance 정지 및 Instance Type 을 변경한다.
$ sudo service rabbitmq-server stop
Instance Type 변경 후 재시작 해주면 별도로 서버에 Remote 로그인하여 해줄 작업은 없다. RabbitMQ 서버가 알아서 기존 Cluster 에 바인드 된다.