Надежность ZooKeeper - три узла против пяти

Из часто задаваемых вопросов о 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 нижний одноранговый узел.

И это перефразирование Википедии в блоге Эдварда Дж. Юна :

Обычно ожидается, что это будет большинство людей, хотя во многих организациях кворум может быть ниже или выше.


person user650654    schedule 23.10.2012    source источник
comment
Каким будет пример планового обслуживания?   -  person user1870400    schedule 27.01.2017


Ответы (2)


Zookeeper требует, чтобы у вас был кворум серверов, где кворум составляет ceil(N/2). Для ансамбля из 3 серверов это означает, что 2 сервера должны быть задействованы в любое время, для ансамбля из 5 серверов в любое время должны быть задействованы 3 сервера.

person sbridges    schedule 23.10.2012
comment
Почему не рекомендуется кластер из 4 узлов? - person Aravind Yarram; 04.09.2015
comment
Я согласен с @Pangea здесь. Это означало бы, что кластер с 5 узлами может поддерживать только 2 сбоя (третий сбой будет ниже кворума 3), а кластер с 4 узлами также может поддерживать 2 сбоя (3-й сбой будет ниже кворума 2). - person Luke; 06.11.2015
comment
@Pangea, см. zookeeper.apache.org/doc/r3.1.2/zookeeperAdmin. html ... Пока работает большая часть ансамбля, служба будет доступна. Поскольку Zookeeper требует большинства, лучше использовать нечетное количество машин. .... Также, учитывая четное количество узлов, вы также рискуете разделиться на мозг, скажем, у вас 8 узлов, а сеть разделена на 2 части с 4 узлами на каждой стороне ... каждая (4) сторона узла не смогут продолжить, поскольку у них нет кворума. - person scaph01; 25.02.2016
comment
Похоже, это должно быть ceil((N+1) / 2). Кворум для ансамбля из 4 человек должно быть 3, а не 2, как указано в книге HBase. - person user650654; 27.10.2016

По сути, Zookeeper будет работать нормально, пока Активные Zookeepers находятся в БОЛЬШИНСТВЕ по сравнению с Zookeepers-неудачниками. Кроме того, в случае равного размера кворума, например 2,4,6 и т. Д. Failed = Active, из-за этого не рекомендуется.

И 3, и 4 будут обрабатывать только 1 ошибку, тогда почему мы хотим использовать 4 Zookeepers вместо 3.

введите описание изображения здесь

person Afee    schedule 12.09.2018
comment
кажется очень интересным наблюдением, не могли бы вы уточнить, что интерпретировать из колонки «Большинство». - person Nag; 06.05.2020