Ансамбли 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
- Измените файл конфигурации в тихом режиме и удалите IP-адрес узла Zookeeper, который вы хотите удалить.
- Повторно выполните команду
setupдля Zookeeper, чтобы перенастроить оставшиеся узлы ZooKeeper:/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper setup -f updated_config_file
- Перезапустите все узлы Zookeeper:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
- Перенастройте узел сервера управления:
/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 - Заново настройте все маршрутизаторы:
/opt/apigee/apigee-service/bin/apigee-service edge-router setup -f updated_config_file
/opt/apigee/apigee-service/bin/apigee-service edge-router restart - Заново настройте все процессоры сообщений:
/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 - Перенастройте все узлы 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 - Перенастройте все узлы 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 (лидер, голосующий или наблюдатель) в рамках обслуживания, выполните следующие действия:
- Если на узле ZooKeeper не установлено приложение
nc, сделайте следующее:sudo yum install nc
- Выполните на узле следующую команду
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(если узел является голосующим, но не лидером) в зависимости от конфигурации узла. - Повторите шаги 1 и 2 на каждом узле ZooKeeper.
Сводка
Лучший способ выполнить обслуживание ансамбля ZooKeeper – делать это по одному узлу за раз. Помните:
- Во время обслуживания необходимо поддерживать кворум узлов для голосования, чтобы обеспечить работоспособность ансамбля ZooKeeper.
- Удаление узла наблюдателя не влияет на кворум или возможность выбрать лидера.
- Кворум рассчитывается по всем узлам ZooKeeper во всех центрах обработки данных.
- Переходите к следующему серверу только после того, как предыдущий будет готов к работе.
- Чтобы проверить узел ZooKeeper, используйте команду
nc.