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

Edge для частного облака версии 4.17.09

Ансамбли 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, а не к узлу voter. Узел наблюдателя не участвует в выборах лидера.

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

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

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

Для Data Center

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, обрабатывать запросы Management API или входить в интерфейс Edge, пока кворум не будет восстановлен.

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

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

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

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

Добавление узлов в качестве голосующих или наблюдателей

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Здесь 2181 – это порт ZooKeeper. Вы должны увидеть результат в следующем формате:
    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 (то есть голосующий, который не является лидером) в зависимости от конфигурации узла.

    Примечание. В отдельной установке Edge с одним узлом ZooKeeper для параметра Mode задано значение standalone.
  3. Повторите шаги 1 и 2 на каждом узле ZooKeeper.

Сводка

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

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