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-кластера
Чтобы отключить кластер высокой доступности:
- Создайте резервные копии файлов конфигурации.
- Остановите резервные узлы сети.
- Удалите параметр HANodeName на активном основном сервере.
- Перезапустите основной сервер (он запустится в автономном режиме).
Обновление HA-кластера
Чтобы выполнить обновление HA-узлов до новой major-версии:
- Остановите все узлы.
- Создайте полную резервную копию базы данных.
- Если в базе данных используется репликация, убедитесь, что все узлы синхронизированы и не имеют проблем. Не выполняйте обновление, если репликация нарушена.
- Выберите один узел, который будет выполнять обновление базы данных, измените его конфигурацию на автономный режим, закомментировав
HANodeName, и выполните обновление. - Убедитесь, что обновление базы данных полностью завершено (System information должно показывать, что сервер Zabbix запущен).
- Перезапустите узел в HA-режиме.
- Обновите и запустите остальные узлы (переводить их в автономный режим не требуется, так как к этому моменту база данных уже обновлена).
При обновлении 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.