1. Кластер высокой доступности

Обзор

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

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

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

Переключение на Zabbix HA ни к чему не обязывает. Вы можете переключиться обратно на автономный режим в любой момент.

Смотрите также: Детали реализации

Включение высокой доступности

Запуск сервера Zabbix как узла кластера

Для запуска сервера Zabbix как узла кластера в configuration сервера необходимо указать два параметра:

  • Параметр HANodeName должен быть указан для каждого сервера Zabbix, который будет узлом HA-кластера.

Это уникальный идентификатор узла (например, zabbix-node-01), по которому сервер будет использоваться в конфигурациях агента и прокси. Если не указать HANodeName, сервер будет запущен в автономном режиме.

  • Параметр NodeAddress должен быть указан для каждого узла.

Параметр NodeAddress (address:port) будет использоваться веб-интерфейсом Zabbix для подключения к активному узлу сервера. NodeAddress должен соответствовать IP-адресу или имени FQDN соответствующего сервера Zabbix.

После внесения изменений в файлы конфигурации перезапустите все серверы Zabbix. Теперь они будут запущены как узлы кластера. Новый статус серверов можно увидеть в ReportsSystem information а также с помощью команды:

zabbix_server -R ha_status

Эта runtime-команда запишет текущий статус HA-кластера в журнал сервера Zabbix (и в stdout):

Подготовка веб-интерфейса

Убедитесь, что адрес:порт сервера Zabbix не указан в конфигурации веб-интерфейса (находится в conf/zabbix.conf.php в каталоге файлов веб-интерфейса).

Веб-интерфейс Zabbix автоматически определит активный узел, считывая настройки из таблицы nodes в базе данных Zabbix. Адрес узла активного узла будет использоваться как адрес сервера Zabbix.

Настройка прокси

Ноды (серверы) HA кластера должны быть перечислены в конфигурации как пассивных, так и активных Zabbix прокси.

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

Server=zabbix-node-01,zabbix-node-02

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

ServerActive=zabbix-node-01;zabbix-node-02
Настройка агента

Ноды (серверы) HA кластера необходимо перечислить в конфигурации Zabbix агента или Zabbix агента 2.

Чтобы активировать пассивные проверки, имена нод необходимо перечислить в параметре Server, разделяя имена нод запятой.

Server=zabbix-node-01,zabbix-node-02

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

ServerActive=zabbix-node-01;zabbix-node-02

Автоматическое переключение на резервную ноду

Zabbix автоматически переключится на другую ноду, если активная нода остановится. Для автоматического переключения необходимо иметь по крайней мере одну ноду в состоянии резерва.

Как быстро произойдет автоматическое переключение? Все ноды обновляют своё время последнего доступа (и состояния, если оно меняется) каждые 5 секунд. Таким образом:

  • Если активная нода выключается и успевает сообщить своё состояние как «остановлена», другая нода подхватит нагрузку в течение 5 секунд.

  • Если активная нода выключается / становится недоступной без возможности обновить своё состояние, резервные ноды будут ожидать задержку автоматического переключения + 5 секунд перед тем как перенять нагрузку на себя.

Задержка автоматического переключения настраивается, поддерживаемый диапазон от 10 секунд до 15 минут (по умолчанию одна минута). Чтобы изменить задержку автоматического переключения, вы можете выполнить:

zabbix_server -R ha_set_failover_delay=5m

Управление HA-кластером

Текущий статус HA-кластера можно контролировать с помощью специальных параметров runtime control:

  • ha_status — записать статус HA-кластера в журнал сервера Zabbix (и в stdout)
  • ha_remove_node=target — удалить узел HA, идентифицируемый по <target> — имени или ID узла (имя/ID можно получить из вывода команды ha_status), например:
zabbix_server -R ha_remove_node=zabbix-node-02

Обратите внимание, что активные/резервные узлы нельзя удалить.

  • ha_set_failover_delay=delay — установить задержку переключения HA (от 10 секунд до 15 минут; поддерживаются суффиксы времени, например 10s, 1m)

Статус узла можно отслеживать:

  • в ОтчётыСистемная информация
  • в виджете панели мониторинга Системная информация
  • с помощью параметра runtime control ha_status сервера (см. выше).

Внутренний элемент данных zabbix[cluster,discovery,nodes] можно использовать для обнаружения узлов, так как он возвращает JSON с информацией об узлах высокой доступности.

Отключение HA-кластера

Чтобы отключить кластер высокой доступности:

  • создайте резервные копии файлов конфигурации
  • остановите резервные узлы
  • удалите параметр HANodeName на активном основном сервере
  • перезапустите основной сервер (он запустится в автономном режиме)

Обновление кластера высокой доступности

Чтобы выполнить обновление основной (major) версии нод высокой доступности:

  • остановите все ноды;
  • создайте полную резервную копию базы данных;
  • если база данных использует репликацию, убедитесь, что все узлы синхронизированы и не имеют проблем. Не обновляйтесь, если репликация нарушена.
  • выберите один узел, который будет выполнять обновление базы данных, измените его конфигурацию на автономный режим, закомментировав HANodeName и обновите его;
  • убедитесь, что обновление базы данных полностью завершено (Информация о системе должна отображать, что сервер Zabbix работает);
  • перезапустите ноду в режиме HA;
  • обновите и запустите остальные ноды (переводить их в автономный режим не требуется, так как база данных к этому моменту уже обновлена).

При обновлении минорной версии достаточно обновить первую ноду, убедиться, что она обновлена и работает, а затем начать обновление на следующей ноде.

Детали реализации

Кластер высокой доступности (HA) является опциональным решением и поддерживается для Zabbix сервера. Собственное решение HA разработано с учётом более простого использования, это решение будет работать между разными площадками и не потребует никаких особых требований к базам данных, которые распознаются Zabbix. Пользователи могут свободно выбирать использовать собственное решение Zabbix HA или же стороннее решение HA, в зависимости от того, какое решение наилучшим образом подходит под требования высокой доступности в их среде.

Решение состоит из нескольких экземпляров zabbix_server или нод. Каждая нода:

  • настраивается отдельно
  • использует ту же базу данных
  • имеет несколько режимов: активная, резервная, недоступная, остановленная

Только одна нода может быть активной (рабочей) в один момент времени. На резервной ноде работает только один процесс — HA manager. Резервная нода не выполняет сбор данных, обработку или какие-либо другие обычные действия сервера; она не слушает порты; имеет минимальное количество подключений к базе данных.

Как активные, так и резервные ноды выполняют обновление времени своего последнего доступа каждые 5 секунд. Каждая резервная нода наблюдает за временем последнего доступа активной ноды. Если время последнего доступа активной ноды превышает «задержку при аварийном переключении» в секундах, резервная нода переключает себя в в режим активной ноды и назначает состояние «недоступна» ранее активной ноде.

Активная нода отслеживает своё собственное подключение к базе данных — если подключение потеряно более чем на задержка при аварийном переключении-5 секунд, нода должна остановить всю обработку и переключиться в резервный режим. Активная нода также отслеживает состояния резервных нод — если время последнего доступа резервной ноды превышает «задержку при аварийном переключении» в секундах, резервной ноде присваивается состояние «недоступная».

Ноды разрабытывались таким образом, чтобы быть совместимыми между минорными версиями Zabbix.