Redis Cluster는 실패 감지, 복제 프로모션 및 클러스터 상태 관리의 조합을 통해 노드 고장을 처리하여 지속적인 작동 및 데이터 가용성을 보장합니다. 복제본을 자동으로 홍보하여 도달 할 수없는 마스터를 대체하여 핵심 공간의 무결성을 유지하면서 데이터 손실 위험을 최소화함으로써 몇 가지 노드의 실패를 생존하도록 설계되었습니다.
클러스터 통신 및 고장 감지
Redis 클러스터 노드는 Redis Cluster 버스라는 전용 TCP 기반 이진 프로토콜을 통해 통신합니다. 각 노드는이 버스를 사용하여 클러스터의 다른 모든 노드와의 연결을 유지하므로 지속적인 건강 검진 및 상태 전파가 가능합니다. 노드는 주기적으로 핑 패킷을 보내 동료의 운영 상태를 확인하고 클러스터 상태에 대한 정보를 공유합니다. 이 통신은 가십 프로토콜을 사용하여 클러스터 정보를 효율적으로 전파하여 노드 고장의 감지를 지원합니다.
노드는 활성 핑 메커니즘을 사용하여 피어를 모니터링합니다. 노드가 구성된 시간 초과 기간 (Node_Timeout) 내에 핑에 응답하지 않으면 PFAIL 상태로 실패 할 수있는 것으로 표시됩니다. 이것은 잠정적 인 실패 표시입니다. 즉, 노드를 도달 할 수 없거나 아래로 내릴 수 있지만 아직 확인되지 않았습니다. PFAIL 조건이 지속되고 대부분의 마스터 노드에 의해 확인되면, 노드는 실패로 표시되므로 클러스터에 의해 도달 할 수 없거나 아래로 내려갑니다. 이 합의 기반 고장 감지 메커니즘은 실패한 노드를 식별하는 데 잘못된 양성을 방지하는 데 도움이됩니다.
처리 마스터 노드 고장
Mas 이 프로세스는 관리 중재없이 클러스터의 고장 검출기에 의해 자동으로 트리거됩니다. 프로모션 된 복제본은 실패한 마스터가 이전에 관리했던 해시 슬롯을 제공하는 책임을 져서 클러스터가 수동 재구성없이 요청을 계속 제공 할 수 있도록합니다.
장애 조치는 최소한 하나 이상의 복제본이 있고 홍보 할 수있는 도달 할 수있는 경우에만 발생합니다. 적절한 복제본이 존재하지 않으면 클러스터는 일관되지 않은 데이터를 제공하지 않도록 쿼리 수락을 중지하는 오류 상태로 들어갑니다. 이는 각 마스터가 고 가용성을 유지하기 위해 레플리카를 구성하는 것의 중요성을 강조합니다.
장애 조치 역학 및 안전
장애 조치 동안 복제본은 대체중인 마스터와 완전히 동기화하여 데이터 손실을 피하기 위해 보류중인 모든 업데이트를 처리했는지 확인합니다. 복제 오프셋을 마스터와 일치시켜 마스터 역할을 가정하기 전에 최신 데이터 세트를 가지고 있습니다.
일단 동기화되면 복제본은 대다수의 마스터에게 새로운 구성 에포크를 요청합니다. 에포크는 클러스터의 구성 변경을 추적하는 데 사용되는 논리적 타임 스탬프입니다. Consensus를 얻은 후 Replica는 모든 노드에 대한 업데이트 된 구성을 방송하여 마스터로의 프로모션과 기존 마스터의 복제 또는 제거에 대한 강의를 발표했습니다.
기존 마스터는 복구 할 때이 구성 업데이트를 받고 쿼리 서브를 마스터로 중지합니다. 클라이언트 요청을 새로운 마스터에게 리디렉션하여 클라이언트가 수동 개입없이 클러스터와 투명하게 상호 작용하도록합니다.
처리 네트워크 파티션 및 분할 뇌 시나리오 처리
Redis Cluster는 다수의 기반 합의를 사용하여 네트워크 파티션 중 분할 뇌 문제를 피합니다. 마스터는 클러스터의 마스터의 절반 이상이 도달 할 수없는 경우에만 실패합니다. 대다수와 의사 소통 할 수없는 마스터는 쓰기 수락을 중단하여 파티션 간의 다양한 데이터 상태를 방지합니다.
그러나 소수 파티션에 실패 전에 마스터에게 계속 글을 쓰는 클라이언트가 포함 된 경우, 쓰기 손실의 가능성이 있습니다. Redis는 타임 아웃 후 소수 민족과 다수 측면에서 도달 할 수없는 주인을 빠르게 실패 함으로써이 위험을 완화 시켜이 위험을 완화시킵니다.
이러한 예방 조치에도 불구하고 Redis는 마스터와 복제본 사이의 비동기 복제를 사용하기 때문에 장애 조치 동안 쓰기를 잃을 수 있습니다. 쓰기 명령 및 복제 업데이트는 거의 동시에 전송되기 때문에 글을 잃는 창은 매우 좁지 만 불가능하지는 않습니다.
실패 처리에 영향을 미치는 구성 옵션
Redis 클러스터에는 노드 고장 중 가용성 및 동작에 영향을 미치는 구성 옵션이 포함됩니다.
-`클러스터-레퀴어-가득한 덮개 '(기본 예) : 클러스터는 노드 고장으로 인해 주요 공간의 일부가 발견되지 않으면 쓰기를 수락하는 것을 중지하여 데이터 일관성을 강력하게 보장합니다.
-`Cluster-allow-reads-when-down` (기본 번호) : 클러스터가 고장 상태에있을 때 읽기가 허용되는지 여부를 제어합니다. 이를 활성화하면 부분 실패 중에도 노드에서 읽을 수 있지만 오래된 데이터가 제공 될 수 있습니다.
이러한 설정을 통해 관리자는 애플리케이션 요구 사항에 따라 가용성 및 일관성의 균형을 맞출 수 있습니다.
수동 장애 조치 지원
Redis Cluster는 자동 장애 조치 외에도 복제 노드에서 발행 할 수있는 수동 장애 조치 명령을 제공합니다. 이는 관리자가 실제 실패 이벤트를 기다리지 않고 마스터 역할을 바꾸려는 유지 관리 또는 테스트 시나리오에 유용합니다.
수동 장애 조치는 현재 마스터의 클라이언트를 차단하고 복제본이 완전히 따라 잡기를 기다린 다음 부드러운 원자 전환으로 복제본을 홍보함으로써 작동합니다. 이를 통해 역할 변경 중에 데이터 손실이없고 클라이언트에 대한 최소한의 혼란이 없습니다.
요약
Redis Cluster는 주로 Redis 클러스터 버스 및 가십 프로토콜을 통한 연속 모니터링을 기반으로 결함 감지 및 장애 조치 시스템을 통해 노드 장애를 처리합니다. 노드는 다수의 마스터가 실패에 동의하도록 요구하는 합의 프로세스 후에 도달 할 수없는 마스터를 감지하고 자동으로 복제본을 홍보합니다. Failover는 홍보 전에 복제본이 완전히 동기화되도록하여 데이터 손실을 최소화하도록 설계되었습니다. 비동기 복제로 인해 쓰기 손실의 좁은 창이 발생할 수 있지만 네트워크 파티션은 분할 뇌 조건을 방지하기 위해 다수 기반 결정을 통해 관리됩니다. 구성 옵션은 고장 중에 가용성 대 일관성을 조정할 수 있으며 수동 장애 조치 명령은 운영자가 유지 보수를 제어 할 수 있도록합니다.
이 아키텍처를 통해 Redis Cluster는 마스터 노드 고장으로부터 자동 복구로 고 가용성 및 파티션 공차를 제공하여 클러스터가 실패 시나리오에서 작동하고 일관성을 유지할 수 있도록합니다.