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 

댓글

이 블로그의 인기 게시물

Session 대신 JWT를 사용하는 이유

VSCode에서의 VIM 단축키와 키보드 구매 가이드