Ответ
Тестирование отказоустойчивости (Failover Testing) — это тип нефункционального тестирования, который проверяет способность распределенной системы автоматически переключать нагрузку с отказавшего основного компонента (сервер, база данных, сетевое соединение) на резервный с минимальным временем простоя и без потери данных.
Основные цели:
- Верификация автоматического восстановления. Система должна обнаружить сбой и выполнить переключение без ручного вмешательства.
- Измерение ключевых метрик:
- RTO (Recovery Time Objective): Максимально допустимое время восстановления работы после сбоя.
- RPO (Recovery Point Objective): Максимальный объем данных (по времени), допустимый к потере (например, транзакции за последние 5 секунд).
- Проверка целостности данных и сессий после переключения.
Типичный сценарий для веб-приложения с балансировщиком нагрузки:
# 1. Система в нормальном состоянии: трафик идет на Primary Server.
# 2. Имитация сбоя:
sudo systemctl stop nginx # Остановка веб-сервера на основном узле
# или
sudo iptables -A INPUT -p tcp --dport 80 -j DROP # Блокировка порта
# 3. Ожидаемое поведение системы:
# - Мониторинг (например, Health Check от Load Balancer) обнаруживает недоступность Primary.
# - Load Balancer исключает узел из пула и перенаправляет трафик на Standby Server.
# - Пользователи могут испытывать короткую задержку, но не теряют активные сессии.
# - Критичные транзакции не теряются (журналируются или реплицируются).
Что тестируется:
- Отказ сервера приложения или базы данных.
- Обрыв сетевого соединения или сбой DNS.
- Отказ диска или аппаратного компонента.
- Перегрузка одного из узлов кластера.
Инструменты: Для автоматизации таких тестов используются Chaos Engineering инструменты (Chaos Monkey, Gremlin), средства оркестрации (Kubernetes, который может перезапускать поды) и скрипты для имитации сбоев.