Split Brain
: 일반적으로 클러스터로 구성된 두 시스템 그룹 간 네트워크의 일시적 동시 단절현상이 발생했을때 나타나는 현상
: 클러스터 상의 모든 노드들이 노드 각자가 자신을 primary라고 인식하게 되는 상황
-> 어느 특정 리소스에 대한 두 시스템 그룹 간의 모든 네트워크 연결이 동시에 실패하면 네트워크 파이션이 발생함
-> 이 상태가 발생하면 파티션 양쪽의 시스템이 각각 반대쪽에서 응용프로그램을 재시작하여 중복서비스 또는 Split brain을 유발함
Split brain은 클러스터로 구성된 독립적인 두 시스템이 특정 리소스(일반적으로 파일 시스템 또는 볼륨)에 대한 배타적 액세스 권한이 있다고 가정할 경우 발생
네트워크 파티션으로인해 발생하는 가장 심각한문제는 공유디스크의 데이터에 영향을 준다는 점
클러스터 내의 모든 노드들이 자신이 primary(master)노드라고 인삭하는 것 -> 데이터의 동기화에 문제가 발생할 수 있음
cluster 에서 partition ( node간 통신 두절 ) 시 발생할 수 있는 두가지 문제.
①split brain
cluster를 구성하는 node간 통신이 두절되고 cluster가 sub-cluster로 쪼개질 때 발생한다.
이 때 각각의 sub-cluster는 자신이 유일한 cluster로 믿고 있는 상황이다. 이 상황에서 sub-cluster는 공유 resource에 대한
충돌을 야기할 수 있다. 예를들어 이중화된 network 주소 또는 공유 스토리지같은 것들이다.
②amnesia
모든 노드가 클러스터를 떠난다면 발생한다.
예를들어 순서는 다음과 같다.
노드 A가 다운된다 --> 설정 데이터는 노드 B에서 업데이트된다. --> 노드 B가 다운된다. --> 노드 A가 재부팅된다.
이 때 노드 A는 이전 설정 데이터를 가지고 있다. 이 상황에서 cluster는 고아 설정데이터로 운영된다.
split brain 과 amnesia 문제를 극복하기 위한 방법으로 대표적인 것이 majority of votes mechanism 이다.
일단 cluster를 구성하는 노드들이 각각 한표씩을 갖는다. 그리고 제어권을 갖는 partition 에 표를 위임하는 방식이다.
위임받는 partition은 정족수를 갖게되고 정상적인 동작을 계속한다.
투표권을 가질 수 있는 것은 cluster를 구성하는 각 노드들과 외부 quorum device 이다.
각 노드의 투표권 = 1
quorum device 의 투표권 = 모든 node 의 투표권 - 1
quorum (정족수) = cluster내의 모든 투표권/2
split brain 상황에서 sub-cluster 각각은 자신이 접근가능한 모든 투표권을 카운트한다.
정상적인 sub-cluster 는 quorum device의 투표권을 가져오고 정족수를 채우게 된다.
비정상 sub-cluster 는 quorum device의 투표권을 가져오지 못하고 정족수 미달로 스스로 동작을 멈춘다.
amnesia 상황에서는 마지막에 부팅에 들어간 node가 cluster booting 우선권을 갖게 한다.
위 상황에서는 노드 B가 우선권을 갖고 cluster booting을 수행한다.
보통의 구성에서 quorum device 는 공유디스크로 구성한다.
예제.
노드가 2개로 구성된 cluster가 있고 quorum device 로써 공유 스토리지를 사용하고 있다.
이 때 노드 1번의 interconnect 회선의 단절되었다. 이 경우 다음과 같이 게산된다.
1번 노드의 투표권 = 1, 2번 노드의 투표권 = 1
quorum device 의 투표권 = 2 - 1 = 1
quorum = 3/2 = 1.5 ==> 2
quorum device 의 투표권을 가져온 노드가 cluster제어권을 갖고 그렇지 못한 노드는 정족수 미달로
cluster 동작이 중지된다.
'IT Engineer > Database' 카테고리의 다른 글
[Database] 데이터베이스에서의 Segment란? Segment 종류. 객체와 세그먼트의 차이 (0) | 2018.01.18 |
---|---|
[Database] XA 개념 정리. XA? Non-XA? 분산트랜잭션 (0) | 2018.01.18 |
[Database] PSM이란? PSM처리과정, PSM블록구조 (0) | 2018.01.18 |
[Database] ODBC란? Indicator variable(indicator변수)란? (0) | 2018.01.18 |
[DataBase] LATCH와 LOCK. LOCK의 MODE (0) | 2018.01.18 |