Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Redis 클러스터는 노드 오류를 어떻게 처리합니까?


Redis 클러스터는 노드 오류를 어떻게 처리합니까?


Redis 클러스터가 노드 오류를 처리하는 방법은 다음과 같습니다.

자동 장애 조치

Redis 클러스터 마스터 노드가 실패하면 클러스터는 해당 마스터의 복제본 노드 중 하나를 자동으로 승격하여 새 마스터가 됩니다. 이 장애 조치 프로세스는 수동 개입 없이 자동으로 수행됩니다.

장애 조치 프로세스의 주요 단계는 다음과 같습니다.

1. 클러스터의 다른 노드는 클러스터 가십 프로토콜을 통해 또는 노드에 연결을 시도하여 마스터 노드에 장애가 발생했음을 감지합니다.

2. 그런 다음 클러스터는 해당 마스터의 복제본 노드 중에서 선택을 수행합니다. 최신 데이터가 포함된 복제본이 새 마스터로 선택됩니다.

3. 선출된 복제본 노드는 새 마스터로 승격됩니다. 그런 다음 다른 복제본은 새 마스터에서 복제되도록 재구성됩니다.

4. 클라이언트는 새로운 슬롯-노드 매핑이 포함된 'MOVED' 오류 응답을 사용하여 새 마스터 노드로 리디렉션됩니다.

슬롯 범위

노드 오류 중에도 사용 가능한 상태를 유지하려면 Redis 클러스터에서는 대부분의 마스터 노드가 사용 가능하고 통신할 수 있어야 합니다. 이를 "슬롯 적용 범위" 유지라고 합니다.

클러스터의 각 마스터 노드는 16,384개 해시 슬롯의 하위 집합을 담당합니다. 대부분의 마스터를 사용할 수 있고 할당된 슬롯을 처리할 수 있는 한 클러스터는 계속 작동할 수 있습니다.

너무 많은 마스터 노드가 실패하여 나머지 마스터가 전체 해시 슬롯 범위를 포괄할 수 없는 경우 실패한 노드가 복구되거나 교체될 때까지 클러스터를 사용할 수 없게 됩니다.

복제본 프로모션

Redis 클러스터는 고가용성을 제공하기 위해 복제본 노드를 사용합니다. 마스터에 장애가 발생하면 해당 복제본 노드 중 하나가 자동으로 승격되어 새 마스터가 됩니다.

최신 데이터가 포함된 복제본이 새 마스터로 선택됩니다. 이렇게 하면 장애 조치 프로세스 중에 데이터 일관성이 유지됩니다.

분할 브레인 처리

Redis 클러스터는 쿼럼 기반 접근 방식을 사용하여 네트워크 파티션을 처리하고 클러스터가 여러 개의 독립 클러스터로 분할되는 "분할 브레인" 시나리오를 방지합니다.

대다수의 마스터를 사용할 수 없게 되면 나머지 노드는 파티션이 해결될 때까지 클라이언트 요청을 거부합니다. 이렇게 하면 데이터 일관성이 유지됩니다.

이러한 자동 장애 조치 및 쿼럼 기반 메커니즘을 활용함으로써 Redis 클러스터는 노드 오류 및 네트워크 파티션이 발생할 경우 고가용성과 복원력을 제공할 수 있습니다.

인용:
[1] https://yifan-online.com/en/km/article/detail/16750
[2] https://stackoverflow.com/questions/63878562/two-failure-support-in-3-node-redis-cluster
[3] https://redis.io/docs/latest/operate/oss_and_stack/management/scaling/
[4] https://redis.io/docs/latest/commands/cluster-nodes/
[5] https://github.com/lettuce-io/lettuce-core/issues/2318