분할 뇌 클러스터
이는 클러스터의 하나 이상의 노드가 다른 노드와의 연결이 끊어져 하위 클러스터 또는 분할 브레인 클러스터가 형성될 때 발생합니다.
본질적으로 Split-Brain은 의학적 Split-Brain 증후군과의 유추를 기반으로 한 용어입니다. 이 조건은 범위가 겹치는 두 개의 개별 데이터 세트의 유지 관리로 인해 발생할 수 있는 데이터 또는 가용성의 불일치를 나타냅니다. 이는 네트워크 설계상의 서버 또는 네트워크의 해당 서버 간의 잘못된 통신 및 데이터 비동기화로 인해 발생할 수 있는 장애 조건 때문일 수 있습니다. 일반적으로 네트워크 파티션이라고도 합니다.
이후 NCache 또한 여러 노드와 클러스터로 구성될 수 있는 분산 캐시이기 때문에 Split-Brain 클러스터가 발생할 수도 있습니다. NCache.
Split-Brain이 발생하면 하위 클러스터가 형성될 가능성이 있습니다. 따라서 모든 클라이언트가 하나의 정상 클러스터로 리디렉션되도록 하려면 하위 클러스터 중 하나를 제거해야 합니다. 하위 클러스터를 제거하면 데이터가 손실되므로 제거할 하위 클러스터는 다음 기준에 따라 선택됩니다.
- 하위 클러스터의 크기가 다양한 경우 노드 수가 가장 적은 하위 클러스터가 제거됩니다. 이는 더 작은 클러스터에 더 적은 데이터가 포함되므로 데이터 손실을 최소화하기 위한 것입니다.
- 클러스터의 크기가 동일한 경우 코디네이터 노드의 IP 주소가 더 높은 하위 클러스터가 제거됩니다. 예를 들어, 하위 클러스터 A와 B의 코디네이터 노드의 IP는 각각 20.200.20.38과 20.200.20.40입니다. 이 경우 코디네이터 노드 IP가 20.200.20.40인 하위 클러스터가 제거됩니다.
분할 브레인은 범위가 겹치는 두 개의 개별 데이터 세트를 유지 관리하는 데서 발생하는 데이터 불일치 또는 가용성 문제를 나타낼 수 있습니다. 또한 이로 인해 심각한 문제가 발생할 수 있으며 관리자에게 심각한 상황을 초래할 수 있습니다. 이러한 이유로 Split-Brain 및 데이터 손상 위험이 없는지 확인하는 것이 매우 중요합니다.
Split-Brain이 발생한 후 네트워크 파티션 문제를 처리하는 몇 가지 일반적인 접근 방식이 있습니다.
- 낙관적 접근
- 비관적 접근
낙관적 접근 방식에서는 분할된 노드가 일시적으로 평소처럼 작동하도록 하면서 노드 간의 통신 채널이 단순히 복원됩니다. 이는 노드가 짧은 시간 내에 자동으로 동기화된다는 가정 하에 수행됩니다. Split-Brain의 경우 항상 데이터 손상 위험이 있으므로 이 접근 방식은 쉬운 방법일 수 있습니다.
반면, 비관적 접근 방식에서는 데이터 일관성을 유지하기 위해 시스템 가용성을 포기하거나 단순히 희생해야 합니다. 네트워크 분할이 감지되면 하위 파티션에 대한 액세스가 제한됩니다. 이는 데이터 일관성을 보장하기 위해 수행됩니다. 이 경우 기록 분기를 방지하기 위해 하나의 구성 요소만 스토리지에 대한 읽기/쓰기 요청을 계속할 수 있습니다.
분할 브레인 클러스터 처리 NCache
분할 브레인(Split-Brain)이 발생하면 네트워크의 클러스터 노드는 어떤 노드를 종료하거나, 다시 시작하거나, 다시 연결하거나, 네트워크에서 제거할지와 같은 중요한 결정을 내리기 전에 일련의 검사를 거칩니다. NCache 기본적으로 비활성화되어 있는 Split-Brain Auto-Recovery라는 기능을 제공합니다. 그러나 네트워크에서 Split-Brain이 발생하는 경우 데이터 민감도 및 사용자 요구 사항을 기반으로 활성화할 수 있습니다.
NCache 이 기능은 Partition-of-Replica 토폴로지에 대해서만 제공됩니다. 이를 심층적으로 이해하기 위해 클러스터 연결, 파티션-복제본 토폴로지 및 노드 연결 끊김 이면의 시나리오를 살펴보겠습니다.
클러스터 연결
두 개 이상의 노드가 연결되어 함께 작동하여 클러스터를 형성할 수 있습니다. 클러스터의 각 노드를 구성원이라고 합니다. 클러스터 NCache 는 회원들이 서로 메시지를 주고받으며 대화를 나눌 수 있는 그룹 채널이라고 할 수 있습니다. 클러스터는 항상 메시 토폴로지로 구성됩니다. 이는 모든 노드가 상호 연결되어 있음을 의미합니다.
각 클러스터는 하나의 코디네이터 노드와 나머지 비코디네이터 또는 참가자 노드로 구성됩니다. 코디네이터 노드는 가장 상위에 있는 노드, 즉 가장 먼저 시작한 노드로 노드 추가, 제거 등 대부분의 작업을 담당한다. 클러스터에 노드가 추가되거나 제거될 때마다 이를 코디네이터 노드에 알리고 코디네이터 노드는 클러스터에서 연결 가능한 환경을 유지하기 위한 나머지 작업을 관리합니다. 코디네이터 노드가 수행하는 다른 작업에는 버킷 배포, 캐시 로더 트리거 및 연결 유지 관리가 포함됩니다.
클러스터는 다음과 같이 분류할 수 있습니다.
- 완전히 연결된 클러스터
- 부분적으로 연결된 클러스터
- 중지된 클러스터
완전히 연결된 클러스터
클러스터에 n개의 노드가 있고 클러스터의 각 노드가 다른 모든 노드와 정상적인 n-1 연결을 갖는 경우 클러스터는 완전 연결 상태에 있다고 합니다. 이 상태에서는 모든 노드가 서로 통신할 수 있으므로 안정적인 상태이다.
다음 그림은 이상적인 상태의 완전히 연결된 클러스터를 보여줍니다.
클러스터가 완전 연결 상태이고 노드가 클러스터에 가입하면 해당 클러스터의 일부/구성원이 됩니다. 노드가 하나 이상의 구성원 노드와 함께 클러스터를 떠나거나 부분적으로 연결이 끊긴 경우 별도의 클러스터를 형성합니다. 조정자 노드는 기존의 모든 노드에 네트워크의 이러한 변경 사항을 알립니다. 이것은 새 클러스터의 데이터 균형을 맞추는 것을 목표로 하는 상태 전송을 트리거합니다. 토폴로지를 기반으로 클라이언트 연결은 새 노드에 분산됩니다.
클라이언트 연결
클러스터가 정상 상태인 경우 PoR 토폴로지에서는 모든 클라이언트가 클러스터의 모든 노드와 연결됩니다. PoR(Partition-Replica)과 관련된 Split-Brain의 경우 클라이언트가 클러스터의 모든 노드에 연결됩니다. 노드가 조인되면 클라이언트도 새 노드에 연결됩니다. 노드가 떠나도 클라이언트는 작업을 계속 수행할 수 있습니다.
중단
노드가 클러스터를 적절하게 떠나는 경우, 즉 노드가 종료되었고 해당 노드에 대한 호스트 프로세스가 없는 경우 노드는 중지된 것으로 간주됩니다(나머지 클러스터와 관련하여). 노드를 중지하면 상태 전송이 발생하여 데이터 균형이 조정됩니다. 이는 결국 나머지 노드 사이에서 클라이언트 수의 균형을 맞춥니다. 그러나 이 기능은 REP 토폴로지에만 적용됩니다.
클라이언트 연결
이전에 중지된 노드에 연결된 클라이언트는 이제 연결된 다른 노드에 연결됩니다.
부분적으로 연결된 클러스터
예를 들어 네트워크 결함으로 인해 클러스터의 하나 이상의 노드가 다른 노드에 연결할 수 없는 상황이 있을 수 있습니다.
3개 노드로 완전히 연결된 클러스터가 있다고 가정해 보겠습니다. 결함이 발생하여 세 노드 중 두 노드가 여전히 서로 통신할 수 있는 경우 그러나 세 번째 노드가 네트워크에 도달할 수 없으면 연결된 두 노드가 단일 하위 클러스터(예: 하위 클러스터 1)를 형성합니다. 연결이 끊긴 세 번째 노드는 독립적인 하위 클러스터(예: 하위 클러스터 2)를 형성합니다. -cluster에는 이제 코디네이터 노드가 있습니다. 이 상황에서는 클러스터가 이상적인 연결 상태를 잃습니다. 이제 서로 통신할 수 없지만 하위 클러스터 내에서는 완전히 연결되어 있는 두 개의 클러스터가 있습니다. 이 상태를 아래 그림에서 볼 수 있듯이 클러스터의 부분 연결이라고 합니다.
앞서 언급한 시나리오에서 하위 클러스터 1과 하위 클러스터 2의 노드는 하위 클러스터 1이 자체적으로 완전히 연결되고 하위 클러스터 2와는 완전히 연결 해제되며 그 반대의 경우도 마찬가지입니다.
더 복잡한 경우에는 네트워크 결함으로 인해 노드 5가 노드 5을 제외한 모든 노드에서 연결이 끊어지는 3노드 클러스터를 가정해 보겠습니다. 이 경우 노드 3은 여전히 노드 5에 연결되어 있고 노드 3은 여전히 연결되어 있습니다. 노드 1, 노드 2, 노드 4에도 연결됩니다. 이제 노드 3은 하위 클러스터 1(노드 1, 노드 4 및 노드 2)과 하위 클러스터 2(노드 5)의 공통 구성원입니다.
다음 그림은 진행 중인 부분 연결을 보여줍니다.
각 클러스터는 하나의 클러스터에 대해서만 연결을 유지하도록 요청하는 노드 3에 알립니다. 알림을 받으면 노드 3은 알림이 수신되는 위치를 평가하고 기본 클러스터 연결이 끊어지기 전에 가장 오래된 노드가 포함된 하위 클러스터(이 시나리오에서는 하위 클러스터 2)에 연결합니다.
다음 그림은 최종 상태에 있는 클러스터의 부분 연결을 보여줍니다.
연결 재시도
모든 클러스터 작업에는 기본적으로 60초인 제한 시간 값이 있으며 다음에서 구성할 수 있습니다. NCache 관리센터. 모든 클러스터에는 연결 재시도(기본값 2)와 재시도 간격(기본값 2)이 있습니다. 이 두 값은 모두 다음에서도 구성할 수 있습니다. NCache 관리센터.
클러스터에서 노드 연결이 끊어질 때마다 우선적인 코디네이터 노드가 먼저 연결 재설정을 시도합니다. 재시도 결과 연결이 성공하고 시간 초과가 발생하지 않으면 클러스터는 정상적이고 완전히 연결된 상태로 전환됩니다. 그러나 어떤 이유로 연결을 다시 설정할 수 없는 경우 클러스터의 모든 노드가 여러 하위 클러스터를 형성하여 부분 연결이 발생합니다.
새 노드 조인
클러스터가 부분적으로 연결된 상태인 경우 네트워크에서 적절한 연결을 유지하는 하위 클러스터 부분에 새 노드가 추가됩니다. 두 하위 클러스터 모두와 연결된 경우 크기가 더 큰 하위 클러스터, 즉 노드 수가 더 많은 하위 클러스터에 합류합니다. 노드 수가 동일하면 IP를 코디네이터 노드와 비교하여 더 큰 IP를 가진 코디네이터에 참여합니다.
클라이언트 연결
부분 연결의 경우 클러스터가 불안정한 환경에 있기 때문에 클라이언트 애플리케이션이 갑작스럽고 불확실한 동작을 일으킬 수 있습니다. 클라이언트 시스템이 두 하위 클러스터 모두에 연결된 경우 클라이언트 중 일부는 하위 클러스터 1에 연결되고 다른 일부는 하위 클러스터 2에 연결될 수 있습니다. 모든 클라이언트가 하나의 하위 클러스터에 연결되도록 네트워크 연결이 이루어질 가능성이 있습니다. 클러스터만. 클러스터에도 데이터 일관성이 없습니다.
부분 연결 문제 수정
Split-Brain 문제를 해결하려면 NCache 아래에 설명된 대로 수동 및 자동 복구 옵션을 모두 제공합니다.
수동 해결
클러스터가 부분적으로 연결된 상태가 되면 다시 시작해야 합니다. 첫 번째 권장 사항은 이 상태를 초래한 문제를 식별하고 해결하는 것입니다. 네트워크 문제로 인한 경우 네트워크 안정화를 시도하세요. 문제를 해결한 후 단일 클러스터를 생성하는 노드를 종료하고 하나씩 시작합니다.
예를 들어 그림 3의 클러스터를 살펴보겠습니다. 하위 클러스터 1에서는 노드 2, 노드 4 및 노드 1가 완전히 연결되어 있는 반면, 하위 클러스터 3에서는 노드 5과 노드 2가 완전히 연결되어 있음을 알 수 있습니다. 결함으로 인해 하위 클러스터 2가 생성되었으므로 노드 3과 노드 5를 종료해야 합니다. 네트워크 결함을 일으키는 문제를 해결해 보세요. 완료되면 각 노드를 하나씩 시작합니다. 시작된 노드는 하위 클러스터1의 일부가 되며, 이후 완전히 연결된 클러스터로 전환됩니다.
스플릿 브레인 자동 복구
Split-Brain을 지원하기 위해, NCache 또한 Split-Brain Auto Recovery 옵션인 자동 방법을 제공합니다. NCache 관리센터. 데이터는 다양한 유형일 수 있고 다양한 민감도 수준을 가질 수 있으므로 기본적으로 이 옵션은 비활성화되어 있습니다. 전적으로 관리자에게 달려있습니다. NCache 관리 센터에서는 상황에 따라 필요하다고 판단하여 활성화할지 여부를 결정합니다. 클러스터에 대해 분할 브레인 자동 복구를 활성화하려면 다음을 참조하세요. 다음을 사용하여 분할 뇌 자동 복구 활성화 NCache 관리 센터.