래빗MQ 클러스터링 - 1. 클러스터링
1. 클러스터
래빗MQ 클러스터는 둘 이상의 서버를 하나의 래빗MQ처럼 사용할 수 있게 한다.
익스체인지, 큐, 바인딩, 사용자, 가상호스트, 정책 등의 런타임 상태가 모든 노드에서 공유된다.
장애허용(fault tolerance) 시스템을 구성하려는 경우, HA큐를 사용한다.
HA큐는 여러 클러스터 노드에 걸쳐있고, 메시지와 큐 상태를 공유한다. HA 큐의 노드 중 하나가 다운돼도 다른 노드들에는 메시지와 큐 상태가 계속 유지된다.
클러스터는 대기시간이 짧은 LAN에서만 구성 가능하다.
아마존 EC2와 같은 클라우드 환경에서도 가능하지만 가용성 영역(availability zone)에 걸쳐서는 안된다.
대기시간이 긴 WAN이나 인터넷 연결에서는 Shovel과 Federation를 써야 함.
클러스터 공유 상태를 관리하는 작업의 로드는 노드 수에 비례한다.
2. 노드유형
디스크 노드 or RAM 노드.
- 디스크 노드는 클러스터의 런타임 상태를 RAM과 디스크에 저장.
- RAM 노드는 메모리 데이터베이스에만 저장.
(익스체인지, 큐, 바인딩, 가상호스트, 사용자, 정책)
노드유형은 메시지의 디스크 저장과는 관련없다.
메시지를 디스크 저장하려면 메시지 속성 delivery-mode를 2(persistent)로 설정.
장애 발생후 재접속 할 때,
- 디스크 노드는 런타임상태 재구성
- RAM 노드는 런타임 상태를 포함하지 않는다.
클러스터를 생성할 때 최소 하나의 디스크노드가 있어야 한다.
3. 동작
클러스터에 발행한 메시지는 큐가 클러스터의 어느 노드에 있는지와 상관없이 올바르게 전달된다.
HA큐를 사용하면 성능이 저하될 수 있다.
큐에 메시지를 저장하거나 큐에서 메시지를 사용할 때, HA큐가 있는 모든 노드로 알려줘야 하니까.
4. 노드 추가 방법
rabbitmq.config 환경 파일을 편집하여 클러스터의 각 노드를 정의(이걸 써야함)
또는 rabbitmqctl 명령을 사용해 클러스터에 노드 추가 또는 제거(학습용)
래빗MQ는 노드 간 통신을 위해 얼랭에 내장된 다중 노드 통신 메커니즘을 사용한다.
이 다중 노드 통신의 보안을 위해 얼랭과 래빗MQ 프로세스에는 얼랭 쿠키라는 비밀 공유 파일을 둔다. 이게 동일하지 않으면 서로 통신할 수 없다.
환경파일에 노드를 정의하면 노드 추가/제거시 모든 노드 설정을 업데이트 해야 함.
출처 : rabbitmq in depth 7장 (도서)
래빗MQ 클러스터는 둘 이상의 서버를 하나의 래빗MQ처럼 사용할 수 있게 한다.
익스체인지, 큐, 바인딩, 사용자, 가상호스트, 정책 등의 런타임 상태가 모든 노드에서 공유된다.
장애허용(fault tolerance) 시스템을 구성하려는 경우, HA큐를 사용한다.
HA큐는 여러 클러스터 노드에 걸쳐있고, 메시지와 큐 상태를 공유한다. HA 큐의 노드 중 하나가 다운돼도 다른 노드들에는 메시지와 큐 상태가 계속 유지된다.
클러스터는 대기시간이 짧은 LAN에서만 구성 가능하다.
아마존 EC2와 같은 클라우드 환경에서도 가능하지만 가용성 영역(availability zone)에 걸쳐서는 안된다.
대기시간이 긴 WAN이나 인터넷 연결에서는 Shovel과 Federation를 써야 함.
클러스터 공유 상태를 관리하는 작업의 로드는 노드 수에 비례한다.
2. 노드유형
디스크 노드 or RAM 노드.
- 디스크 노드는 클러스터의 런타임 상태를 RAM과 디스크에 저장.
- RAM 노드는 메모리 데이터베이스에만 저장.
(익스체인지, 큐, 바인딩, 가상호스트, 사용자, 정책)
노드유형은 메시지의 디스크 저장과는 관련없다.
메시지를 디스크 저장하려면 메시지 속성 delivery-mode를 2(persistent)로 설정.
장애 발생후 재접속 할 때,
- 디스크 노드는 런타임상태 재구성
- RAM 노드는 런타임 상태를 포함하지 않는다.
클러스터를 생성할 때 최소 하나의 디스크노드가 있어야 한다.
3. 동작
클러스터에 발행한 메시지는 큐가 클러스터의 어느 노드에 있는지와 상관없이 올바르게 전달된다.
HA큐를 사용하면 성능이 저하될 수 있다.
큐에 메시지를 저장하거나 큐에서 메시지를 사용할 때, HA큐가 있는 모든 노드로 알려줘야 하니까.
4. 노드 추가 방법
rabbitmq.config 환경 파일을 편집하여 클러스터의 각 노드를 정의(이걸 써야함)
또는 rabbitmqctl 명령을 사용해 클러스터에 노드 추가 또는 제거(학습용)
래빗MQ는 노드 간 통신을 위해 얼랭에 내장된 다중 노드 통신 메커니즘을 사용한다.
이 다중 노드 통신의 보안을 위해 얼랭과 래빗MQ 프로세스에는 얼랭 쿠키라는 비밀 공유 파일을 둔다. 이게 동일하지 않으면 서로 통신할 수 없다.
환경파일에 노드를 정의하면 노드 추가/제거시 모든 노드 설정을 업데이트 해야 함.
출처 : rabbitmq in depth 7장 (도서)
댓글
댓글 쓰기