RabbitMQ Clustering 구성하기

Wiley Choi
nurigo
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 에 바인드 된다.

--

--