Распределённые сервисы падают незаметно. Вчера работало три реплики, а сегодня нода отвалилась из-за нехватки памяти, и кластер бьётся в агонии. Показываю, как жёстко протестировать self-healing и дебажить мульти-нодовые сервисы прямо из терминала. Всё ниже — про Docker Swarm (не про обычный
docker run).Срез состояния распределённого сервиса
# На каких нодах (NODE) запущены реплики сервиса web.
# Столбцы DESIRED STATE и CURRENT STATE сразу покажут зависшую или упавшую задачу.
docker service ps web
Имитация аппаратного сбоя (Failover)
# Мягко выводим ноду из балансировки — задачи переедут на живые узлы.
docker node update --availability drain worker-1
# Возвращаем ноду в строй (реплики сами обратно НЕ переедут — нужен ребаланс).
docker node update --availability active worker-1
Глобальная агрегация логов
# Логи со всех реплик на всех нодах в один поток.
# --raw убирает служебные префиксы Swarm, если нужен чистый вывод приложения.
docker service logs --follow --details web
Детальный дебаг умирающих реплик
# Надёжнее текстового grep — встроенный фильтр по состоянию задачи.
# Показывает именно завершённые/упавшие задачи, а колонка ERROR даёт причину.
docker service ps web --no-trunc --filter "desired-state=shutdown"
# Альтернатива через grep (работает, но чувствительна к регистру и формату):
docker service ps web --no-trunc | grep -i "failed"
Инспекция здоровья менеджеров
# Не рассинхронизировался ли Raft: доступность конкретного менеджера.
docker node inspect manager-1 --format '{{.ManagerStatus.Reachability}}'
# Кто сейчас лидер кластера (true = этот узел лидер).
docker node inspect manager-1 --format '{{.ManagerStatus.Leader}}'
Подводные камни:
Если кворум менеджеров (Raft) потерян, воркеры продолжат обслуживать трафик, но управлять кластером ты не сможешь. Держи нечётное число менеджеров: 3 переживают падение 1, 5 — падение 2, 7 — падение 3.
docker logs работает только для локального контейнера на конкретной ноде. В кластере используй docker service logs.Не тестируй отказоустойчивость убийством одного контейнера — Swarm просто перезапустит его на той же ноде. Имитируй падение узла целиком через
drain.Держи кластер под жёстким контролем и тестируй failover раньше, чем это сделает боевой трафик.
❗️❗️❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Docker #DevOps #Swarm #SysAdmin