Centos 7 에서 RabbitMQ 설치는 여기 를 보고 클러스터 할 서버 2대를 먼저 설치 후 다시 돌아와서 읽어주시면 됩니다.
01. 구성 환경
OS | Centos 7.8.2003 (Core) |
Erlang | v23.14 |
RabbitMQ | v3.8.9 |
private IP | 192.168.1.101 master 192.168.1.102 slave |
02. 클러스터 필요 사항
클러스터 구성할 서버들 끼리 hostname 설정
- master
- slave
vim /etc/hosts
192.168.1.101 master
192.168.1.102 slave
클러스터 구성에 필요한 포트
- 4369 : 노드를 찾기 위해 사용
- 5672, 5671 : AMQP
- 25672 : inter-node와 cli 통신을 위한 사용 (rabbitmqctl )
- 15672 : http api , management UI
03. Erlang 쿠기 맞추기
서로 클러스터 구성된 노드 끼리 통신을 하기 위해서는 Erlang Cookie 를 통해 공유를 한다.
master 에 있는 /var/lib/rabbitmq/.erlang.cookie 을 slave 로 옮겨줍니다.
scp /var/lib/rabbitmq/.erlang.cookie root@slave:/var/lib/rabbitmq/
그리고 나서 slave 의 RabbitMQ 을 재시작 해줍니다.
[root@slave rabbitmq]# systemctl restart rabbitmq-server
04. 클러스터 구성하기
master 를 기준으로 slave 를 master 쪽으로 클러스터를 결합합니다.
01. slave 노드 쪽 RabbitMQ 을 우선 stop_app 명령어를 통해, application 단 에서만 중지 시킵니다.
[root@slave ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@slave ...
02. slave 노드의 RabbitMQ을 reset 시켜줍니다.
[root@slave ~]# rabbitmqctl reset
Resetting node rabbit@slave ...
03. slave 노드를 master 노드 쪽에 cluster를 결합시켜 줍니다.
[root@slave rabbitmq]# rabbitmqctl join_cluster rabbit@master
Clustering node rabbit@slave with rabbit@master
04. slave 노드의 RabbitMQ을 start_app 시켜줍니다.
[root@slave ~]# rabbitmqctl start_app
Starting node rabbit@slave ...
05. 클러스터 노드 타입 변경
RabbitMQ 는 RAM 과 disk 타입이 있습니다.
RAM
- 내부 데이터베이스정보를 RAM에만 저장
- 메시지, 메시지 저장소에 대한 색인, 대기열 색인 그리고 기타 노트 상태가 포함 X
- 노드에 문제가 생겼을 때 데이터 유실이 존재
- peer node 가 시작될때 반드시 데이터 동기화가 되어야 한다.
disk
- 내부 데이터베이스정보 및 데이터들을 디스크에 저장
- 디스크에 데이터를 저장하기 때문에 데이터 유실을 방지 할 수 있음.
- 클러스터 구성시 하나 이상의 디스크 노드가 필요.
Master 노드를 RAM 타입으로 구성
01. master 노드 쪽 RabbitMQ 을 우선 stop_app 명령어를 통해, application 단 에서만 중지 시킵니다.
[root@master ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@master ...
02. master 노드의 RabbitMQ의 클러스터 타입을 ram 으로 변경 합니다.
[root@master ~]# rabbitmqctl change_cluster_node_type ram
Turning rabbit@master into a ram node
03. master 노드의 RabbitMQ을 start_app 시켜줍니다.
[root@master ~]# rabbitmqctl start_app
Starting node rabbit@master ...
* 여기의 예는 단순성을 위해 하나의 disc 하나의 ram 노드가있는 클러스터를 보여줬습니다.
그러한 이러한 2개의 클러스터는 잘못된 설계 입니다. 기본적으로 클러스터는 2n+1 개로 구성해야 합니다.
06. Mirroring 구성
각 클러스터는 Exchange와 Binding 내용을 서로 공유합니다. 그러나 Queue는 각각 클러스터가 가지고 있습니다. 만약 특정 노드에 문제가 생긴다면, 해당 노드의 데이터가 유실될 수 있습니다.
고가용성을 위해서 Mirroring 옵션을 통해 Queue는 모든 노드에 서로 복제되어 저장될 수 있습니다.
미러링(Mirroring) 설정은 하나의 마스터와 여러 미러(Mirror) 노드로 구성됩니다. 모든 요청은 마스터 노드가 우선 처리하고, 미러 노드로 전파됩니다.
마스터에 메시지가 전달되면 모든 미러 노드로 복제됩니다. 그리고 Consumer는 마스터 노드와 관계없이 모든 노드를 통해 메시지를 가져올 수 있습니다. 이때 미러 노드에서 메시지를 가져온 경우에는 미러 노드는 마스터에게 이 사실을 전달합니다.
미러링은 정책(Policy)을 이용해서 설정할 수 있습니다.
07. Mirroring 정책 설정
01. 모든 클러스터 노드에 Queue 미러링
rabbitmqctl set_policy ha-all "^ha\\." '{"ha-mode":"all"}'
ha-all 정책을 ha. 으로 시작되는 큐를 모든 노드에 미러링 합니다.
[root@master ~]# rabbitmqctl set_policy ha-all "^ha\\." '{"ha-mode":"all"}'
warning: the VM is running with native name encoding of latin1 which may cause Elixir to malfunction as it expects utf8. Please ensure your locale is set to UTF-8 (which can be verified by running "locale" in your shell)
Setting policy "ha-all" for pattern "^ha\." to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...
02. 지정한 갯수의 레플리카만 생성
rabbitmqctl set_policy ha-two "^two\\." '{"ha-mode":"exactly", "ha-params": 2, "ha-sync-mode": "automatic"}'
03. 특정 노드만 미러링
rabbitmqctl set_policy ha-nodes "^nodes\\." '{"ha-mode": "nodes", "ha-params": ["rabbit@master", "rabbit@slave"]}'
'IT > Infra' 카테고리의 다른 글
[Centos7] MinIO 객체 스토리지 설치 (0) | 2021.01.17 |
---|---|
[centos7] Jenkins 설치 (0) | 2021.01.05 |
[Centos7] Rabbitmq 설치 (Feat. yum Repo 설치) (0) | 2020.11.29 |
[Vagrant] Multi VM , Memory, Cpus 설정 (0) | 2020.11.29 |
[Docker] Consul 설치 하기 (Feat.Mac) (0) | 2020.10.24 |