Конфигурирование кластера ZooKeeper#
Конфигурирование кластера Apache ZooKeeper осуществляется в файле zookeeper.properties.
Минимальная конфигурация кластера#
Пример минимального конфигурационного файла zookeeper.properties для кластера из трех серверов:
server.1=zookeeper-1-ip:2888:3888
server.2=zookeeper-2-ip:2888:3888
server.3=zookeeper-3-ip:2888:3888
dataDir=/path/to/zookeeper-data
clientPort=2181
tickTime=2000
initLimit=5
syncLimit=2
Шаги создания конфигурационного файла:
Добавьте в файл переменные
server.INDEX=IP:PORT1:PORT2, где:INDEX— индекс (myid) узла ZooKeeper в кластере;IP— адрес данного сервера;PORT1— порт для подключения серверов-последователей в кластере к лидеру;PORT2— порт для подключения остальных сервисов ZooKeeper в момент выбора сервиса-лидера в кластере.
Если необходимо запустить кластер ZooKeeper на нескольких серверах, то в конфигурационном файле укажите адреса всех серверов.
Пример
server.1=10.XX.XX.X1:YYYY:ZZZZ server.2=10.XX.XX.X2:YYYY:ZZZZДля переменной
dataDirукажите путь к директории, в которую ZooKeeper будет сохранять файлы с данными, необходимыми ему для работы.Пример
dataDir=/var/log/kafka_2.11-0.9.0.0/zookeeper-dataДля переменной
clientPortукажите номер порта, к которому будут подключаться клиенты.Пример
clientPort=2181Для переменной
tickTimeукажите единицу измерения времени ZooKeeper — это время в миллисекундах, которое уходит на один «тик» или «такт» ZooKeeper.tickTimeнеявно используется в настройках для различных временных параметров ZooKeeper. Например, для временной настройкиinitLimit=10— это означает, чтоinitLimitбудет выполняться за10 * tickTimeмиллисекунд.По умолчанию
tickTime=2000миллисекунд.Пример
tickTime=2000Добавьте в файл переменную
initLimit— максимальное допустимое количество «тиков» (tickTime), которое может пройти, прежде чем узел кластера синхронизируется при запуске. При превышении будет сгенерирована ошибка.Пример
initLimit=10Т. е. максимальное допустимое время на синхронизацию узла кластера при запуске будет равно (
tickTime*initLimit) миллисекунд.Примечание
Это обязательное свойство, без которого узел ZooKeeper не будет запущен.
Добавьте в файл переменную
syncLimit— максимальное допустимое количество «тиков» (tickTime) между отправкой запроса и получением ответа, прежде чем будет сгенерировано исключение.Пример
syncLimit=5Примечание
Это обязательное свойство, без которого узел ZooKeeper не будет запущен.
На этом минимальное конфигурирование кластера ZooKeeper завершается.
Расширенная конфигурация кластера#
Существует ряд дополнительных настроек, которые можно включить в конфигурационный файл:
electionAlg— тип алгоритма для выбора лидера. Возможные значения:3— версия алгоритма для быстрого выбора лидера на основе TCP.
Начиная с ZooKeeper 3.6.0 доступна только версия алгоритма
3. Другие значения параметраelectionAlgне допускаются.Пример
electionAlg=3leaderServes— опция разрешает клиентам подключаться к серверу-лидеру. Значение по умолчанию —yes. Одна из основных задач сервера-лидера — следить за обновлениями и координировать. Отключением этой опции (установкой значенияno) можно добиться некоторого прироста производительности при координации обновлений.Пример
leaderServes=yesСвойства, используемые совместно:
group.x=nnnn[:nnnn]— позволяет построить кворум с иерархической структурой, гдеx— это идентификатор кворума, а в качестве значения указывается список идентификаторов серверов, разделенных двоеточием.Примечание
Группы не должны пересекаться, т. е. объединение всех групп должно давать полный список всех серверов.
weight.x=nnnnn— при использовании вместе сgroup.x=nnnn[:nnnn]позволяет назначить «вес» каждому серверу, который будет учитываться при выборе лидера. По умолчанию вес равен1.
Пример
group.1=1:2:3 group.2=4:5:6 group.3=7:8:9 weight.1=1 weight.2=1 weight.3=1 weight.4=1 weight.5=1 weight.6=1 weight.7=1 weight.8=1 weight.9=1
Следует учитывать, что запуск всех узлов кластера должен происходить за промежуток времени, не превышающий 10 тиков (heartbeat), заданных в строке initLimit=10. Поэтому лучше создать скрипт последовательного запуска всех узлов кластера с одной машины.
Запуск каждого узла ZooKeeper выполняется командой:
bin/zookeeper-server-start.sh -daemon
config/zookeeper.properties
Или с параллельным выводом файла логов в консоль:
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties && tail --f logs/zookeeper.out
Проверка работоспособности#
При запуске всех узлов кластера ZooKeeper в файлах logs/zookeeper.out должны быть следующие записи:
В файлах
logs/zookeeper.outсерверов-последователей:INFO FOLLOWING - LEADER ELECTION TOOK - 847 (org.apache.zookeeper.server.quorum.Learner)В файле
logs/zookeeper.outсервера-лидера:INFO LEADING - LEADER ELECTION TOOK - 408 (org.apache.zookeeper.server.quorum.Leader)
Также в консоли сервера-лидера должна быть запись, информирующая о создании кворума в кластере с перечислением ID узлов:
INFO Have quorum of supporters, sids: [ 1,2 ]; starting up and setting
last processed zxid: 0x100000000
(org.apache.zookeeper.server.quorum.Leader)