Резервирование проксируемых серверов и групп#
Для повышения отказоустойчивости системы вы можете дополнительно резервировать проксируемые серверы, чтобы они включались в работу при выходе основных серверов из строя.
В Angie ADC доступно два механизма резервирования:
Запасные серверы (spare-серверы).
Запасные серверы (spare-серверы) включаются в работу при выходе из строя основных серверов в рамках одной группы. Это позволяет плавно подхватывать трафик без переключения на другую группу серверов. Запасные серверы можно использовать для поддержания производительности системы, например при выводе отдельных серверов на техническое обслуживание.
Резервные группы серверов (backup-группы).
Резервные группы (backup-группы) серверов включаются в работу при отказе всех серверов активной группы и поддерживают отказоустойчивость системы при выходе из строя групп серверов целиком. С помощью backup-групп можно реализовать многоуровневое резервирование большой инфраструктуры.
Можно использовать оба механизма одновременно для обеспечения максимальной надежности.
Примечание
Отказоустойчивость самого балансировщика нагрузки обеспечивается отдельно, например с помощью пары высокой доступности.
Запасные серверы (spare-серверы)#
При настройке апстрим-групп часть серверов в группе можно выделить как запасные,
назначив им параметр spare в блоке server.
Также можно объявить серверы запасными динамически с помощью API-интерфейса.
Пример:
http {
upstream u {
zone z 1m;
server 127.0.0.1:8081 max_fails=1 fail_timeout=2s weight=2;
server 127.0.0.1:8082 spare;
server 127.0.0.1:8083 spare;
}
По умолчанию запасные (spare) серверы находятся в режиме ожидания и имеют статус idle.
В случае выхода из строя одного или нескольких основных серверов группы
они включаются в балансировку и переходят в статус up.
При восстановлении основных серверов замещающие spare-серверы
снова переводятся в режим ожидания.
При этом поддерживаются sticky-сессии: запасные серверы, выведенные из активного пула,
будут по-прежнему использоваться для таких сессий.
Если на запасном сервере настроены активные проверки работоспособности,
то сервер не будет включаться в работу, пока проверки не будут пройдены.
Неработоспособные запасные серверы будут иметь такие же статусы, как неработоспособные основные.
Решение о вводе spare-сервера в балансировку определяется разницей
между совокупным весом всех серверов, используемых в группе в качестве основных main_weight,
и совокупным весом всех активных серверов active_weight.
Если общий вес активных серверов становится меньше веса всех основных серверов
— spare-серверы вводятся в работу,
если больше — spare-серверы выводятся в режим ожидания.
При этом всегда используется минимально необходимое количество spare-серверов.
При введении дополнительного spare-сервера будет выбран сервер с максимальным весом,
а при выведении из строя лишних spare-серверов
сначала будет выбран сервер с минимальным весом.
В режиме отладки
через REST API доступны значения счетчиков main_weight и active_weight.
Для upstream-сервера отображается поле spare
со значением idle (сервер не используется) или running (сервер активен).
Поле spare_num отображает количество серверов, считающихся запасными.
Резервные группы серверов (backup-группы)#
Резервные группы серверов (backup-группы), в отличие от spare-серверов, представляют собой отдельные группы серверов, выделенные только для резервирования. Upstream-сервер может входить только в одну резервную группу.
Если балансировщик не может найти ни один рабочий сервер в основной группе, то он переходит к серверам backup-группы. Можно добавить одну или несколько backup-групп серверов с разным уровнем резервирования. Тогда балансировщик будет сначала переходить к backup-группе с наименьшим уровнем. Если групп много, можно указать для них произвольные уровни, например для удобства сортировки.
Уровень резервирования backup-группы можно задать с помощью директивы backup=n:
backup=1(или простоbackup) — группа резервных серверов первого уровня (в API отображается какtrue);backup=2— группа резервных серверов второго уровня (в API отображается как соответствующее число);backup=3— группа резервных серверов третьего уровня.
Пример:
upstream my_backend {
server primary1.example.com;
server primary2.example.com;
server backend.example.com service=http resolve backup=prio;
server backup1a.example.com backup;
server backup1b.example.com backup;
server backup2a.example.com backup=2;
server backup2b.example.com backup=2;
backup_switch permanent=2m;
}
Если upstream-сервер настраивался с помощью SRV-записи,
то уровень backup-группы можно определить динамически через поле приоритета (priority).
Для этого используется:
Абсолютное значение приоритета (директива
backup=prio).В этом случае значение приоритета
priority=nиз SRV-записи будет использовано в качестве уровня резервной группыbackup=n.Относительное значение приоритета
priority=nиз SRV-записи.В этом случае директива
backup=nзадает базовый уровень отсчета (напримерbackup=3), а относительные уровни резервирования отсчитываются от этого уровня. Сервер с наименьшим значениемpriorityполучит уровеньbackup=3, следующий за ним —backup=4, и так далее. Если уровень отсчетаbackup=nне задан, отсчет будет идти от нуля: сервер с наименьшим значениемpriorityполучитbackup=0и станет основным, за ним —backup=1, резервный, и так далее.
По умолчанию балансировщик всегда начинает поиск подходящего сервера с основной группы,
даже если в данный момент активна резервная. Чтобы этого избежать,
можно использовать директиву backup_switch permanent, задав для нее значение, например permanent=2m.
В этом случае балансировщик нагрузки будет пытаться вернуться на основную группу не чаще,
чем раз в две минуты, что позволит избежать избыточных переключений группы.
Если указать параметр permanent без значения, то выбранная backup-группа
будет сохраняться в качестве активной даже после того,
как серверы из основной группы снова станут доступными.
В случае отказа текущей backup-группы балансировщик будет переключаться
на следующую по уровню backup-группу, и, только дойдя до максимального уровня,
вернется на основную группу.