컨트롤 플레인 노드는 클러스터에서 관제탑 역할을 하는 핵심 Pod들이 있기 때문에
해당 노드가 죽으면 서비스에 치명적이다.
(※ 컨트롤 플레인 노드가 죽으면, 이미 떠 있는 Pod는 그대로 동작하지만 새로운 Pod 띄우기나 kubectl 명령어는 동작하지 못한다.)
그래서 보통 다중화를 한다.
엥? 컨트롤 플레인 노드는 이중화를 하지 않는다며?
맞다.
내 말은 컨트롤 플레인 노드는 보통 다중화를 하고, 그 중 이중화는 하지 않는다.
오케이.
단일 장애점을 제거하고 고가용성 확보를 위해 다중화를 하는건 알겠는데, 왜 이중화는 안돼?
k8s에서 클러스터의 모든 상태 정보를 저장하는 저장소, etcd 때문이다.
etcd는 내부적으로 Raft 합의 알고리즘으로 동작한다.
Raft 합의 알고리즘은 리더-팔로워-후보 3가지 역할과 과반수 원칙으로 동작한다.
1. 리더-팔로워-후보 3가지 역할
- 3가지 역할 중 하나를 맡게 된다.
- 리더는 쓰기 요청을 받고 팔로워에게 전파하며, 리더는 최대 1명만 맡고 리더가 없으면 클러스터가 동작하지 않는다.
- 팔로워는 리더의 쓰기 요청을 전파 받는다.
- 후보는 리더가 사라졌을 때, 다음 리더 후보를 말한다.
2. 과반수 원칙
- 리더가 사라진 경우, 전체 멤버가 투표해 후보 중에서 선발한다.
- 후보는 자기 자신에게 투표를 한다.
- (죽은 리더를 포함한)전체 인원 수에서 과반수를 받은 후보가 리더가 된다.
- 보통 후보는 한 명만 선발되지만, 후보가 2명 이상이라 표가 갈려 아무도 과반수를 받지 못하면 후보 선출부터 다시 진행한다.
이중화의 경우를 생각해보자.
etcd는 2대가 되었고 두 대는 합의를 이루기 위해 Raft 합의 알고리즘을 활용한다.
하나는 리더, 또 하나는 팔로워가 된다.
갑자기 리더 etcd가 있는 노드에 문제가 생겨 새로운 리더를 선출해야 하는 상황이 발생했다.
팔로워였던 나머지 하나가 후보가 되고 자기 자신에게 투표를 한다.
그러나 과반수여야 새 리더로 선출이 되는데, 과반수가 안되어서 후보 선출부터 다시 진행한다.
원래 리더가 돌아올 때까지, 무한 반복된다.
그래서 k8s에서는 다중화를 할 때, 이중화를 하지 않는다.
이렇게만 넘어가려고 했지만 다음 의문이 들었다.
아니, 과반수 안 하고 두 대 중에 하나 살아있으면 나머지 하나 그냥 리더로 돌게 하면 좋은거 아냐?
맞다.
단편적으로 보면 단일 장애지점도 제거하고 고가용성도 확보했다고 볼 수 있다.
이 부분을 좀 더 알아보기 위해 etcd끼리 죽었니 살았니를 어떻게 파악하는지 알아보자.
etcd끼리도 소통을 위해 API는 아니지만 전용 포트로 네트워크 통신을 한다.
그래서 통신이 되는지 여부로 파악을 하는 것이다.
여기서 문제가 발생한다.
리더 etcd가 죽은게 아니라 네트워크 통신이 문제였다면?
그 순간 팔로워가 혼자 투표해 당선이 된다면, 두 개의 리더 etcd가 생긴다.
앞서 말했듯이 etcd는 클러스터의 모든 정보 저장소인데 같은 데이터를 관리하는 저장소가 2개가 되면
한 데이터에 2개의 상태가 생기는 상황이 발생한다.
이걸 스플릿 브레인이라고 한다.
(ex. 5만원 있는 통장에서 5만원을 2번 인출)
그 이후 네트워크가 복구되어도 문제가 발생한다.
기준에 따라 리더 한 명이 다시 팔로워가 되고 저장소를 1개로 합치는 과정에 한쪽 저장소의 작업이 통째로 사라진다.
(ex. 5만원 있는 통장에서 5만원을 2번 인출했는데, 1번 인출했다고 기록)
그래서 과반수 원칙을 적용하는 것이다.
그러면 이중화에서는 혼자서는 리더가 될 수 없고, 리더가 둘이 되는 일도 없다.
다만, 이러면 네트워크 문제든 서버 장애든 한 대에만 문제가 생겨도 전체가 멈춘다.
삼중화 이상이라면 한 대와 연결이 끊겨도 나머지 2대가 과반수를 이뤄 계속 동작한다.
추가적으로 etcd에는 CheckQuorum이라는 장치가 있는데,
리더가 일정 시간 동안 과반수와 연락이 안 되면 팔로워로 내려온다.
이런 이유까지 봤을 때,
k8s에서는 이중화가 가능하지만 비효율적이기 때문에 삼중화 이상,
그리고 과반수 원칙 때문에 짝수는 홀수에 비해 서버만 늘고 안정성은 그대로여서,
홀수 다중화를 진행한다.
(ex. 3대의 과반수는 2, 4대의 과반수는 3
두 경우 과반수를 지켜야 할 때, 허용되는 장애 대수 1로 동일하다.)