services:
rabbitmq-1:
image: rabbitmq:3.13.3-management
container_name: rabbitmq-1
hostname: rabbitmq-1
environment:
- RABBITMQ_ERLANG_COOKIE=hellorabbitmq
ports:
- 15672:15672
- 5672:5672
rabbitmq-2:
image: rabbitmq:3.13.3-management
container_name: rabbitmq-2
hostname: rabbitmq-2
depends_on:
- rabbitmq-1
environment:
- RABBITMQ_ERLANG_COOKIE=hellorabbitmq
rabbitmq-3:
image: rabbitmq:3.13.3-management
container_name: rabbitmq-3
hostname: rabbitmq-3
depends_on:
- rabbitmq-1
environment:
- RABBITMQ_ERLANG_COOKIE=hellorabbitmq
3개의 RabbitMQ 노드를 띄우는 yml파일이다. 이 파일을 docker-compose
로 실행하자.
그러면 이렇게 3개의 컨테이너가 정상적으로 생성된 것을 확인할 수 있다.
그리고, 아래 명령어들을 통해서 2번째, 3번째 노드를 클러스터에 붙여주자.
docker exec -it rabbitmq-2 rabbitmqctl stop_app
docker exec -it rabbitmq-2 rabbitmqctl reset
docker exec -it rabbitmq-2 rabbitmqctl join_cluster rabbit@rabbitmq-1
docker exec -it rabbitmq-2 rabbitmqctl start_app
docker exec -it rabbitmq-3 rabbitmqctl stop_app
docker exec -it rabbitmq-3 rabbitmqctl reset
docker exec -it rabbitmq-3 rabbitmqctl join_cluster rabbit@rabbitmq-1
docker exec -it rabbitmq-3 rabbitmqctl start_app
위 명령어들을 수행하면, 첫번째 RabbitMQ 노드에 나머지 2개가 클러스터로 Join하게 된다.
RabbitMQ Management UI에 접속해보면, 이렇게 3개의 노드가 출력되는 것을 확인할 수 있다.
위에서는 rabbitmqctl
의 join_cluster
명령어를 통해서 Scale out을 해보았다면, 이번에는 Scale in을 해보도록 하겠다.
docker exec -it rabbitmq-3 rabbitmqctl stop_app
위 명령어를 통해서 먼저 3번째 노드를 중지하자.
docker exec -it rabbitmq-2 rabbitmqctl forget_cluster_node rabbit@rabbitmq-3
첫번째 또는 두번째 노드에 위 명령어를 수행하면 3번째 노드는 클러스터에서 제거된다.
나는 두번째 노드에 명령어를 실행했다.
세번째 노드가 클러스터에서 빠지고, 2개의 노드만 클러스터로 묶여 있는 것을 확인할 수 있다.
docker exec -it rabbitmq-3 rabbitmqctl stop_app
docker exec -it rabbitmq-3 rabbitmqctl reset
제외할 노드를 중지하고 Reset해도 클러스터에서 제거할 수 있다.