프로그래밍/RabbitMQ

[RabbitMQ] 클러스터링

Victory_HA 2023. 5. 3. 10:09

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가 시작될 때 반드시 데이터가 동기화되어야 합니다.