TGViewer
LinuxSkill - Сводки с прода и Шпаргалки LinuxSkill - Сводки с прода и Шпаргалки @linuxskill · 10.7K subscribers
Post #1195 1.78K
☠️ Реплики плодятся и умирают? Траблшутинг Docker-кластера для мидлов

Распределённые сервисы падают незаметно. Вчера работало три реплики, а сегодня нода отвалилась из-за нехватки памяти, и кластер бьётся в агонии. Показываю, как жёстко протестировать 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
  • 👍 6
More from @linuxskill
  1. Oct 2, 2026📊 Диск тормозит, а iostat показывает норму? Ищем хвост задержек Приложение подвисает на з…
  2. Sep 30, 2026💀 CPU под 100%, а в top пусто? Ловим невидимые процессы через eBPF Сервер греется, в шапк…
  3. Sep 28, 2026🔥 Знаешь только ip a? 10 неочевидных команд ip для Linux Большинство админов знают про ip…
  4. Sep 25, 2026Разобрать строку штатным <regex.h> и не получить молчаливое «нет совпадения». Проверял на…
  5. Sep 23, 2026Закрыть периметр правилами iptables и не остаться при этом за дверью вместе с атакующим. П…
  6. Sep 21, 2026Добавить пользователя в группу и не выкинуть его при этом из sudo Добавить во вторичную гр…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →