View

 zookeeper를 구성하는 경우 과반수 선출(majority voting/quorums)을 위해 
zookeeper server의 수를 홀수로 구성할 것을 권고한다.  

개발/테스트 환경을 위해서 1대로 구성하는 경우가 아니라면,
보통 3대로 구성하며 더 failure에 대해 견고하게 구성하고자 한다면 5대로 앙상블ensemble을 구성하게 된다. 


* 그렇다면  zookeeper를 짝수로 구성하면 어떠한 문제가 생기는 것인가?

결론적으로 말하면 그렇다고 해서 문제가 생기지는 않는다.
다만 4대로 구성하는 경우는 결함failure 에 대한 수준이 3대로 구성한 것과 다르지 않으며,
6대로 구성한 경우도 5대로 구성한 경우와 다르지 않다.  

예를들어, zookeeper server 4대로 운영하던 중 leader역할을 수행하던 zookeeper 서버에
문제(N/W, machine issue, etc..)가 발생하여 3대가 남았다고 가정해보자.
이 경우 남은 follower 역할을 수행하던 zookeeper server 중 랜덤한 zookeeper server 한대가 leader 역할을 수행하게 된다.
이는 전체 앙상블을 이루던 4대 중 과반수인 3대가 정상적으로 서비스 되기 때문이다. 

만약 추가적으로 1대의 zookeeper server가 문제가 발생해 2대의 zookeeper server만 남는 경우라면 
과반수(>=3)을 넘지 못함으로 문제가 없는 것으로 판단되었던 다른 2대의 zookeeper server도 서비스를 종료하게 된다. 

3대로 zookeeper 앙상블을 구성한 경우도 동일하다. 과반수(>=2)를 유지하기 위해서는 1대의 결함만을 허용한다. 
4대의 구성과 3대의 구성으로 인한 결함 허용 수준이 1대로 다르지 않기 때문에 홀수로 zookeeper 앙상블을 구성하라고 권고하는 것이다. 

결과적으로 결함 허용수준(F) 에 따라서 다음과 같이 앙상블을 구성하는 zookeeper server 수(N)을 결정하면 된다. 

> N = 2*F+1


* 또 그러면 zookeeper는 majority voting/quorums를 언제 사용하는 것인가?

zookeeper의 주요한 특징인 atomic broadcast를 수행하기 위해서 majority quorums을 사용한다. 
이는 분산처리 환경에서 데이터 저장, 조회, 처리를 위해서 필요한 기능으로 빠르게 대량의 데이터를 처리하기 위해서는 
올바른 데이터를 가지고 있는 과반수의 node들이 필요하게 된다. 또한 leader activation(election)을 수행하는 경우에도 
atomic broadcast를 사용함으로 majority voting을 수행하게 된다. 


* 반대로 majority voting을 사용하지 않는 경우에 어떻게 될 것인가? 

zookeeper가 분산환경으로 구성되는 서비스 이기 때문에 서로 다른 랙rack 또는 데이터센터datacenter에 구성할 수도 있다. 
만약 2곳의 데이터 센터에 zookeeper 앙상블이 구성되어 있고 각각 3대의 zookeeper server를 가지고 있다고 가정해보자. 
운영 중 스위치 장애와 같은 N/W 문제로 인해 데이터센터 간 통신이 되지 않는 상태에서 데이터센터 내부의 통신은 정상적일 수 있다.  
이때 만약 majority voting을 사용하지 않는다면 하나의 zookeeper 앙상블에서 각 센터에 하나씩 2개의 leader가 선출될 수 있다. 
이러한 상태에서 운영이 된다면 하나의 앙상블 이미지를 가지고 있어야 하는 zookeeper에서 두개의 이미지를 가지고 있는 것임으로 
데이터간 정합성이 맞지 않게 되며, 나중에 N/W 이슈가 정상화 된다고 하더라도 더 큰 서비스 문제가 발생할 수 있다. 

과반수정책을 사용하게 되면 무조건 1개의 앙상블만 유지되게 되며, 데이터 정합성에 대한 문제가 발생하지 않는다. 


참고
- https://youtu.be/XdTpygAO9SU
- https://zookeeper.apache.org/doc/r3.4.6/zookeeperInternals.html


 




Share Link
reply
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30