#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
это также должно быть числовое значение.