Руководство по тестированию отказоустойчивости в Yandex Cloud
Данное руководство описывает практическую часть рекомендаций по тестированию отказоустойчивости, которые содержатся в статье Рекомендации по отказоустойчивости в Yandex Cloud. Предполагается, что принципы построения тестируемой инфраструктуры не противоречат принципам, изложенным в статье.
Цели тестирования
В данном руководстве описывается методология проведения учений по отказу одной зоны доступности в облаке, которая позволит:
- Исследовать поведение системы во время отказа.
- Оценить способность системы переживать отключение одной зоны доступности.
- Выявить неявные зависимости и уязвимости.
- Собрать информацию о симптомах отказа.
- Проверить способность системы к быстрому восстановлению.
Исследование отказа ограничено случаем полного отказа зоны доступности. Частичные отказы выходят за рамки данного руководства из-за их многообразия.
Подготовка к тестированию
Среда тестирования
-
Соответствие продуктовой среде:
Важно
Не рекомендуется проводить тестирование сразу в рабочей (продуктовой) среде, сначала следует провести учения в тестовой среде.
- Тестовая среда должна быть максимально приближена по конфигурации к продуктовой среде.
- Нагрузка на тестовую среду должна имитировать нагрузку на продуктовую. Для имитации нагрузки используйте инструменты нагрузочного тестирования, например, Yandex Load Testing.
- Для автоматизации создания тестовых сред рекомендуется применять подход Infrastructure as Code.
-
Для оптимизации затрат при развертывании ресурсов в тестовой среде рекомендуется:
- Использовать NRD-диски вместо SSD-IO дисков.
- Использовать прерываемые виртуальные машины.
- Динамически создавать ресурсы только на время тестирования.
- Автоматически освобождать ресурсы после завершения тестов.
- Использовать компоненты без SLA для снижения затрат.
Требования к проведению тестирования
- Наличие системы мониторинга, которая позволит оценить результаты тестирования.
- Сохранение результатов тестирования для ретроспективного анализа.
- Тестирования должны проводиться на регулярной основе.
- Использовать при проведении тестирования инструмент CLI Yandex Cloud (yc) версии
0.154.0и выше.
Инструменты тестирования
В данном документе рассматривается тестирование отказоустойчивости с помощью инструментов отключения балансировки нагрузки в отдельной зоне доступности для Network Load Balancer или для Application Load Balancer.
В качестве дополнительного инструмента обеспечения изоляции отключаемой зоны рекомендуется использовать группы безопасности VPC.
Важно: при использовании групп безопасности VPC следует учитывать следующие особенности их работы:
- В группах безопасности поддерживаются только разрешающие правила, поэтому для блокировки трафика необходимо предусмотреть отдельный набор правил, разрешающих трафик между зонами; для организации блокировки эти правила нужно будет удалить.
- Удаление разрешающих правил из группы безопасности блокирует установку новых сетевых соединений, но не разрывает уже установленные соединения.
Методика проведения тестирования
Подготовка
-
Подготовьте, если требуется, окружение к проведению тестирования.
-
Выберите зону доступности, которая будет отключаться (из которой будет уводиться трафик). Например,
ru-central1-b. -
Определите продолжительность теста. Отключение зоны балансировщика может быть как постоянным, так и на заданный период времени (от 1 минуты до 72 часов). Например, 30 минут.
-
Получите список балансировщиков, которые будут принимать участие в тестировании:
yc load-balancer nlb list
Запуск тестирования
-
Отключите доставку трафика в выбранную зону доступности для каждого балансировщика из списка. Для отключения балансировки трафика в выбранной зоне доступности используется команда
disable-zones. Для отключения балансировки трафика в зоне доступностиru-central1-bот отдельного сетевого балансировщика нагрузки (NLB) на30 минутнеобходимо выполнить команду:yc load-balancer nlb disable-zones enpmq******** --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 на соответствующих сетевых интерфейсах облачных ресурсов.
Оценка состояния
-
Для получения информации о состоянии блокировки ресурсов за отдельным сетевым балансировщиком нагрузки (NLB) необходимо выполнить команду:
yc load-balancer nlb get enpmq********Результат выполнения команды должен быть примерно следующим:
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" -
Проконтролируйте, что трафик перестал поступать в выбранную зону. Это можно сделать в сервисе мониторинга, выведя на график суммарный трафик на интерфейсах виртуальных машин с группировкой по зонам доступности.
На текущий момент нет возможности получить одним простым запросом к сервису мониторинга график распределения трафика по зонам. Чтобы решить эту задачу:
- Создайте график в сервисе мониторинга.
- Составьте списки id виртуальных машин для зоны
ru-central1-a, например, с помощью командыРезультатом выполнения команды будет однострочный список id виртуальных машин, разделенных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 = "<Полученный на предыдущем шаге список id виртуальных машин, разделенных |>"}), "ru-central1-a")` - Повторите шаги 2 и 3 для зон
ru-central1-bиru-central1-d. - Выполните запросы.
Завершение тестирования
-
Выполните команду
enable-zonesдля возврата отключенной ранее зоны доступности обратно в балансировку трафика:yc load-balancer nlb enable-zones enpmq******** --zones=ru-central1-b -
Проконтролируйте, что трафик начал поступать в выбранную зону.
Важно помнить, что существует ограничение по времени для операции повторного выключения балансировки после включения обратно. Повторное отключение после обратного включения может быть выполнено не ранее чем через 2 минуты.
Application Load Balancer
Синтаксис и семантика команд отключения и обратного включения балансировки для выбранной зоны доступности в сервисе Application Load Balancer соответствуют командам для отключения и обратного включения балансировки для выбранной зоны доступности в сервисе Network Load Balancer.
Заключение
Рекомендуется проводить тестирование отказоустойчивости на регулярной основе, документировать результаты и постоянно улучшать процессы на основе полученного опыта.