Ансамбли ZooKeeper спроектированы таким образом, чтобы оставаться функциональными без потери данных, несмотря на потерю одного или нескольких узлов ZooKeeper. Эту устойчивость можно эффективно использовать для обслуживания узлов ZooKeeper без простоя системы.
О ZooKeeper и Edge
В Edge узлы ZooKeeper содержат данные конфигурации о местоположении и конфигурации различных компонентов Edge и уведомляют различные компоненты об изменениях конфигурации. Все поддерживаемые топологии Edge для производственной системы используют как минимум три узла ZooKeeper.
Используйте свойства ZK_HOSTS
и ZK_CLIENT_HOSTS
в файле конфигурации Edge, чтобы указать узлы ZooKeeper. Например:
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 обозначены как узлы избирателей . Это означает, что все узлы участвуют в выборе лидера 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 Management Server, обработать запросы Management API или войти в пользовательский интерфейс Edge, пока кворум не будет восстановлен.
Например, при установке одного центра обработки данных:
- Вы установили три узла ZooKeeper.
- Все узлы ZooKeeper являются избирателями.
- Кворум — это два функционирующих узла избирателей.
- Если доступен только один узел избирателя, ансамбль ZooKeeper не может функционировать.
В установке с двумя дата-центрами:
- Вы установили по три узла ZooKeeper на каждый центр обработки данных, всего шесть узлов.
- Центр обработки данных 1 имеет три узла для голосования.
- Центр обработки данных 2 имеет два узла избирателей и один узел наблюдателя.
- Кворум основан на пяти избирателях в обоих центрах обработки данных и, следовательно, представляет собой три функционирующих узла избирателей.
- Если доступны только два или меньше узлов избирателей, ансамбль ZooKeeper не может функционировать.
Рекомендации по добавлению узлов в качестве избирателей или наблюдателей
Ваши системные требования могут потребовать добавления дополнительных узлов ZooKeeper в вашу установку Edge. В документации по добавлению узлов ZooKeeper описано, как добавить дополнительные узлы ZooKeeper в Edge. При добавлении узлов 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 во всех центрах обработки данных.
- Продолжайте обслуживание следующего сервера после того, как предыдущий сервер заработает.
- Используйте команду
nc
, чтобы проверить узел ZooKeeper.