Об обслуживании ZooKeeper

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

О ZooKeeper и Edge

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

Чтобы указать узлы ZooKeeper, используйте свойства ZK_HOSTS и ZK_CLIENT_HOSTS в файле конфигурации Edge. Пример:

ZK_HOSTS="$IP1 $IP2 $IP3"
ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3"

Где:

  • ZK_HOSTS указывает IP-адреса узлов ZooKeeper. IP-адреса должны быть указаны в одном и том же порядке на всех узлах ZooKeeper.

    In a multi-Data Center environment, list all ZooKeeper nodes from all Data Centers.

  • ZK_CLIENT_HOSTS указывает IP-адреса узлов ZooKeeper, используемых только этим центром обработки данных. IP-адреса должны быть указаны в одном и том же порядке на всех узлах ZooKeeper в центре обработки данных.

    В случае установки в одном центре обработки данных это те же узлы, которые указаны в ZK_HOSTS. В среде с несколькими центрами обработки данных в файле конфигурации Edge для каждого центра обработки данных должны быть перечислены только узлы ZooKeeper для этого центра обработки данных.

По умолчанию все узлы ZooKeeper назначаются узлами voter. Это означает, что все узлы участвуют в выборе лидера ZooKeeper. Вы можете добавить модификатор :observer к ZK_HOSTS, чтобы указать, что узел является наблюдателем, а не голосующим. Узел-наблюдатель не участвует в выборе лидера.

Обычно модификатор :observer указывается при создании нескольких периферийных центров обработки данных или когда в одном центре обработки данных имеется большое количество узлов ZooKeeper. Например, в установке Edge с 12 хостами и двумя центрами обработки данных ZooKeeper на узле 9 в центре обработки данных 2 является наблюдателем:

В файле конфигурации для центра обработки данных 1 вы задаете следующие настройки:

ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer"
ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3"

А для центра обработки данных 2:

ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer"
ZK_CLIENT_HOSTS="$IP7 $IP8 $IP9"

В следующих разделах содержится более подробная информация об узлах-лидерах, узлах-избирателях и узлах-наблюдателях, а также описываются соображения по добавлению узлов-избирателей и узлов-наблюдателей.

О лидерах, подписчиках, избирателях и наблюдателях

В многоузловой установке ZooKeeper один из узлов назначается лидером. Все остальные узлы ZooKeeper назначаются подчиненными. Чтение может выполняться из любого узла ZooKeeper, но все запросы на запись перенаправляются на ведущий узел. Например, в Edge добавляется новый Message Processor. Эта информация записывается в лидер ZooKeeper. Все подписчики затем реплицируют данные.

At Edge installation time, you designate each ZooKeeper node as a voter or as an observer. Затем все узлы ZooKeeper, имеющие право голоса, выбирают лидера. Единственное требование для выбора лидера – наличие кворума функционирующих узлов голосования ZooKeeper. Кворум означает, что более половины всех узлов ZooKeeper, участвующих в голосовании, во всех центрах обработки данных функционируют.

Если кворум узлов-избирателей недоступен, лидер не может быть выбран. В этом случае ZooKeeper не сможет обрабатывать запросы. Это означает, что вы не можете сделать запрос к серверу управления Edge, обработать запросы API или войти в пользовательский интерфейс Edge, пока кворум не будет восстановлен.

Например, в случае с одним центром обработки данных:

  • Вы установили три узла ZooKeeper.
  • Все узлы ZooKeeper являются голосующими
  • Кворум – два работающих узла голосования
  • Если доступен только один узел с правом голоса, ансамбль ZooKeeper не может функционировать.

В установке с двумя центрами обработки данных:

  • Вы установили три узла ZooKeeper на каждый центр обработки данных, то есть всего шесть узлов.
  • В центре обработки данных 1 есть три узла с правом голоса.
  • В центре обработки данных 2 есть два узла с правом голоса и один узел-наблюдатель.
  • Кворум основан на пяти голосующих узлах в обоих центрах обработки данных, поэтому для его достижения требуется три функционирующих голосующих узла.
  • Если доступно только два или менее узлов с правом голоса, то ансамбль ZooKeeper не может функционировать.

Что нужно учитывать при добавлении узлов в качестве голосующих или наблюдателей

Системные требования могут потребовать добавления дополнительных узлов ZooKeeper в установку Edge. В документации Добавление узлов ZooKeeper описывается, как добавить дополнительные узлы ZooKeeper в Edge. При добавлении узлов ZooKeeper необходимо учитывать тип добавляемых узлов: голосующий или наблюдатель.

Вам нужно убедиться, что у вас достаточно узлов-избирателей, чтобы в случае выхода из строя одного или нескольких узлов-избирателей ансамбль ZooKeeper все равно мог функционировать, то есть кворум узлов-избирателей по-прежнему был доступен. Добавляя узлы с правом голоса, вы увеличиваете размер кворума и, следовательно, можете допускать отключение большего количества узлов с правом голоса.

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

Вместо узлов с правом голоса можно добавить узлы-наблюдатели. Добавление узлов-наблюдателей повышает общую производительность чтения системы, не увеличивая накладные расходы на выбор лидера, поскольку узлы-наблюдатели не голосуют и не влияют на размер кворума. Поэтому, если узел-наблюдатель выйдет из строя, это не повлияет на способность ансамбля выбрать лидера. Однако потеря узлов-наблюдателей может привести к снижению производительности чтения ансамбля ZooKeeper, поскольку для обслуживания запросов данных доступно меньше узлов.

В одном центре обработки данных Apigee рекомендует иметь не более пяти голосующих узлов независимо от количества узлов-наблюдателей. В двух центрах обработки данных Apigee рекомендует иметь не более девяти голосующих (пять в одном центре обработки данных и четыре в другом). Затем вы можете добавить столько узлов-наблюдателей, сколько необходимо для ваших системных требований.

Как удалить узел ZooKeeper

Есть много причин, по которым вы можете захотеть удалить узел Zookeeper; например, узел был поврежден или он был добавлен в неправильную среду.

В этом разделе описывается, как удалить узел Zookeeper, когда он не работает и недоступен.

Чтобы удалить узел Zookeeper:

  1. Откройте файл конфигурации для автоматической установки и удалите IP-адрес узла ZooKeeper, который вы хотите удалить.
  2. Повторно выполните команду setup для ZooKeeper, чтобы перенастроить оставшиеся узлы ZooKeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper setup -f updated_config_file
  3. Перезапустите все узлы Zookeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
  4. Повторно настройте узел сервера управления:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
  5. Перенастройте все маршрутизаторы:
    /opt/apigee/apigee-service/bin/apigee-service edge-router setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  6. Перенастройте все процессоры сообщений:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  7. Повторно настройте все узлы Qpid:
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart
  8. Повторно настройте все узлы Postgres:
    /opt/apigee/apigee-service/bin/apigee-service edge-postgres-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-postgres-server restart

Обслуживание

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

Обслуживание нескольких центров обработки данных

При работе с несколькими центрами обработки данных помните, что ансамбль ZooKeeper не различает центры обработки данных. Сборки ZooKeeper рассматривают все узлы ZooKeeper во всех центрах обработки данных как один ансамбль.

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

Последствия для обслуживания

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

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

Процедура обслуживания

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

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

Чтобы определить тип узла ZooKeeper (лидер, голосующий или наблюдатель), выполните следующие действия:

  1. Если он не установлен на узле ZooKeeper, установите nc:
    sudo yum install nc
  2. Выполните на узле следующую команду nc, где 2181 – это порт ZooKeeper:
    echo stat | nc localhost 2181

    Вы должны увидеть выходные данные в форме:

    Zookeeper version: 3.4.5-1392090,
    built on 09/30/2012 17:52 GMT
    Clients: /a.b.c.d:xxxx[0](queued=0,recved=1,sent=0)
    Latency min/avg/max: 0/0/0
    Received: 1
    Sent: 0
    Connections: 1
    Outstanding: 0
    Zxid: 0xc00000044
    Mode: follower
    Node count: 653

    В строке Mode выходных данных для узлов вы должны увидеть observer, leader или follower (то есть голосующий узел, который не является лидером) в зависимости от конфигурации узла.

  3. Повторите шаги 1 и 2 на каждом узле ZooKeeper.

Сводка

Лучший способ выполнить обслуживание ансамбля ZooKeeper – выполнять его по одному узлу за раз. Помните:

  • Чтобы ансамбль ZooKeeper продолжал работать, во время обслуживания необходимо поддерживать кворум узлов голосования.
  • Отключение узла-наблюдателя не влияет на кворум или возможность выбора лидера.
  • Кворум рассчитывается по всем узлам ZooKeeper во всех центрах обработки данных.
  • Переходите к обслуживанию следующего сервера только после того, как предыдущий сервер будет запущен.
  • Чтобы проверить узел ZooKeeper, используйте команду nc.