Тестирование отказоустойчивости в инфраструктуре Yandex Cloud на основе Yandex Application Load Balancer
Данное руководство описывает практическую часть рекомендаций по тестированию отказоустойчивости, которые содержатся в статье Рекомендации по отказоустойчивости в Yandex Cloud, применительно к инфраструктуре Yandex Cloud, реализованной на основе L7-балансировщиков нагрузки Application Load Balancer. Предполагается, что принципы построения тестируемой инфраструктуры не противоречат принципам, изложенным в статье.
Цели тестирования
В данном руководстве описывается методология проведения учений по отказу одной зоны доступности в облаке, которая позволит:
- Исследовать поведение системы во время отказа.
- Оценить способность системы переживать отключение одной зоны доступности.
- Выявить неявные зависимости и уязвимости.
- Собрать информацию о симптомах отказа.
- Проверить способность системы к быстрому восстановлению.
Исследование отказа ограничено случаем полного отказа зоны доступности. Частичные отказы выходят за рамки данного руководства из-за их многообразия.
Подготовка к тестированию
Среда тестирования
-
Соответствие продуктовой среде:
Важно
Не рекомендуется проводить тестирование сразу в рабочей (продуктовой) среде, сначала следует провести учения в тестовой среде.
- Тестовую среду рекомендуется сделать максимально приближенной по конфигурации к продуктовой среде.
- Рекомендуется, чтобы нагрузка на тестовую среду имитировала нагрузку на продуктовую. Для имитации нагрузки вы можете использовать инструменты нагрузочного тестирования, например, Yandex Load Testing.
- Для автоматизации создания тестовых сред рекомендуется применять подход Infrastructure as Code.
-
Для оптимизации затрат при развертывании ресурсов в тестовой среде рекомендуется:
- Использовать NRD-диски вместо SSD-IO дисков.
- Использовать прерываемые виртуальные машины.
- Динамически создавать ресурсы только на время тестирования.
- Автоматически освобождать ресурсы после завершения тестов.
- Использовать компоненты без SLA для снижения затрат.
Рекомендации к проведению тестирования
- Наличие системы мониторинга, которая позволит оценить результаты тестирования.
- Сохранение результатов тестирования для ретроспективного анализа.
- Рекомендуется проводить тестирование на регулярной основе.
- Использовать при проведении тестирования инструмент CLI Yandex Cloud версии
0.154.0и выше.
Инструменты тестирования
В данном руководстве рассматривается тестирование отказоустойчивости с помощью инструментов отключения балансировки нагрузки в отдельной зоне доступности для Application Load Balancer.
В качестве дополнительного инструмента обеспечения изоляции отключаемой зоны рекомендуется использовать группы безопасности VPC.
Важно: при использовании групп безопасности VPC следует учитывать следующие особенности их работы:
- В группах безопасности поддерживаются только разрешающие правила, поэтому для блокировки трафика необходимо предусмотреть отдельный набор правил, разрешающих трафик между зонами; для организации блокировки эти правила потребуется удалить.
- Удаление разрешающих правил из группы безопасности блокирует установку новых сетевых соединений, но не разрывает уже установленные соединения.
Методика проведения тестирования
Подготовка
-
Если требуется, подготовьте окружение к проведению тестирования.
-
Выберите зону доступности, которая будет отключаться (из которой будет уводиться трафик). Например,
kz1-b. -
Определите продолжительность теста. Отключение зоны балансировщика может быть как постоянным, так и на заданный период времени (от 1 минуты до 72 часов). Например, 30 минут.
-
Получите список балансировщиков, которые будут принимать участие в тестировании:
yc alb load-balancer list
Запуск тестирования
Отключите доставку трафика в выбранную зону доступности для каждого балансировщика из списка. Для отключения балансировки трафика в выбранной зоне доступности используется команда disable-zones.
Чтобы отключить балансировку трафика в зоне доступности kz1-b для определенного балансировщика нагрузки на 30 минут, выполните команду:
yc alb load-balancer disable-zones <имя_или_идентификатор_балансировщика> \
--zones=kz1-b \
--duration 30m
Примерный результат выполнения команды (обратите внимание на блок allocation_policy.locations):
...
allocation_policy:
locations:
- zone_id: kz1-a
subnet_id: e9bnvnn56fs4********
- zone_id: kz1-b
subnet_id: e2lqsms4cdl3********
zonal_shift_active: true
zonal_traffic_disabled: true
- zone_id: kz1-d
subnet_id: fl8dmq91iruu********
...
Команда поддерживает одновременное отключение сразу нескольких зон доступности, которые можно перечислить через запятую.
При повторном выполнении команды период времени блокировки будет обновлен — 30 минут от текущего момента.
Если в команде не указывать параметр --duration, то балансировка трафика в выбранных зонах доступности будет заблокирована без ограничения по времени.
Важно
Команда disable-zones отключает только балансировку трафика в выбранную зону доступности и только для указанного балансировщика нагрузки. Эта команда не влияет на сетевой трафик внутри зоны и между зонами доступности в любых других сервисах облака. При необходимости такой широкой блокировки трафика можно использовать группы безопасности VPC на соответствующих сетевых интерфейсах облачных ресурсов.
Оценка состояния
-
Чтобы получить информацию о состоянии блокировки ресурсов за отдельным балансировщиком нагрузки:
Консоль управления-
В консоли управления
выберите каталог, в котором находится балансировщик. -
Перейдите в сервис Application Load Balancer и выберите нужный балансировщик.
-
В блоке Размещение напротив зоны доступности посмотрите ее статус.
Если была задана длительность блокировки, рядом с зоной будет указано время, до которого она заблокирована.
-
-
Убедитесь, что трафик перестал поступать в выбранную зону. Это можно сделать в сервисе мониторинга, выведя на график суммарный трафик на интерфейсах виртуальных машин с группировкой по зонам доступности.
На текущий момент нет возможности получить одним простым запросом к сервису мониторинга график распределения трафика по зонам. Чтобы решить эту задачу:
- Создайте график в сервисе мониторинга.
- Составьте списки идентификаторов виртуальных машин для зоны
kz1-a, например, с помощью командыРезультатом выполнения команды будет однострочный список идентификаторов виртуальных машин, разделенныхyc compute instance list --jq '[.[] | select(.zone_id=="kz1-a") | .id ] | join("|")'`|. Пример:fhm**********uv5|fhm**********aab|fhm**********ui1|.... - В графике мониторинга добавьте запрос
alias(series_sum("network_received_packets"{folderId = "b1g**********", service = "compute", resource_type = "vm", resource_id = "<полученный_на_предыдущем_шаге_список_идентификаторов_виртуальных_машин_с_разделителем_|>"}), "kz1-a")` - Повторите шаги 2 и 3 для зон
kz1-bиkz1-d. - Выполните запросы.
Завершение тестирования
-
Чтобы вернуть отключенную ранее зону доступности обратно в балансировку трафика, выполните команду
enable-zones:yc alb load-balancer enable-zones <имя_или_идентификатор_балансировщика> \ --zones=kz1-b -
Убедитесь, что трафик начал поступать в выбранную зону доступности.
Важно помнить, что существует ограничение по времени для операции повторного выключения балансировки после включения обратно. Повторное отключение после обратного включения можно выполнить не ранее чем через 2 минуты.
Заключение
Рекомендуется проводить тестирование отказоустойчивости на регулярной основе, документировать результаты и постоянно улучшать процессы на основе полученного опыта.