1

Что происходит с сервером и его клиентами в случае если в кластере zookeeper один из серверов потерял соседей - он продолжает отдавать те данные которые были на момент потери подключения (как etcd), отключает всех своих клиентов, продолжает отдавать данные за исключением эфемерных нод или что-то еще?

Контекст вопроса: надо иметь доступ к актуальным данным. Если это невозможно - вовремя узнать что доступа нет и выключиться. В кластере etcd если сервер потерял соединение с общим кластером - он продолжает отдавать данные, но запись в него невозможна. При этом он игнорирует параметр времени жизни значения (ttl), т.е. чтобы определить что данные актуальны каждый клиент должен постоянно писать в сервер и если запись не прошла - переподключаться к другому (вручную, встроенного механизма нет). Как это устроено в zookeeper?

Nicolas Chabanovsky
  • 51,426
  • 87
  • 267
  • 507
rekby
  • 1,650

1 Answers1

0

Исходя из этого обсуждения, этой страницы и общепринятого использования модели кворума - та часть кластера, которая не можнт набрать кворум, переходит в waiting state, в котором перестает принимать клиентов и только лишь ждет восстановления кворума:

As a result, no clients can connect to the ZK service anymore, for reads or for writes. Clients will simply receive a ECONNREFUSED failure at this point. There's no 'read-only' mode - every operation in ZK requires a presence of an quorum. The ZK overview doc mentions this implicitly http://archive.cloudera.com/cdh5/cdh/5/zookeeper/zookeeperOver.html:

"""
As long as a majority of the servers are available, the ZooKeeper service will be available.
"""

etki
  • 36,151