RabbitMQ
2025. 3. 29. 14:33
1. RabbitMQ 란 무엇인가.
- 기본 개념 : 애플리케이션 간에 메시지를 전송하고 수신하는 역할을 하는 오픈 소스 메시지 브로커 소프트웨어 입니다. 이 시스템은 AMQP(Advanced Message Queuing Protocol)를 기반으로 동작합니다.
▷ AMQP 란 : 메시지 지향 개방형 프로토콜로, 메시지 큐 시스템 간에 메시지를 전송하는 표준을 정의합니다.
RabbitMQ 구조 - RabbitMQ를 사용이유 : RabbitMQ는 분산 시스템과 애플리케이션 간의 메시징을 처리하는 데 매우 유용한 도구 역할을 합니다.
| 효과 | 설명 |
| 비동기 메시징 및 비동기 처리 | 시스템 간에 메시지를 보내고 받는 동안 송신자와 수신자가 동시에 작업을 할 수 있습니다. 이로 인해 시스템 간의 처리 효율이 늘어 날 수 있습니다. |
| 확장성과 부하 분산 | 여러 개의 Consumer가 동시에 메시지를 처리하도록 할 수 있습니다. 시스템의 부하를 여러 서버나 프로세스에 분산시킬 수 있습니다. |
| 분산 시스템 및 마이크로서비스 아키텍처 |
RabbitMQ를 사용함으로써 MSA 아키텍처를 실현 하는데 도움이 될 수 있습니다. 각 MSA 서비스는 독립적으로 메시지를 송수신하면서 MSA 아키텍처에 걸맞은 구조로 배포, 개발, 확장 및 유지 관리를 가능하게 합니다. |
2. RabbitMQ 유지 및 관리
- 제가 RabbitMQ 라는 솔루션을 유지보수를 해보면서 알아본 지식들을 공유해봅니다.
클러스터링 vs 단일 노드
RabbitMQ가 실행되는 각 서버, 컨테이너, 또는 VM이 하나의 노드(Node)로 간주됩니다.
이 노드들 몇몇개를 묶어 클러스터링 구조로 만들 수 있고 아니면 단일 노드로 구성할 수 있습니다.
테스트 환경 혹은 개발 환경에서는 단일 노드로 구성해도 무방하지만 운영환경에서는 고가용성을 위해 여러 노드로 클러스터를 구성하는걸 권장합니다.
클러스터터 구조로 RabbitMQ를 구성할 때는 RabbitMQ 클러스터를 구성할 때 홀수 개의 노드를 배치하는 것이 일반적으로 권장됩니다.
그 이유는 Quorum(과반수) 기반의 클러스터링 구조에서 안정적인 장애 조치(Failover)와 데이터 일관성을 유지하기 위해서입니다.
RabbitMQ 클러스터는 여러 노드가 서로 상태를 공유하며, 특정 노드가 다운될 경우 과반수(majority, Quorum)의 노드가 남아 있어야 정상적으로 동작합니다.
- 홀수 개(3, 5, 7...)의 노드가 있을 때, 한두 개의 노드가 다운되더라도 과반수를 유지할 가능성이 높습니다.
- 짝수 개(2, 4, 6...)의 노드가 있을 때, 장애 발생 시 투표 결과가 동률이 될 가능성이 있습니다. → 리더 선출 및 장애 조치가 어려워질 수 있습니다.
따라서 홀수 개의 노드로 클러스터를 구축/운영하는것을 권장합니다.
반응형



