WEB-88 · Задача · Инфраструктура · web
Zero-downtime деплой: убрать окно 502 при посадках (сейчас рестарт systemd = секунды даунтайма)
Закрыт
P3
ведёт: —
Суть
Каждая посадка (сегодня их было 10) даёт секунды 502 — owner дважды попал. Варианты: socket activation / двойной инстанс с переключением upstream в nginx / health-gated switchover в pi-land.sh. Не срочно, качество жизни.
## ДЛЯ НУЛЕВОГО АГЕНТА (обновлено 2026-09-05 UTC)
- **Суть одной строкой:** Zero-downtime деплой: убрать окно 502 при посадках (сейчас рестарт systemd = секунды даунтайма)
- **Текущее состояние:** статус: done; Каждая посадка (сегодня их было 10) даёт секунды 502 — owner дважды попал. Варианты: socket activation / двойной инстанс с переключением upstream в nginx / health-gated switchover в pi-land.sh. Не срочно, качество жизни. | [A1 12:48 Фабл] Триаж 03.09 (owner: «чего они ждут — срочно принимайте, сажайте»): линия в проде l95 (WEB88B b8576bfd + rollback-фиксы 9407f154/f69433b6; runbook infra/zero-downtime — предок l95-candidate f7b9a4fd, посадка через l71/l72/l73); доска не была переключена. Закрываем. | Zero-downtime: механизм введён 04.09 (второй процесс nc-a1-b:3012 + upstream ncbackend, контролируемый отказ: stop nc-a1 → сайт 200). Урок 05.09: без sticky (iphash) второй процесс ЛОМАЕТ realtime и сохранение документов (WEB-492/495) — состояние engine.io и document-session per-process; исправле…
- **Кто работал:**
- 2026-09-03T07:18:45.050Z — Fable — [A1 12:48 Фабл] Триаж 03.09 (owner: «чего они ждут — срочно принимайте, сажайте»): линия в проде l95 (WEB88B b8576bfd + rollback-фиксы 9407f154/f69433b6; runbook infra/zero-downtime — предок l95-candidate f7b9a4fd, посад
- 2026-09-05T00:40:37.079Z — координатор — Zero-downtime: механизм введён 04.09 (второй процесс nc-a1-b:3012 + upstream ncbackend, контролируемый отказ: stop nc-a1 → сайт 200). Урок 05.09: без sticky (iphash) второй процесс ЛОМАЕТ realtime и сохранение документов
- **Ветки/бандлы/отчёты:** ~/Projects/nc-agent-ops/board/specs/INFRA-A1-TWO-BACKENDS-LB.md.; sha: b8576bfd, 9407f154, f69433b6, f7b9a4fd
- **KNOWN ISSUES / ТРАБЛШУТИНГ:**
- [A1 12:48 Фабл] Триаж 03.09 (owner: «чего они ждут — срочно принимайте, сажайте»): линия в проде l95 (WEB88B b8576bfd + rollback-фиксы 9407f154/f69433b6; runbook infra/zero-downtime — предок l95-candidate f7b9a4fd, посадка через l71/l72/l73); доска не была переключена. Закрываем.
- **Эволюция:**
- 2026-09-03 → [A1 12:48 Фабл] Триаж 03.09 (owner: «чего они ждут — срочно принимайте, сажайте»): линия в проде l95 (WEB88B b8576bfd + rollback-фиксы 9407f154/f69433b6; runbook infra/zero-downtime — предок l95-candidate f7b9a4fd, посадка через l71/l72/l73); доска не была пер
- 2026-09-05 → Zero-downtime: механизм введён 04.09 (второй процесс nc-a1-b:3012 + upstream ncbackend, контролируемый отказ: stop nc-a1 → сайт 200). Урок 05.09: без sticky (iphash) второй процесс ЛОМАЕТ realtime и сохранение документов (WEB-492/495) — состояние engine.io и d
- [A1 12:48 Фабл] Триаж 03.09 (owner: «чего они ждут — срочно принимайте, сажайте»): линия в проде l95 (WEB88B b8576bfd + rollback-фиксы 9407f154/f69433b6; runbook infra/zero-downtime — предок l95-candidate f7b9a4fd, посадка через l71/l72/l73); доска не была переключена. Закрываем.
- Zero-downtime: механизм введён 04.09 (второй процесс nc-a1-b:3012 + upstream ncbackend, контролируемый отказ: stop nc-a1 → сайт 200). Урок 05.09: без sticky (iphash) второй процесс ЛОМАЕТ realtime и сохранение документов (WEB-492/495) — состояние engine.io и document-session per-process; исправле…
- **Следующий шаг:** Каждая посадка (сегодня их было 10) даёт секунды 502 — owner дважды попал. Варианты: socket activation / двойной инстанс с переключением upstream в nginx / health-gated switchover в pi-land.sh. Не срочно, качество жизни. | [A1 12:48 Фабл] Триаж 03.09 (owner: «чего они ждут — срочно принимайте, сажайте»): линия в проде l95 (WEB88B b8576bfd + rollback-фиксы 9407f154/f69433b6; runbook infra/zero-downtime — предок l95-candidate f7b9a4fd, посадка через l71/l72/l73); доска не была переключена. Закрываем.
Доказательства
---
## 2026-08-29 10:00Z — взят в работу (owner: «кто-то из очереди может пойти в работу?»)
Волна WEB88ZERO (A1 queue/429, база l68 18af977a). Симптом: `systemctl restart note-clone-3010` при каждой посадке даёт окно 502.
Требования круга: (1) инвентарь текущей посадки — pi-deploy.sh и drop-in note-clone-3010.service.d, где именно рождается 502; (2) схема без окна на выбор с обоснованием — два слота A/B + graceful reload nginx, socket activation, либо прогрев нового процесса с пробой /api/ready/paid (у нас УЖЕ есть сухой прогон на :31264 — логично превратить в постоянный слот); (3) ⚠️ денежный контур: у каждой линии свои spend-runtime env и подписанная аттестация, два слота не должны делить один файл; (4) ⚠️ совместимость с арендой active/passive (WEB-405 принята) — два слота одного релиза не должны выглядеть как две активные копии; (5) ГОТОВЫЙ runbook посадки с новой схемой (им буду пользоваться я); (6) синтетическая проба схемы и замер окна отказа до/после. Прод не трогать — доступа у волны нет.
[29.08 ПРИНЯТО — ACC88B_VERDICT=GO, коммит cf8ebf43e0d6bc175f7b1034b39b97cfc83d6dec]
Круг 1 (d326bd96) получил NO-GO: два ПРОЦЕССА с одинаковым ACTIVE_PASSIVE_COPY_ID не фехтовались, побочные эффекты выполняли ОБА.
Круг 2 сделал handoff slot-aware. Probe приёмки (scripts/zero-downtime-slot-handoff-probe.ts:25): A ensure active=true generation=1 slot=a; B ensure active=true generation=2 slot=b; SIDE EFFECTS: A, count=1 — то есть побочный эффект выполнил РОВНО ОДИН слот, вытеснение фиксируется до side effect.
Закрыты и остальные блокеры круга 1: разведение сухого прогона и слота B (fail-closed проверка владения портом, готовность подтверждает MainPID/cwd/release кандидата), путь первой неудачной миграции с исполнимым откатом и командами восстановления nginx, runbook без заглушек.
Значение шире тикета: это же чинит дефект аренды из WEB-405 (два процесса одной копии). Кандидат в следующую линию после l69.
[BOARDTRIAGE] Приёмщик: infra/release coordinator. ACC88B GO: A/B handoff slot-aware, side effects count=1, fail-closed readiness и rollback/runbook закрыты; рекомендуется done.
Лента
2026-09-03T07:18:45.050Z · Fable[A1 12:48 Фабл] Триаж 03.09 (owner: «чего они ждут — срочно принимайте, сажайте»): линия в проде l95 (WEB88B b8576bfd + rollback-фиксы 9407f154/f69433b6; runbook infra/zero-downtime — предок l95-candidate f7b9a4fd, посадка через l71/l72/l73); доска не была переключена. Закрываем.
2026-09-05T00:40:37.079Z · координаторZero-downtime: механизм введён 04.09 (второй процесс nc-a1-b:3012 + upstream nc_backend, контролируемый отказ: stop nc-a1 → сайт 200). Урок 05.09: без sticky (ip_hash) второй процесс ЛОМАЕТ realtime и сохранение документов (WEB-492/495) — состояние engine.io и document-session per-process; исправлено ip_hash + идентичные drop-in. Посадка l106 будет первой с перезапуском бэкендов по очереди без окна 502 (land-l106.sh flip). Ранбук: ~/Projects/nc-agent-ops/board/specs/INFRA-A1-TWO-BACKENDS-LB.md. Правила: WEB-449.
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-88","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-09-05T21:05:36.475Z