Перейти к содержимому

Статья

Rolling-апгрейд Couchbase Server под CAO (paced + pause-gate)

Copy/paste runbook для support и SRE: preflight, swap-rebalance узел за узлом, стратегия XDCR, триггеры rollback и проверки sign-off

  • 2 мин чтения
  • База данных
  • Kubernetes
  • DevOps
  • SRE

Апгрейды — момент, когда надёжность БД доказывается или ломается. Эта статья даёт paced, удобный для поддержки runbook апгрейда Couchbase Server под Couchbase Autonomous Operator (CAO) с нативным полем spec.paused для гейтинга прогресса между узлами. Итог: один узел за раз, окно стабилизации между swap, более ясные сигналы и большее окно rollback.

Эталонная топология

Типичная топология Couchbase на AKS

Цикл paced-апгрейда

Цикл paced-апгрейда

Цели

  • Апгрейд Couchbase Server с минимальным риском.
  • Держать намеренное окно pause + stabilize + health check между узлами.
  • Сохранять опции rollback как можно дольше.

Чеклист до апгрейда (не пропускать)

  • Всё зелёное: фаза кластера Available, нет активного rebalance, нет Warning-событий.
  • Бэкапы актуальны и восстанавливаемы: полный бэкап завершён; restore-drill сделан или время понято.
  • Rollback-тег записан: проверить, что старый образ ещё есть и pull возможен.
  • Решение по XDCR записано: отключить на prod-апгрейдах для чистого сигнала (рекомендуется) или оставить в pre-prod для отработки поведения.

Быстрые команды проверки

export ENV=dev
export REGION=west
export NS=couchbase-${ENV}-${REGION}

kubectl -n "$NS" get couchbasecluster -o wide
kubectl -n "$NS" get pods -l app=couchbase
kubectl -n "$NS" get events --field-selector type=Warning | tail -20
kubectl -n "$NS" get couchbasecluster "$NS" -o jsonpath='paused={.spec.paused} phase={.status.phase} rebalance={.status.rebalanceProgress}{"\n"}'

Пути выполнения

  • Предпочтительно: запустить апгрейд из CI workflow (сначала dry-run, затем реальный).
  • Fallback: запустить paced upgrade-скрипт с workstation (сначала dry-run, затем реальный).

Сигналы мониторинга (на что смотреть support)

  • Образы pod: сдвиг старый → новый; идеален один swap за раз.
  • Состояние pause: spec.paused = true во время стабилизации; никогда не оставлять true без присмотра.
  • Rebalance: возвращается к none между swap; расследовать устойчивые rebalance.
  • XDCR: changes_left растёт при rebalance и спадает при стабилизации; отсутствие спада — сигнал инцидента.
  • Рестарты: любой неожиданный рестарт после swap — красный флаг.

Триггеры rollback

  • Узел не становится healthy в окне timeout.
  • Rebalance падает и не решается одним retry после расследования.
  • Ошибка приложения превышает согласованную толерантность.
  • XDCR не восстанавливается после согласованного recovery-окна.
  • Любой bucket недоступен (missing vbuckets) — считать P1.

Post-upgrade валидация (sign-off)

  • Все pod на целевом образе
  • Фаза кластера Available
  • Нет новых Warning-событий 30+ минут
  • Бэкап успешен после апгрейда
  • XDCR вернулся в steady-state (если используется)
  • Дашборды приложения зелёные 30+ минут

Совет: Если нужна сначала более короткая нарративная версия, начните с обзора в блоге: Апгрейды Couchbase с CAO pause-gates.