2016-12-26 7 views
1

Я изучаю модель master-slave в zookeeper. У меня просто вопрос:Что произойдет, если мастер и подчиненный не смогут общаться?

Что произойдет, если один хозяин и один подчиненный не смогут общаться друг с другом? как мастер не может получить ACK от подчиненного? Будет ли вещать перезагрузку?

ответ

1

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

Если лидер в большинстве своем разделе,

Кворум будет продолжать работать в качестве лидера имеет большинство кворума. В разделе меньшинства серверы остановятся и перейдут на фазу выборов лидеров. Следующий текст цитируется из почтового потока в user mail list Apache Zookeeper.

После раздела все серверы в регионе меньшинства будут отключены и перейдут на фазу выборов лидера. Все клиентские сеансы , подключенные к этим серверам, будут отключены и будут получать событие «KeeperState.Disconnected» для своих наблюдателей, если они зарегистрированы.

Но ZooKeeper поддерживает режим только для чтения. В этом режиме клиент может подключиться к серверу только для чтения, даже если сервер может быть , выделенный из кворума.

Если лидер находится в разделе меньшинства,

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

В вашем вопрос, что вы называете master cannot connect to slave, является примером разделения сети. Либо мастер (лидер) находится в разделе меньшинства, либо подчиненный находится в разделе меньшинства.

Надеюсь, у вас есть идея :-)