Тестирование отказоустойчивости в инфраструктуре Yandex Cloud на основе Yandex Network Load Balancer
Данное руководство описывает практическую часть рекомендаций по тестированию отказоустойчивости, которые содержатся в статье Рекомендации по отказоустойчивости в Yandex Cloud, применительно к инфраструктуре Yandex Cloud, реализованной на основе сетевых балансировщиков нагрузки Yandex Network Load Balancer. Предполагается, что принципы построения тестируемой инфраструктуры не противоречат принципам, изложенным в статье.
Цели тестирования
В данном руководстве описывается методология проведения учений по отказу одной зоны доступности в облаке, которая позволит:
- Исследовать поведение системы во время отказа.
- Оценить способность системы переживать отключение одной зоны доступности.
- Выявить неявные зависимости и уязвимости.
- Собрать информацию о симптомах отказа.
- Проверить способность системы к быстрому восстановлению.
Исследование отказа ограничено случаем полного отказа зоны доступности. Частичные отказы выходят за рамки данного руководства из-за их многообразия.
Подготовка к тестированию
Среда тестирования
-
Соответствие продуктовой среде:
Важно
Не рекомендуется проводить тестирование сразу в рабочей (продуктовой) среде, сначала следует провести учения в тестовой среде.
- Тестовую среду рекомендуется сделать максимально приближенной по конфигурации к продуктовой среде.
- Рекомендуется, чтобы нагрузка на тестовую среду имитировала нагрузку на продуктовую. Для имитации нагрузки вы можете использовать инструменты нагрузочного тестирования, например, Yandex Load Testing.
- Для автоматизации создания тестовых сред рекомендуется применять подход Infrastructure as Code.
-
Для оптимизации затрат при развертывании ресурсов в тестовой среде рекомендуется:
- Использовать NRD-диски вместо SSD-IO дисков.
- Использовать прерываемые виртуальные машины.
- Динамически создавать ресурсы только на время тестирования.
- Автоматически освобождать ресурсы после завершения тестов.
- Использовать компоненты без SLA для снижения затрат.
Рекомендации к проведению тестирования
- Наличие системы мониторинга, которая позволит оценить результаты тестирования.
- Сохранение результатов тестирования для ретроспективного анализа.
- Рекомендуется проводить тестирование на регулярной основе.
- Использовать при проведении тестирования инструмент CLI Yandex Cloud версии
0.154.0и выше.
Инструменты тестирования
В данном руководстве рассматривается тестирование отказоустойчивости с помощью инструментов отключения балансировки нагрузки в отдельной зоне доступности для Network Load Balancer.
В качестве дополнительного инструмента обеспечения изоляции отключаемой зоны рекомендуется использовать группы безопасности VPC.
Важно: при использовании групп безопасности VPC следует учитывать следующие особенности их работы:
- В группах безопасности поддерживаются только разрешающие правила, поэтому для блокировки трафика необходимо предусмотреть отдельный набор правил, разрешающих трафик между зонами; для организации блокировки эти правила потребуется удалить.
- Удаление разрешающих правил из группы безопасности блокирует установку новых сетевых соединений, но не разрывает уже установленные соединения.
Методика проведения тестирования
Подготовка
-
Если требуется, подготовьте окружение к проведению тестирования.
-
Выберите зону доступности, которая будет отключаться (из которой будет уводиться трафик). Например,
ru-central1-b. -
Определите продолжительность теста. Отключение зоны балансировщика может быть как постоянным, так и на заданный период времени (от 1 минуты до 72 часов). Например, 30 минут.
-
Получите список балансировщиков, которые будут принимать участие в тестировании:
yc load-balancer nlb list
Запуск тестирования
Отключите доставку трафика в выбранную зону доступности для каждого балансировщика из списка. Для отключения балансировки трафика в выбранной зоне доступности используется команда disable-zones.
Чтобы отключить балансировку трафика в зоне доступности ru-central1-b для определенного балансировщика нагрузки на 30 минут, выполните команду:
yc load-balancer nlb disable-zones <имя_или_идентификатор_балансировщика> \
--zones=ru-central1-b \
--duration 30m
Примерный результат выполнения команды (обратите внимание на блок disable_zone_statuses):
id: enpmq********
...
disable_zone_statuses:
- zone_id: ru-central1-b
disabled_until: "2025-07-17T15:30:18.176751322Z"
Команда поддерживает одновременное отключение сразу нескольких зон доступности, которые можно перечислить через запятую.
При повторном выполнении команды период времени блокировки будет обновлен — 30 минут от текущего момента.
Если в команде не указывать параметр --duration, то балансировка трафика в выбранных зонах доступности будет заблокирована без ограничения по времени.
Важно
Команда disable-zones отключает только балансировку трафика в выбранную зону доступности и только для указанного балансировщика нагрузки. Эта команда не влияет на сетевой трафик внутри зоны и между зонами доступности в любых других сервисах облака. При необходимости такой широкой блокировки трафика можно использовать группы безопасности VPC на соответствующих сетевых интерфейсах облачных ресурсов.
Оценка состояния
-
Чтобы получить информацию о состоянии блокировки ресурсов за отдельным балансировщиком нагрузки, выполните команду:
yc load-balancer nlb get <имя_или_идентификатор_балансировщика>Примерный результат выполнения команды:
id: enpmq******** folder_id: b1g******** created_at: "2025-07-17T13:42:24Z" name: ... region_id: ru-central1 status: ACTIVE type: EXTERNAL listeners: - name: ... ... attached_target_groups: - target_group_id: enpn******** health_checks: - name: ... ... disable_zone_statuses: - zone_id: ru-central1-b disabled_until: "2025-07-17T15:30:18.176751322Z" -
Убедитесь, что трафик перестал поступать в выбранную зону. Это можно сделать в сервисе мониторинга, выведя на график суммарный трафик на интерфейсах виртуальных машин с группировкой по зонам доступности.
На текущий момент нет возможности получить одним простым запросом к сервису мониторинга график распределения трафика по зонам. Чтобы решить эту задачу:
- Создайте график в сервисе мониторинга.
- Составьте списки идентификаторов виртуальных машин для зоны
ru-central1-a, например, с помощью командыРезультатом выполнения команды будет однострочный список идентификаторов виртуальных машин, разделенныхyc compute instance list --jq '[.[] | select(.zone_id=="ru-central1-a") | .id ] | join("|")'`|. Пример:fhm**********uv5|fhm**********aab|fhm**********ui1|.... - В графике мониторинга добавьте запрос
alias(series_sum("network_received_packets"{folderId = "b1g**********", service = "compute", resource_type = "vm", resource_id = "<полученный_на_предыдущем_шаге_список_идентификаторов_виртуальных_машин_с_разделителем_|>"}), "ru-central1-a")` - Повторите шаги 2 и 3 для зон
ru-central1-bиru-central1-d. - Выполните запросы.
Завершение тестирования
-
Чтобы вернуть отключенную ранее зону доступности обратно в балансировку трафика, выполните команду
enable-zones:yc load-balancer nlb enable-zones <имя_или_идентификатор_балансировщика> \ --zones=ru-central1-b -
Убедитесь, что трафик начал поступать в выбранную зону доступности.
Важно помнить, что существует ограничение по времени для операции повторного выключения балансировки после включения обратно. Повторное отключение после обратного включения можно выполнить не ранее чем через 2 минуты.
Заключение
Рекомендуется проводить тестирование отказоустойчивости на регулярной основе, документировать результаты и постоянно улучшать процессы на основе полученного опыта.