Об обслуживании 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.

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

  • 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 добавлен новый процессор сообщений. Эта информация записывается в лидер ZooKeeper. Все подписчики затем реплицируют данные.

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

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

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

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

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

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

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

В соответствии с системными требованиями вам может потребоваться добавить дополнительные узлы ZooKeeper в установку Edge. В документации Как добавить узлы ZooKeeper описано, как добавить в Edge дополнительные узлы ZooKeeper. При добавлении узлов 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.