Хаос-тестирование

Хаос-тестирование — это методология проверки устойчивости YDB путём намеренного внесения сбоев в работающий кластер. Цель — убедиться, что YDB корректно переживает реальные отказы: потери узлов, сетевые разделения, проблемы с дисками и другие нештатные ситуации. За внесение этого хаоса отвечает инструмент Nemesis.

Что проверяется

В рамках хаос-тестирования YDB проверяется поведение кластера при следующих видах отказов:

Сетевые сбои

  • Изоляция узлов от сети (блокировка входящего и исходящего трафика)
  • Сдвиг системного времени на узлах (time skew)

Отказы узлов

  • Принудительное завершение процессов узлов кластера
  • Остановка и повторный запуск узлов
  • Приостановка (suspend) процессов узлов

Отказы таблеток

Таблетки — это основные вычислительные единицы YDB. Проверяется устойчивость при принудительном завершении различных типов таблеток:

  • Coordinator — координатор распределённых транзакций
  • Hive — менеджер размещения таблеток
  • BSController — контроллер распределённого хранилища
  • SchemeShard — менеджер схемы данных
  • DataShard — таблетки хранения данных
  • Mediator — медиатор транзакций
  • PersQueue — таблетки очередей сообщений
  • И другие системные таблетки

Также проверяется перебалансировка таблеток между узлами через Hive.

Дисковые сбои

  • Безопасное выведение диска из строя на узле
  • Очистка дисков на узлах

Сценарии для мультидатацентровых кластеров

  • Остановка всех узлов в одном датацентре
  • Сетевая изоляция датацентра

Сценарии для кластеров с bridge-режимом

  • Остановка всех узлов в одном pile
  • Сетевая изоляция pile

Интеграция с нагрузочным тестированием

Хаос-тестирование обычно запускается совместно с нагрузочными тестами из директории ydb/tests/stress. Такое сочетание позволяет тестировать кластер в условиях нагрузки при одновременном возникновении различных сбоев.

Как работает проверка

Во время внесения сбоев система по запросу проверяет два свойства:

  • Живучесть (liveness) — кластер остаётся доступным и продолжает обрабатывать запросы
  • Безопасность (safety) — в логах и метриках кластера не появляются признаки нарушения корректности данных или внутренних инвариантов системы

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

Инструмент Nemesis

Для проведения хаос-тестирования YDB используется инструмент Nemesis — приложение для внесения сбоев, расположенное в репозитории YDB на GitHub. Он разворачивается непосредственно на узлах тестируемого кластера и управляет внесением сбоев по заданному расписанию.

Важно

Nemesis работает только с кластерами YDB, которые были развёрнуты с помощью утилиты ydbd_slice.

Установка

Разверните Nemesis на кластере:

# Однофайловая конфигурация (cluster.yaml содержит и хосты, и шаблон базы данных)
nemesis install --yaml-config-location /path/to/cluster.yaml

# Двухфайловая конфигурация (отдельные cluster.yaml и databases.yaml)
nemesis install \
    --yaml-config-location /path/to/cluster.yaml \
    --database-config-location /path/to/databases.yaml

Первый хост в конфигурации кластера становится оркестратором, остальные — агентами. Сервисы разворачиваются как systemd-юниты и запускаются автоматически.

Основной способ наблюдать за работой Nemesis и анализировать результаты — это веб-интерфейс, работающий на оркестраторе. Откройте в браузере URL, который был напечатан в конце выполнения nemesis install; по умолчанию он доступен по адресу:

http://<orchestrator_host>:31434/static/index.html

В UI отображаются:

  • Активные сбои — текущие внесённые сбои и логи их работы, сгруппированные по категориям (сеть, узлы, таблетки, диски, датацентры, pile)
  • Расписания — типы сбоев, зарегистрированные для автоматического внесения, их интервалы и время следующего запуска
  • Ручное управление — кнопки для внесения конкретных сбоев по требованию
  • История выполнения — прошедшие сбои с временными метками, целевыми хостами
  • Liveness-проверки — кластерные проверки здоровья, выполняемые оркестратором
  • Safety-проверки — детекторы нарушений за последние 24 часа по локальным логам

Те же данные доступны через HTTP API оркестратора, если нужно собирать их программно.

Интерпретация результатов

Результат запуска Nemesis оценивается по двум свойствам: живучесть (liveness) и безопасность (safety). Критерии успеха и отказа:

  • Успех (Pass) — в течение всего запуска все liveness-проверки сообщают о здоровом кластере, и все safety-warden'ы возвращают пустые списки нарушений
  • Отказ (Fail) — хотя бы одна liveness-проверка сообщила о недоступности кластера (кластер не восстановился после сбоя за ожидаемое время) либо хотя бы один safety-warden вернул непустой список нарушений (например, ошибки или assertion'ы в логах кластера, рассогласования SchemeShard, нарушения инвариантов DataShard)

В UI успешные проверки отображаются с пустым списком нарушений, а отказавшие — с сообщениями о нарушениях, сформированными соответствующим warden'ом.

Чтобы разобраться с проблемой, откройте отказавшую проверку в UI и прочитайте список сообщений о нарушениях.

Описание конкретных проверок и шаблонов, которые ищет каждый warden, см. в README Nemesis.

Остановка сервисов

Остановите все сервисы Nemesis на кластере:

nemesis stop --yaml-config-location /path/to/cluster.yaml

Расширение Nemesis

Если нужно добавить новый тип хаоса (сбоя) или новую проверку safety/liveness, см. README. Там описано, как реализовать и зарегистрировать новые раннеры сбоев, планировщики и классы warden'ов.

Предыдущая
Следующая