노드가 사라지면 어떻게 됩니까?

Nick Lamb -

노드가 사리지는 경우 시스템은 재보호(reprotect) 조치를 시작하기 전에 10분 동안 대기하여 노드가 다시 온라인이 되도록 허용합니다. 기본값은 다음 쿼리로 변경할 수 있습니다.

sql> SET GLOBAL rebalancer_reprotect_queue_interval_s=num_seconds;

노드는 다른 노드와 통신을 위한 하트 비트(heartbeat) 프로세스가 있어 노드들이 온라인 상태인지 확인합니다. 이는 매초 발생합니다. 노드가 온라인이 아닌 경우, 클러스터는 사용할 수 없는 노드를 제외하고 새 그룹을 구성하며 rebalancer_reprotect_queue_interval 타이머가 시작됩니다.

일단 rebalancer_reprotect_queue_interval 타이머가 종료되면, 클러스터는 장애가 발생한 노드에서 재보호를 시작합니다. 

다음 쿼리로 수행중인 리밸런서(rebalancer) 조치를 확인할 수 있습니다.

sql> SELECT * FROM system.rebalancer_activity_log ORDER BY started DESC LIMIT 25;

클러스터는 실패한 노드에서 완전히 재보호가 이뤄진 다음 전체 보호 복구(Full Protection Restored)를 나타내는 경고가 경고 목록으로 전송됩니다. 이 시점에 클러스터는 안전하게 다른 노드가 장애가 발생하더라도 이를 처리할 수 있습니다.

애플리케이션에서는 다음과 같은 영향을 받습니다. 기본적으로 복제본(replica)은 두개의 사본을 가지고 있습니다. 슬라이스의 각 복제본은 모든 쓰기 중에 쓰여지고 읽기 중에는 순위가 매겨진 읽기 복제본을 읽기 때문에 만약 복제본이 장애가 발생한 노드에 있다면 다시 쿼리를 해야합니다. 순위가 매겨진 복제본이 장애가 발생한 노드에 있다면 새 복제본이 생성될 때까지 나머지 복제본이 순위가 매겨진 복제본이 될 것입니다. 이 복제본을 대상으로 하고 있던 쿼리는 다시 조회해야 합니다. 단일 명령문 트랜잭션에서는 이와 같은 경우에 클라이언트에 투명하게 재시도하는 내부적인 자동 재시도 메커니즘이 존재합니다. 노드 장애시 그룹 변경으로 인해 처리 중인 모든 쿼리는 다시 시도해야 합니다.

 

또 다른 질문이 있으십니까? 문의 등록

0 댓글

댓글을 남기려면 로그인하세요.
Zendesk 제공