본 주제에 대해서 잘 이해가 안되서 미뤄두고 있다가, 약간 가닥을 잡은거 같아서 해당 내용을 공유하고자 합니다.
vSAN 에서 Storage Policy 를 적용하다보면, 어느경우에는 witness component 가 생기고 어떤 경우에는 안생기는 경우가 있습니다. 이 두가지 경우에 대한 “왜?” 라는 질문이 나온다면 참고하시기 바랍니다. 일반적인 경우에는 사실 신경쓸 필요없습니다만… 엔지니어분들은 꼭 이해하고 넘어가야 속이 시원하신 분들도 있죠.
vSAN 에서 witness/vote 는 quorum 을 위해서 사용됩니다. 여기서 vote 는 vSAN 6.0 부터 추가된 개념입니다.
vSAN 에서는 FTT 설정에 따라서 필요로 하는 Fault Domain 의 수가 있습니다. 여기서 Fault Domain 은 특별한 조건이 아닌 이상, 하나의 Host 가 하나의 Fault Domain 이다 라고 보시면 됩니다.
RAID 1 일 경우 = 2N+1
RAID 5/6 일 경우 = 2N+2
위 내용에 맞춰, FTT 가 1,2,3 일 때 각각 요구되는 최소 호스트의 숫자가 결정되는 것입니다. 정리하면 아래와 같이 되겠죠.
RAID-1 | FTT | 최소로 필요한 호스트의 수 (Fault Domain 의 수) |
1 | 3 | |
2 | 5 | |
3 | 7 | |
RAID-5/6 | FTT | 최소로 필요한 호스트의 수 (Fault Domain 의 수) |
1 | 4 | |
2 | 6 |
그렇다면 Witness component 들은 어떤 경우에 생기느냐?
vSAN Storage Policy 따라서 component 가 “배치되고 난 후” 에 Fault Domain 의 숫자에 따라 다릅니다. 배치된 후 FD 의 숫자가 필요로 하는 숫자보다 작다면 witness component 가 생깁니다.
그렇다면 vote 는? 아래 내용을 기억해두세요.
- Fault Domain 은 모두 동일한 수의 Vote 를 가져야 한다.
- Fault Domain 내의 Component 들은 1개의 Vote 를 기본적으로 가져간다.
- 그리고, Total Vote 의 숫자는 반드시 홀수여야 하며, 이 것을 위해 vSAN 에서는 component 당 1개 이상의 vote 를 가질 수 있다.
- 그 결과 Fault Domain 간의 Vote 숫자는 달라질 수 있다.
FTT=1, SW=1 일때를 가정해서 보죠.
위와 같이 2개의 호스트에 Component 가 1개씩 배치가 됩니다. FD 는 2개인 상태지요. FTT=1 일때 최소로 필요로하는 FD 의 수는? 3이죠. 따라서 현재 필요로 하는 FD 보다 숫자가 모자릅니다. 이때 vSAN 은 3개의 FD 를 만족하기 위하여 3번째 호스트에 witness component 를 만들게 됩니다. 그 결과가 아래와 같습니다.
Total Vote 의 숫자가 홀수이기 때분에 Vote 숫자의 조정은 없습니다.
음.. 그럼 SW 가 2인 경우는??
Data component 가 2대의 호스트로 나누어서 배치되었기 때문에, 여전히 FD 의 숫자는 2개입니다. 3개보다 모자르기 때문에 witness 가 생깁니다. 그리고 모든 FD 가 동일한 Vote 를 가져야 하기 때문에 FD3 의 Vote 가 2가 됩니다. 그 결과 Total Vote 가 6(짝수) 가 되어, vSAN 에서 임의로 Vote 숫자를 조정합니다. 그 결과 Total Vote 는 7 이 됩니다.
위의 경우는 호스트가 3대일 때지요. 만약 호스트가 4대라면 어떻게 배치될수 있을까요? 위와 똑같을수도 있지만, vSAN 에서는 가능하면 모든 리소스를 활용하고 싶어할겁니다. 그럼 베스트한 경우 아래와 같은 그림이 됩니다.
Component 배치 후 FD 가 3개가 되었습니다. 따라서 최소로 필요한 FD 의 개수와 동일하기 때문에 witness 는 생성되지 않습니다. 각 FD 간 vote 의 숫자가 동일해야 하기 때문에 FD2와 FD3 의 Vote 수를 2로 맞춥니다. 맞추고 나면 Total Vote 의 수가 6 이 됩니다. Total Vote 의 수는 무조건 홀수여야 하기 때문에 마지막으로 vSAN 에서 임의로 Vote 카운트 숫자를 늘려서 홀수 로 만듭니다. (어떤 component 의 vote 를 늘릴지는 vSAN 에서 결정)
자 그럼 아에 화끈하게 FTT 를 늘려보죠. FTT=3 입니다. FTT=3 상황에서 Data object 를 배치해보겠습니다.
위와 같이 특별한 문제가 없으면 4대의 호스트에 1개씩 Component 가 배치될것입니다. 그래서 FD 의 숫자가 4가 됩니다. 그런데 잠깐..? FTT=3 일때 필요로 하는 FD 의 수는? 7 입니다. 3개가 모자르죠. 그래서 3개의 witness 를 추가로 배치해서 FD 를 7개를 만듭니다.
정리하면..
모든 FD 의 Vote 숫자가 1로 똑같고, Total Vote 의 숫자가 7, 홀수 이기 때문에 별도의 vote 값 조정은 없습니다.
RAID1만 알아보면 좀 그러니까, RAID5/6 일때도 한번 볼까요?
위와 같이 4개의 FD 가 생성이 됩니다. witness 가 생성되지 않는 이유는? RAID5 시에 최소로 필요로 하는 FD 가 4이기 때문에 숫자를 만족합니다. 대신 Total Vote 가 4 라서 짝수 이기 때문에 vSAN 에서 임의로 vote 숫자를 조정합니다.
RAID6 보겠습니다. FTT=2 가 되겠죠.
RAID6 사용시 필요로 하는 Fault Domain 의 숫자는 6입니다. 4개의 Component 과 2개의 Parity 가 분산 배치되어서 6개의 FD 숫자를 만족합니다. 따라서 witness 는 생기지 않습니다. 그러나 Total Vote 가 6이기 때문에 vSAN 에서 vote 숫자를 조정해서 홀수로 만듭니다.
위에서 vote 는 vSAN 6.0 부터 추가되었다고 말씀드렸는데요, 이전버전에서는 무조건 witness 를 추가하게 되어있었습니다. vote 개념이 생기게 된 이유는 witness 를 무조건 추가하다보니, 하나의 호스트에서 수용할 수 있는 component 숫자의 제한을 받게 되었기 때문입니다.. (현재버전에서는 9,000 개 인가 그렇습니다..) 따라서 component 를 늘리는것보다, vote 시스템을 추가하여 처리하게 되었다는것.. 참고하시면 되겠습니다.
이해가 되셨을지 모르겠네요.
중요한 점은, witness component 가 생기거나, vote 숫자가 바뀌는 것은 사용중인 환경에 따라서, component 가 어떻게 배치되느냐에 따라서 동일한 Policy 를 쓴다하더라도 얼마든지 다를 수 있습니다. 기술적으로 이해만 하시고, 실제 운영중에는 신경쓰실 필요는 없을 것 같습니다.
안녕하세요. 이해하기 쉽게 설명해주셔서 항상 감사합니다. 궁금한점이 있는데 vote 가 정확히 무엇인가요..?
split brain 상황이 되었을때 어디로 primary 를 잡을지 결정하는 용도라고 보시면 됩니다.