Пример настройки нескольких серверов ZooKeeper

#configuration #admin #apache-zookeeper #distributed-computing #multiserver

#конфигурация #администратор #apache-zookeeper #распределенные вычисления #мультисервер

Вопрос:

Из документов конфигурации нескольких серверов ZooKeeper они показывают следующие конфигурации, которые могут быть размещены внутри (конфигурационного zoo.cfg файла ZK) на каждом сервере:

 tickTime=2000
dataDir=/var/zookeeper/
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
  

Кроме того, они заявляют, что вам нужен myid файл на каждом узле ZK, содержимое которого соответствует одному из server.id приведенных выше значений. Так, например, в «ансамбле» из 3 узлов (кластер ZK) файл первого узла myid будет просто содержать значение 1 . Файл второго узла myid будет содержать 2 , и так далее.

У меня есть несколько практических вопросов о том, как это выглядит в реальном мире:

1. Можно localhost использовать?Если zoo.cfg необходимо повторить на каждом узле в ансамбле, можно ли определить текущий сервер как localhost ? Например, в ансамбле из 3 узлов будет ли нормально, если сервер # 2 zoo.cfg будет выглядеть так:

 tickTime=2000
dataDir=/var/zookeeper/
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=localhost:2888:3888    # Afterall, we're on server #2!
server.3=zoo3:2888:3888
  

Или это не рекомендуется / невозможно?

2. Должны ли идентификаторы серверов быть числовыми?Например, могу ли я иметь ансамбль из 5 узлов, где каждый сервер zoo.cfg выглядит как:

 tickTime=2000
dataDir=/var/zookeeper/
clientPort=2181
initLimit=5
syncLimit=2
server.red=zoo1:2888:3888
server.green=zoo2:2888:3888
server.blue=zoo3:2888:3888
server.orange=zoo1:2888:3888
server.purple=zoo2:2888:3888
  

И, скажем, сервер 1 myid будет содержать значение red внутри него (и т.д.)?

Ответ №1:

1. Можно ли использовать localhost?

Это хороший вопрос, поскольку в документах ZooKeeper не ясно, принимает ли файл конфигурации только IP-адреса. В нем указано только hostname , что может означать либо IP-адрес, DNS, либо имя в hosts файле, например localhost .

server.x= [имя хоста]: nnnnn[:nnnnn] и т. Д.
(Нет системного свойства Java)

серверы, составляющие ансамбль ZooKeeper. При запуске сервер определяет, к какому серверу он относится, путем поиска myid файла в каталоге данных. Этот файл содержит номер сервера в ASCII, и он должен соответствовать x в server.x в левой части этого параметра.

Однако обратите внимание, что ZooKeeper рекомендует использовать один и тот же файл конфигурации на всех хостах:

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

Итак, просто введите IP-адрес компьютера, и все должно работать. Кроме того, я лично протестировал использование 0.0.0.0 (в ситуации, когда IP-адрес интерфейса отличался от общедоступного IP-адреса), и это действительно работает.

2. Должны ли идентификаторы серверов быть числовыми?

Из документов по настройке нескольких серверов ZooKeeper myid должно быть числовое значение от 1 до 255:

Файл myid состоит из одной строки, содержащей только текст идентификатора этой машины. Таким образом, myid сервера 1 будет содержать текст «1» и ничего больше. Идентификатор должен быть уникальным в ансамбле и должен иметь значение от 1 до 255.

Поскольку myid должно соответствовать параметру x in server.x , мы можем сделать вывод, что x это также должно быть числовое значение.