2015-06-18 4 views
3

Я пытаюсь создать балансировщик нагрузки перед кластером Zookeeper 3.4.6. Когда я делаю, что кластер работает хорошо, но возникает исключение:Load Balancer с Zookeeper

WARN [NIOServerCxn.Factory: 0.0.0.0/0.0.0.0: 2181: NIOServerCnxn @ 357] - поймал конец потока исключения EndOfStreamException: Невозможно читать дополнительные данные от клиента SESSIONID 0x0, скорее всего, клиент закрыл сокет
в org.apache.zookeeper.server.NIOServerCnxn.doIO (NIOServerCnxn.java:228)
в org.apache.zookeeper.server.NIOServerCnxnFactory.run (NIOServerCnxnFactory.java:208)
at java.lang.Thread.run (Thread.java:745)

Это означает, что Zookeeper понимает Load Balancer как клиента, и это tryong, чтобы установить соединение с ним. Но Load Balancer просто пингует TCP 2181 и выходит.

ответ

2

Вы пытаетесь использовать балансировку нагрузки между вашим кластером ZooKeeper и клиентами?

Когда вы предоставляете своим клиентам строку соединения ZooKeeper в виде нескольких конечных точек, таких как: «server1, server2, server3 ...», клиенты выбирают один из серверов и переключаются в случае отказа. Таким образом, если все ваши клиенты имеют одну и ту же строку конечных точек ZooKeeper, вы получите сбалансированный пул.

Если вы установили стандартный балансировщик нагрузки между клиентами и сервером, это может привести к сбоям, подобным этому. Балансировщик нагрузки не очень хорошо работает с тем, как ZooKeeper ожидает, что его клиенты будут себя вести. Клиент должен поддерживать открытое TCP-соединение с определенным сервером, на котором он имеет сеанс, отправляя периодические биения.

Существуют определенные ограничения на то, как клиенты ZooKeeper сами загружают баланс (например, соединения не будут перебалансироваться в случае перезагрузки сервера), но для фиксации этих ограничений потребуется логика балансировки нагрузки, поддерживаемая протоколом ZooKeeper, вероятно, как часть клиента реализация.

+0

Целью использования балансировки нагрузки является возможность масштабирования zookeeper без необходимости изменения конфигурации клиентов. Возможно ли это в любом случае? –

+0

Хороший вопрос. Я не уверен. Текущая стабильная версия 3.4.x ее не поддерживает, клиентам нужна статическая строка подключения. В версии 3.5 есть новые функции реконфигурации, но не уверены, когда это будет доступно. Как я уже говорил, если вы ставите что-либо между вашими клиентами ZK и сервером, которые добавили бы эту функциональность, вы должны быть очень осторожны, чтобы не путаться с тем, как ZK ожидает, что клиентские соединения будут вести себя, например. поддерживая сердцебиение. – igorbel