Кластеризация

Эксплуатация кластера

Журнал топологии, события отказоустойчивости и что меняет статусы кластера.

Enterprise

Журнал топологии

Страница Cluster → Journal (/workspace/cluster/journal) показывает историю версий документа топологии. Каждая запись — одна версия: состав нод, Raft-группы с репликами и правило размещения. Это не журнал аудита и не Raft-лог.

Страница Topology Journal

Таблица записей

Новые версии сверху. Размер страницы — 20, 50 или 100 записей.

КолонкаЗначение
VersionНомер версии.
CreatedВремя сохранения.
OriginКто создал версию. См. таблицу ниже.
NodesЧисло нод в документе.
GroupsЧисло Raft-групп, включая _meta.
ReplicasОбщее число реплик во всех группах.

Щелчок по записи открывает документ версии справа. Над документом метки: идентификатор кластера, origin, автор изменения (by …), родительская версия (parent vN) и правило размещения (placement min–max).

Источник версии

OriginКто создал
foundingПервый старт кластера. Всегда версия v1.
apiОператор через веб-интерфейс или API: добавление шарда, дренирование ноды и т. п.
reconcilerКонтур авто-восстановления.
operatorReseat реплики по запросу оператора.
systemВнутренние процессы: присоединение и активация ноды.
internalСлужебные версии, которые применяются автоматически. Например, при публикации миграции заказчика.

Кластер хранит последние 128 версий. Страница только для чтения: применить или отменить сохранённую версию можно баннером на странице Status.

События отказоустойчивости

Страница Cluster → Events (/workspace/cluster/events) показывает хронологию событий: смены лидеров, потерю и восстановление кворума, изменения доступности нод.

Страница Resilience Events

Каждая нода ведёт свой журнал событий. Журналы нод не объединяются: в заголовке указано, какая нода наблюдала события (observed by …).

Фильтры

  • Нода — чей журнал показать. По умолчанию — текущий лидер _meta. Выберите другую ноду, чтобы увидеть, что наблюдала она.
  • Тип — все типы или один.
  • Группа — все группы или одна.

Таблица событий

Колонки: Time, Type, Group, Detail.

ТипЦветКогда появляется
leader changeбез заливкиЛидерство группы перешло к другой реплике. moved to (none) — группа временно без лидера. В скобках указан term — номер эпохи выборов.
quorum lostкрасныйГруппа потеряла кворум. В деталях — число живых голосующих реплик.
quorum achievedзелёныйГруппа восстановила кворум.
node aliveсерыйНода стала доступна по gossip.
node deadкрасныйНода стала недоступна по gossip.

Загружаются последние 100 событий. Load older догружает ещё 100. В интерфейсе показывается не больше 2000 событий. Более старые доступны через GET /api/cluster/v1/events?before_seq=….

Журнал хранится 30 дней и занимает до 64 МБ. Лимиты задаются в cluster_config.event_journal: retention_days от 1 до 365, max_size_mb от 8 до 1024. Запись событий не гарантирована: при сбое диска событие теряется, а работа ноды продолжается.

Что меняет статусы кластера

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

Gossip: доступность нод

Здоровье групп

Приём трафика нодой

События

Выборы лидера

Действия оператора

Новая версия топологии

Авто-восстановление

Журнал

Применение

Active-версия

Доступность нод

Ноды проверяют друг друга по gossip.

ИзменениеПричинаРезультат
alive → suspectПробы к ноде перестали проходить.Нода под подозрением, другие ноды перепроверяют её.
suspect → deadНода не ответила за отведённое время.Плитка ноды — dead, событие node dead. Здоровье групп с её репликами пересчитывается.
dead → aliveНода снова отвечает.Событие node alive. Группы восстанавливают здоровье.
→ leftНода штатно остановлена.Нода покинула gossip.

Режим Mode на странице Status становится Cluster, когда живы две ноды и больше.

Здоровье Raft-групп

Здоровье _meta и каждого шарда пересчитывается каждые 5 секунд: сколько голосующих реплик группы находятся на живых нодах.

Живых голосующих репликЗдоровьеПоследствия
ВсеhealthyНормальная работа.
Не все ноды, но не меньше кворумаdegradedГруппа работает, отказоустойчивость снижена.
Меньше кворумаquorum_lostГруппа не принимает записи. Событие quorum lost.
Нет данныхunknownСразу после старта ноды.

При возврате из quorum_lost появляется событие quorum achieved.

Шард в quorum_lost переводит ноды в состояние Not serving: readiness-проба /internal/ready отвечает 503, балансировщик убирает ноды из ротации. То же происходит, если у ноды нет живой сессии с _meta.

Как вернуть группу:

  1. Верните недоступные ноды — это основной путь. Кворум восстановится сам.
  2. Если ноды потеряны, но кворум есть, выведите их через Drain и Exclude и добавьте замену.
  3. Если кворум потерян безвозвратно и выжила одна нода, используйте Promote as single-node cluster… на странице Status.

Лидерство

ПричинаРезультат
Лидер стал недоступенОставшиеся реплики выбирают нового лидера. Событие leader change, сначала часто moved to (none).
Transfer leader или Move out leaders from this nodeЛидерство передаётся другой реплике. Событие leader change.
Перезапуск ноды-лидераПеревыборы, событие leader change.

Частые смены лидера без действий оператора означают нестабильную сеть или перегруженные ноды.

Документ топологии

Каждое изменение состава создаёт новую версию в журнале и применяется в фоне.

ДействиеГдеИзменение
Add to cluster / Re-admitStatusНода добавляется в документ.
DrainStatusНода → draining, реплики переносятся, затем drained.
ActivateStatusНода → active, на неё снова размещаются реплики.
ExcludeStatusНода → excluded.
Add shard / DeleteShardsГруппа шарда добавляется или удаляется.
Apply / DiscardStatus, баннерСохранённая версия применяется или отменяется.
Миграция заказчикаСтраница заказчикаСлужебная версия с conf_ver шарда, origin internal.
Reseat репликиAPIРеплика получает новый идентификатор, origin operator.

Применение версии проходит шаги: создание группы, добавление learner'а, ожидание догона журнала, повышение до voter, удаление реплики, передача лидерства. Состояние применения:

СостояниеЗначение
pending, runningПрименение ждёт или выполняется.
waiting_for_replica, waiting_for_catch_up, waiting_for_leaderЖдёт реплику, догона журнала или лидера группы.
succeededВерсия стала Active.
failedШаг не удался. Версия осталась неприменённой.
supersededПрименение заменено более новой версией.

Авто-восстановление

Лидер _meta каждые 30 секунд сверяет живой кластер с документом и сам исправляет безопасные расхождения: возвращает вернувшиеся ноды на шарды и дожимает служебные версии. Настройка — cluster_config.auto_repair, по умолчанию включено.

Состояние контура показывает строка reconciler на странице Status.

СостояниеЗначение
disabledВыключено в конфигурации.
standbyНода не лидер _meta, контур работает на другой ноде.
idleРасхождений нет.
waitingРасхождение есть, контур выжидает.
blockedКонтур не может действовать без оператора.
runningВыполняется ремонт.
errorОшибка контура.

Причины, которые требуют внимания:

ПричинаЗначениеЧто делать
staged_latestЕсть сохранённая, но не применённая версия. Пока она висит, авто-восстановление заблокировано.Примените или отмените версию баннером на странице Status.
failed_executionПрименение версии завершилось ошибкой.Посмотрите план версии, устраните причину и примените заново.
quorum_lostШард потерял кворум. Авто-восстановление его не трогает.Верните ноды. См. Здоровье Raft-групп.
unknown_healthЗдоровье нод ещё не известно.Подождите.
stability_windowНода вернулась недавно. Контур ждёт, пока она стабильно проживёт stability_window, по умолчанию 60 секунд.Подождите.
cooldownНедавно был ремонт. Контур выдерживает паузу cooldown, по умолчанию 5 минут.Подождите.
missing_replicaНе хватает реплики, контур её восстановит.Подождите.
policy_rejectedНужный ремонт вне списка безопасных действий.Выполните изменение вручную.

Содержание