728x90
반응형
docker pull rabbitmq:3-management
management image를 받지 않으면 대시보드를 사용할 수 없다.
docker run -d --hostname rabbit --name rabbit -p5672:5672 -p 15672:15672 rabbitmq:3-management
-e RABBITMQ_DEFAULT_USER=username -e RABBITMQ_DEFAULT_PASS=password
컨테이너에 올리면서 username과 비밀번호를 설정할 수 있다
default 계정 : guest / guest
rabbitmq cluster 구성 방법
docker run -d --name rabbitmq_node1 -h rabbitmq_node1 -it --network prod -p "15672:15672" -p "5672:5672" -p "25672:25672" -p "35197:35197" -e RABBITMQ_DEFAULT_USER="admin" -e RABBITMQ_DEFAULT_PASS="admin" -e RABBITMQ_ERLANG_COOKIE="mycookie" rabbitmq:3.8-management
docker run -d --name rabbitmq_node2 -h rabbitmq_node2
-it --network prod
-p "15673:15672"
-p "5673:5672"
-p "25673:25672"
-p "35198:35197"
-e RABBITMQ_DEFAULT_USER="admin"
-e RABBITMQ_DEFAULT_PASS="admin"
-e RABBITMQ_ERLANG_COOKIE="mycookie"
rabbitmq:3.8-management
node1과 node2를 컨테이너로 띄운다.
node2에 bash로 접속
$ docker exec -it {node2} bash
# rabbitmq 앱을 종료한다.
$ rabbitmqctl stop_app
# join_cluster를 이용해 조인한다.
$rabbitmqctl join_cluster rabbit@rabbitmq_node1
# 앱을 실행한다.
$rabbitmqctl start_app
Node1에서 cluster_status 확인
Dashboard에서 확인
docker-compose.yml
version: "3.6"
services:
rabbitmq-01:
image: rabbitmq:3.8-management
hostname: rabbitmq-01
networks:
- prod
volumes:
- C:\Users\Administrator\Desktop\rabbitmq\data1:/var/lib/rabbitmq
configs:
- source: rbconfig
target : /etc/rabbitmq/rabbitmq.conf
- source: cookie
target : $HOME/.erlang.cookie
deploy:
mode: global
placement:
constraints: [node.labels.rabbitmq1 == true]
rabbitmq-02:
image: rabbitmq:3.8-management
hostname: rabbitmq-02
networks:
- prod
volumes:
- C:\Users\Administrator\Desktop\rabbitmq\data2:/var/lib/rabbitmq
configs:
- source: rbconfig
target : /etc/rabbitmq/rabbitmq.conf
- source: cookie
target : $HOME/.erlang.cookie
deploy:
mode: global
placement:
constraints: [node.labels.rabbitmq2 == true]
rabbitmq-03:
image: rabbitmq:3.8-management
hostname: rabbitmq-03
networks:
- prod
volumes:
- C:\Users\Administrator\Desktop\rabbitmq\data3:/var/lib/rabbitmq
configs:
- source: rbconfig
target : /etc/rabbitmq/rabbitmq.conf
- source: cookie
target : $HOME/.erlang.cookie
deploy:
mode: global
placement:
constraints: [node.labels.rabbitmq3 == true]
networks:
prod:
external: true
configs:
rbconfig:
file: ./config/rabbitmq.conf
cookie:
file: ./config/.erlang.cookie
rabbitmq.conf
loopback_users.guest = false
listeners.tcp.default = 5672
default_pass = Passw0rd
default_user = admin
management.tcp.port = 15672
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-01
cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-02
cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq-03
.erlang.cookie
mycookie
haproxy docker compose
version: "3.8"
services:
haproxy:
image: olgac/haproxy-for-rabbitmq:1.8.14-alpine
ports:
- 15672:15672
- 5672:5672
- 1936:1936
networks:
- prod
deploy:
mode: global
networks:
prod:
external: true
rabbitmq 미러링
rabbitmq message queue는 클러스터내에 각각 존재함.
Exchange와 Binding은 공유되지만 queue는 각각 가지고 있는데
가지고 있는 노드가 다운되면 데이터 유실될 수 있다.
고가용성을 위해 rabbitmq 미러링을 제공한다.
클러스터링된 노드내에 queue가 복제되어 저장된다.
rabbitmqctl set_policy test-all "^test\\." '{"ha-mode":"all"}'
# test-all은 새로 추가되는 정책의 이름, ^test\.은 regexp로 표현된 미러링할 queue 이름, 뒤의 json은 정책 세부 사항
test로 시작하는 queue를 복제
https://www.rabbitmq.com/ha.html#non-mirrored-queue-behavior-on-node-failure
728x90
반응형
'Docker' 카테고리의 다른 글
wsl2 우분투 cannot connect to the docker daemon at unix:///var/run/docker.sock. is the docker daemon running? (0) | 2022.02.25 |
---|---|
Docker mariadb 설치 (0) | 2022.02.02 |
Elk opendistro docker-swarm으로 올리기 (0) | 2021.03.27 |
Docker swarm init token 조회 join 방법 (0) | 2021.03.23 |
Docker local registry 생성 후 image push 해보자 (0) | 2021.03.19 |