[comment]: # ({486cd6dc-fb8f0d5a})
# 1. Кластер высокой доступности

[comment]: # ({/486cd6dc-fb8f0d5a})

[comment]: # ({f0a123dd-ea8bc3db})
### Обзор

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

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

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

![](../../../../assets/en/manual/config/zabbix_ha.png)

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

См. также: [Детали реализации](#implementation-details)

[comment]: # ({/f0a123dd-ea8bc3db})

[comment]: # ({c6caa06e-567d3671})
### Включение высокой доступности

[comment]: # ({/c6caa06e-567d3671})

[comment]: # ({5a71328e-23e81771})
##### Запуск Zabbix server как узла кластера

Для запуска Zabbix server как узла кластера в [конфигурации](/manual/appendix/config/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](/manual/web_interface/frontend_sections/reports/status_of_zabbix#high-availability-nodes)*, а также выполнив:

```
zabbix_server -R ha_status
```

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

![](../../../../assets/en/manual/config/runtime_ha_status.png){width="600"}

[comment]: # ({/5a71328e-23e81771})

[comment]: # ({3c7b24e0-3e9035e5})
##### Подготовка веб-интерфейса

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

![](../../../../assets/en/manual/config/frontend_conf_server_port.png){width="600"}

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

[comment]: # ({/3c7b24e0-3e9035e5})

[comment]: # ({892555c1-d47b6ef3})
##### Конфигурация прокси

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

Для пассивного прокси имена узлов должны быть перечислены в параметре Server [parameter](/manual/appendix/config/zabbix_proxy) прокси и разделены **запятой**.

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

Для активного прокси имена узлов должны быть перечислены в параметре Server [parameter](/manual/appendix/config/zabbix_proxy) прокси и разделены **точкой с запятой**.
```
Server=zabbix-node-01;zabbix-node-02
```

[comment]: # ({/892555c1-d47b6ef3})

[comment]: # ({c15c2c86-f2fc0e77})
##### Конфигурация агента

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

![](../../../../assets/en/manual/config/zabbix_ha_agent.png)

Чтобы включить пассивные проверки, имена узлов должны быть перечислены в параметре Server [parameter](/manual/appendix/config/zabbix_agentd), разделенные **запятой**.

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

Чтобы включить активные проверки, имена узлов должны быть перечислены в параметре ServerActive [parameter](/manual/appendix/config/zabbix_agentd).
Обратите внимание, что для активных проверок узлы должны быть отделены от любых других серверов запятой, а сами узлы должны быть разделены **точкой с запятой**, например:

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

[comment]: # ({/c15c2c86-f2fc0e77})

[comment]: # ({e3a57230-311341fc})
### Переключение на резервный узел

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

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

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

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

```
zabbix_server -R ha_set_failover_delay=5m
```

[comment]: # ({/e3a57230-311341fc})

[comment]: # ({7be5c016-593144b8})
### Управление HA-кластером

Текущим состоянием HA-кластера можно управлять с помощью специальных параметров [управления во время выполнения](/manual/concepts/server#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).

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

-   В *Reports* > *[System information](/manual/web_interface/frontend_sections/reports/status_of_zabbix#high-availability-nodes)*.
-   В виджете панели *System information*.
-   С помощью параметра `ha_status` управления во время выполнения на сервере (см. выше).

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

[comment]: # ({/7be5c016-593144b8})

[comment]: # ({7cfdcc75-82cd7e56})
### Отключение HA-кластера

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

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

[comment]: # ({/7cfdcc75-82cd7e56})

[comment]: # ({48f303fd-7d944a36})
### Обновление HA-кластера

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

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

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

[comment]: # ({/48f303fd-7d944a36})

[comment]: # ({de56f189-f4d3143a})
### Детали реализации

Кластер высокой доступности (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.

[comment]: # ({/de56f189-f4d3143a})
