RabbitMQ 클러스터링
- RabbitMQ Clustering은 다수의 RabbitMQ를 하나의 RabbitMQ처럼 묶어서 사용하는 방식입니다.
- Clustering은 Queue를 제외한 모든 정보를 공유하기 때문에 메시지가 담겨있는 Queue에 대한 보호 장치라고 보면 됩니다.
특징
- RabbitMQ Cluster을 구성하는 RabbitMQ는 Queue를 제외한 모든 정보를 공유합니다.
- 따라서 동일한 Cluster안에 있는 모든 RabbitMQ는 동일한 Exchange를 갖고 있습니다.
- RabbitMQ Cluster에서 기본적으로 Queue는 한개만 존재합니다.
- 위 그림을 보면 Queue A와 Queue B는 하나만 존재하는 것을 확인할 수 있습니다.
- 동일 Cluster안의 있는 모든 RabbitMQ는 Erlang Cookie라고 불리는 비밀키를 공유 하여 상대방 RabbitMQ가 동일한 Cluster에 있는 RabbitMQ인지 확인합니다.
- 또한 Cluster를 제어하는 CLI Tool 또한 Cluster의 Erlang Cookie를 갖고 있어야 해당 Cluster를 제어 할 수 있습니다.
- 클러스터링은 클러스터 멤버 간 합의(consensus)가 필요한 몇몇 기능(quorum queues, MQTT 클라이언트 추적 등) 때문에, 홀수 개수의 노드(1, 3, 5, 7 등)를 사용하는 것이 권장됩니다.
- 2개 노드 클러스터는 권장하지 않습니다.
RabbitMQ는 Disk, Ram 2가지 모드가 있습니다.
Disk 모드
- Default 설정입니다.
- 내부 데이터 정보들을 디스크에 저장합니다.
- 디스크에 데이터를 저장하기 때문에 데이터 유실을 방지할 수 있습니다.
- Cluster 구성시 반드시 하나 이상의 RabbitMQ는 반드시 Disk Mode로 동작시켜야 합니다.
Ram 모드
- Message, Message Index, Queue Index, 다른 RebbitMQ의 상태 정보를 제외한 나머지 모든 정보를 Memory (RAM)에만 저장하고 구동합니다.
- Message와 관련된 정보는 여전히 Disk에 저장되기 때문에 RAM Mode를 이용해도 Message 처리량은 증가하지 않습니다.
- Exchange, Queue, Binding 등의 정보가 굉장히 많고 설정이 자주 변경되는 환경에서는 RAM Mode를 이용하여 빠르게 설정을 변경 할 수 있습니다.
- 데이터를 Ram에 보관하기 때문에 문제가 생겼을 시 데이터 유실이 존재합니다.
- peer node가 시작될 때 반드시 데이터가 동기화되어야 합니다.
'프로그래밍 > RabbitMQ' 카테고리의 다른 글
[RabbitMQ] 클러스터 구성하기 - Linux (0) | 2023.09.05 |
---|---|
[RabbitMQ] 미러링 (0) | 2023.05.03 |
[RabbitMQ] 성능 향상 위한 가이드 (0) | 2023.04.28 |
[RabbitMQ] 메시지 송수신 - RoutingKey (0) | 2023.04.19 |
[RabbitMQ] 메시지 송수신 - Publish/Subscribe (0) | 2023.04.19 |