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

Обзор

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

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

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

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

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

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

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

Для запуска Zabbix server как узла кластера в конфигурации сервера требуются два параметра:

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

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

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

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

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

zabbix_server -R ha_status

Эта команда во время работы запишет текущий статус HA-кластера в лог Zabbix server (и в stdout):

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

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

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

Конфигурация прокси

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

Для пассивного прокси имена узлов должны быть перечислены в параметре Server parameter прокси и разделены запятой.

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

Для активного прокси имена узлов должны быть перечислены в параметре Server parameter прокси и разделены точкой с запятой.

Server=zabbix-node-01;zabbix-node-02
Конфигурация агента

Узлы кластера HA (серверы) должны быть перечислены в конфигурации Zabbix agent или Zabbix agent 2.

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

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

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

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

Переключение на резервный узел

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

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

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

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

zabbix_server -R ha_set_failover_delay=5m

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

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

  • 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).

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

  • В Reports > System information.
  • В виджете панели System information.
  • С помощью параметра ha_status управления во время выполнения на сервере (см. выше).

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

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

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

  1. Создайте резервные копии файлов конфигурации.
  2. Остановите резервные узлы сети.
  3. Удалите параметр HANodeName на активном основном сервере.
  4. Перезапустите основной сервер (он запустится в автономном режиме).

Обновление HA-кластера

Чтобы выполнить обновление HA-узлов до новой major-версии:

  1. Остановите все узлы.
  2. Создайте полную резервную копию базы данных.
  3. Если в базе данных используется репликация, убедитесь, что все узлы синхронизированы и не имеют проблем. Не выполняйте обновление, если репликация нарушена.
  4. Выберите один узел, который будет выполнять обновление базы данных, измените его конфигурацию на автономный режим, закомментировав HANodeName, и выполните обновление.
  5. Убедитесь, что обновление базы данных полностью завершено (System information должно показывать, что сервер Zabbix запущен).
  6. Перезапустите узел в HA-режиме.
  7. Обновите и запустите остальные узлы (переводить их в автономный режим не требуется, так как к этому моменту база данных уже обновлена).

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

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

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

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

  • Настраивается отдельно.
  • Использует одну и ту же базу данных.
  • Может иметь несколько режимов: active, standby, unavailable, stopped.

Одновременно активным может быть только один узел. Узел в режиме standby выполняет только один процесс — HA manager. Узел standby не выполняет сбор данных, обработку или другие обычные действия сервера; он не прослушивает порты; у него минимальное число подключений к базе данных.

И активные, и standby-узлы обновляют время своего последнего доступа каждые 5 секунд. Каждый узел standby отслеживает время последнего доступа активного узла. Если время последнего доступа активного узла превышает failover delay секунд, узел standby переключается в активный режим и назначает ранее активному узлу статус unavailable.

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

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