RabbitMQ 클러스터링(with Docker)
RabbitMQ 클러스터링(with Docker)
1. docker-compose.yml 2개 작성
1.0 docker network 추가
- 각 docker별로 접속해서 hosts 설정안해 주려면 network를 추가해주면 편함.
$ docker network create --driver bridge mynetwork
1.1 node1
version: '3'
services:
rabbitmq:
image: rabbitmq:latest
restart: unless-stopped
container_name: rabbitmq_node1
ports:
- 5672:5672
- 15672:15672
- 25672:25672
- 35197:35197
environment:
RABBITMQ_DEFAULT_USER: korea
RABBITMQ_DEFAULT_PASS: korea1234
RABBITMQ_ERLANG_COOKIE: mycookie
networks:
default:
external:
name: mynetwork
1.2 node2
version: '3'
services:
rabbitmq:
image: rabbitmq:latest
restart: unless-stopped
container_name: rabbitmq_node2
ports:
- 5673:5672
- 15673:15672
- 25673:25672
- 35198:35197
environment:
RABBITMQ_DEFAULT_USER: korea
RABBITMQ_DEFAULT_PASS: korea1234
RABBITMQ_ERLANG_COOKIE: mycookie
networks:
default:
external:
name: mynetwork
2. erlang 쿠키동기화
- 1번에 이미 세팅했음.
- 수동으로 조작하려면 /var/lib/rabbitmq/.erlang.cookie 파일 내용을 동일하게 전 노드에 세팅해주면 됨.
3. 클러스터링
3.1. Manager 활성화
$ docker exec rabbitmq_node1 rabbitmq-plugins enable rabbitmq_management
$ docker exec rabbitmq_node2 rabbitmq-plugins enable rabbitmq_management
3.2. 클러스터링
# node2의 rabbitmq stop
$ docker exec rabbitmq_node2 rabbitmqctl stop_app
# node1 상태확인
$ docker exec rabbitmq_node1 rabbitmqctl status
# node2의 rabbitmq를 node1에 join
# cluster name은 manager 화면에서 Admin > Cluster 메뉴에서 볼 수 있음
$ docker exec rabbitmq_node2 rabbitmqctl join_cluster rabbit@ad65c2c83c2d
# node2의 rabitmq start
$ docker exec rabbitmq_node2 rabbitmqctl start_app
4. 미러링
$ docker exec rabbitmq_node1 rabbitmqctl set_policy ha-all "ha." '{"ha-mode":"all"}'
mirror 명령어 실행 중 에러나면 manager에 접속해서(localhost:15672) 화면에서 처리 Admin > Policies > 에서 'Add/update a policy'를 선택
name: ha-all
pattern: ^ha.
apply to: Exchange and queues
priority: 0
Definition: ha-mode = all
댓글
댓글 쓰기