티스토리 뷰

DEV/various knowledge

[rabbitMQ] network partition

뚜비두빱 2022. 3. 20. 22:25
partition의 사전적 정의 : A partitioned from B 는 B에서 분할된 A를 나타낸다.

 

 

레빗엠큐 클러스터링을 구성하다 네트워크 연결이 끊기면 다음과 같은 오류를 볼 수 있습니다.

2020-05-18 06:55:37.324 [error] <0.341.0> Mnesia(rabbit@warp10): ** ERROR ** mnesia_event got 
{inconsistent_database, running_partitioned_network, rabbit@hostname2}

레빗엠큐 클러스터 멤버간 네트워크 연결이 실패할시 일어나게 됩니다.

파티션은 기본적으로 60초 이상 상대노드와 연결이 끊기면 서로가 서로를 나에게 연결이 끊겼다고 생각하고 이때 파티션이 발생한것으로 판단합니다. 따라서 파티션이 발생했다면 기본적으로 60초동안 어느 한쪽은 네트워크가 끊겨서 연결이 안됐음을 의미합니다.

 

 

 

node1 — node2 — node3 가 클러스터링 되어있을때

node2가 끊어진다면

node1 는 node2가 끊어진것으로 생각,

node2 는 node1와 , node3가 끊어진것으로 생각,

node3 는 node2가 끊어진것으로 생각하게 됩니다.

 

 

 

파티션이 생긴 경우를 split-brain 이라고 표현합니다.

warning을 clear하기 위해서 신뢰하는 파티션 안의 모든 노드를 재시작해야 합니다. 하지만 파티션이 생길때 이를 수동으로 해주는것은 비효율적이므로 미리 전략을 세워두는것이 좋습니다.

 

 네트워크 파티션을 자동으로 처리하는 3가지 방법이 있고 pause-minority모드, pause-if-all-down모드, autoheal모드. 기본 동작은 ignore모드가 있습니다. 

 

pause-minority : RabbitMQ는 다른 노드가 다운되는걸 본 후에 minority(즉, 노드의 전체숫자의 절반보다 적거나 같은)라고 결정되는 클러스터 노드를 자동으로 중지합니다.

pause-if-all-down : 리스트된 어떤 노드에도 닿을 수 없는 클러스터 노드를 자동적으로 중지합니다.

autoheal:  파티션이 발생한 것으로 보이면 래빗MQ는 자동적으로 승리 파티션을 결정하고승리 파티션에 있지 않은 모든 노드를 재시작합니다. 

 

split-brain에서 복구되기 위해서는 레빗엠큐를 재시작 해야하기 때문에 저는 autoheal mode를 사용하고 있습니다. 

적용시키기 위해서는 rabbitmq.conf 파일에

cluster_partition_handling = autoheal

를 넣어주면 적용할 수 있습니다.

'DEV > various knowledge' 카테고리의 다른 글

[DNS] www.naver.com을 입력하면 어떻게 될까?  (0) 2022.03.09
[git] 유용한 커맨드  (0) 2022.02.22
[javascript] var, let ,const  (0) 2022.02.21
[web] HTTPS 적용하기  (0) 2022.02.13
URL 끝에 '/' 쓰고 안쓰고의 차이  (0) 2021.12.12
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함