Из часто задаваемых вопросов о ZooKeeper:
Reliability:
A single ZooKeeper server (standalone) is essentially a coordinator with
no reliability (a single serving node failure brings down the ZK service).
A 3 server ensemble (you need to jump to 3 and not 2 because ZK works
based on simple majority voting) allows for a single server to fail and
the service will still be available.
So if you want reliability go with at least 3. We typically recommend
having 5 servers in "online" production serving environments. This allows
you to take 1 server out of service (say planned maintenance) and still
be able to sustain an unexpected outage of one of the remaining servers
w/o interruption of the service.
В ансамбле из трех серверов, если один сервер выходит из ротации и один из них неожиданно выходит из строя, то остается еще один сервер, который должен гарантировать отсутствие прерывания обслуживания. Тогда зачем нужны 5 серверов? Или рассматривается вопрос не только о прерывании обслуживания?
Обновление:
Спасибо @sbridges за указание на то, что это связано с поддержанием кворума. ZK определяет кворум ceil(N/2)
, где N
- это исходный номер в ансамбле (а не только в текущем доступном множестве).
Теперь поиск в Google кворума ZK находит это в главе о ZK книги HBase:
В ZooKeeper поддерживается четное число одноранговых узлов, но обычно оно не используется, потому что ансамбль четного размера требует пропорционально больше одноранговых узлов для формирования кворума, чем требуется ансамблю нечетного размера. Например, ансамблю с 4 равноправными участниками требуется 3 участника для формирования кворума, в то время как ансамблю из 5 участников также требуется 3 участника для формирования кворума. Таким образом, ансамбль из 5 позволяет двум одноранговым узлам выйти из строя и по-прежнему поддерживать кворум и, таким образом, является более отказоустойчивым, чем ансамбль из 4, который допускает только 1 нижний одноранговый узел.
И это перефразирование Википедии в блоге Эдварда Дж. Юна :
Обычно ожидается, что это будет большинство людей, хотя во многих организациях кворум может быть ниже или выше.