---
metadata:
  - name: generator
    content: Diplodoc Platform v5.56.0
alternate:
  - https://ydb.tech/docs/en/contributor/testing/chaos-testing.md?version=main
  - https://ydb.tech/docs/ru/contributor/testing/chaos-testing.md?version=main
  - href: ru/contributor/testing/chaos-testing.md
    type: text/markdown
    title: Markdown version
  - href: ../../llms.txt
    type: text/markdown
    title: llms.txt
sourcePath: ru/core/contributor/testing/chaos-testing.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt

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

Хаос-тестирование — это методология проверки устойчивости YDB путём намеренного внесения сбоев в работающий кластер. Цель — убедиться, что YDB корректно переживает реальные отказы: потери узлов, сетевые разделения, проблемы с дисками и другие нештатные ситуации. За внесение этого хаоса отвечает инструмент **[Nemesis](https://github.com/ydb-platform/ydb/tree/main/ydb/tests/stability/nemesis)**.

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

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

### Сетевые сбои

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

### Отказы узлов

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

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

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

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

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

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

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

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

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

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

- Остановка всех узлов в одном [pile](https://ydb.tech/docs/ru/concepts/glossary.md?version=main#pile)
- Сетевая изоляция [pile](https://ydb.tech/docs/ru/concepts/glossary.md?version=main#pile)

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

Хаос-тестирование обычно запускается совместно с нагрузочными тестами из директории [ydb/tests/stress](https://github.com/ydb-platform/ydb/tree/main/ydb/tests/stress). Такое сочетание позволяет тестировать кластер в условиях нагрузки при одновременном возникновении различных сбоев.

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

Во время внесения сбоев система по запросу проверяет два [свойства](https://en.wikipedia.org/wiki/Safety_and_liveness_properties):

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

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

## Инструмент Nemesis

Для проведения хаос-тестирования YDB используется инструмент **Nemesis** — приложение для внесения сбоев, расположенное в [репозитории YDB на GitHub](https://github.com/ydb-platform/ydb/tree/main/ydb/tests/stability/nemesis). Он разворачивается непосредственно на узлах тестируемого кластера и управляет внесением сбоев по заданному расписанию.

{% note warning %}

Nemesis работает только с кластерами YDB, которые были развёрнуты с помощью утилиты [`ydbd_slice`](https://github.com/ydb-platform/ydb/tree/main/ydb/tools/ydbd_slice).

{% endnote %}

### Установка

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

```bash
# Однофайловая конфигурация (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`; по умолчанию он доступен по адресу:

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

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

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

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


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

Результат запуска Nemesis оценивается по двум [свойствам](https://en.wikipedia.org/wiki/Safety_and_liveness_properties): **живучесть (liveness)** и **безопасность (safety)**. Критерии успеха и отказа:

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

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

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

Описание конкретных проверок и шаблонов, которые ищет каждый warden, см. в [README Nemesis](https://github.com/ydb-platform/ydb/blob/main/ydb/tests/stability/nemesis/README.md).


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

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

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

## Расширение Nemesis

Если нужно добавить новый тип хаоса (сбоя) или новую проверку safety/liveness, см. [README](https://github.com/ydb-platform/ydb/blob/main/ydb/tests/stability/nemesis/README.md). Там описано, как реализовать и зарегистрировать новые раннеры сбоев, планировщики и классы warden'ов.
