resilience(roadmap): workshop pass 1 — close design-task; file top-3 impl-tasks
- close [resilience-roadmap-design] 🟢 — roadmap expanded via interactive workshop with user (per-service RTO/RPO matrix for 10 services, CMS backup 2-phase plan, IIS migration track, 4 secondary topics documented as recommendations) - file 3 impl-tasks ⚪ ready (spawned by roadmap-design): - cms-stopgap-backup-daily — Phase 1, plug RPO=∞ via daily rsync to kreknin - mssql-minio-migration-to-vds — Phase 2 enabler, achieves RPO 1h target - windows-hosting-vendor-research — design-task for IIS migration off home host - unblock [admin-infra-project-review] 🔵 → ⚪ (last blocker cleared) - expand .wiki/concepts/future-resilient-architecture-goals.md with §Workshop pass 1 (canonical) above original §Pre-workshop placeholder (historical) Key user-decisions zafiksirovany in workshop: - CMS RTO 4h / RPO 1h (not 1h/15min — overkill for one-person infra) - MSSQL+MinIO migrate to VDS (not Windows-side managed hosting) - MSSQL Always-On AG rejected — log shipping every 60min sufficient - IIS long-term dies with snolla-on-node; transitional via managed Windows host - Cloud off-site = Yandex Object Storage when needed (kreknin already off-site) - Monitoring = Uptime Kuma on VDS, high-priority among not-filed Acceptance per spec (user confirmed plan + concrete impl-tasks top-3 + doc committed) — met. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
62
.tasks/mssql-minio-migration-to-vds.md
Normal file
62
.tasks/mssql-minio-migration-to-vds.md
Normal file
@@ -0,0 +1,62 @@
|
||||
# mssql-minio-migration-to-vds
|
||||
|
||||
## Goal
|
||||
Перенести MSSQL контейнер + MinIO с [[../entities/windows-recovery-host]] на [[../entities/vds-kzntsv]] чтобы:
|
||||
1. **Снять SPOF с windows-recovery-host** (домашняя машина) для критических CMS-данных
|
||||
2. **Achieve target RPO 1ч** через подключение к существующему `vds-backup-rsync-kreknin` pipeline (tx log backups каждые 60 мин в существующий rsync→kreknin)
|
||||
3. **Унифицировать DB park** — MSSQL рядом с pg/maria/mongo/redis в `/opt/stacks/databases/`
|
||||
4. **Подготовить ground** для будущего IIS migration на managed Windows hosting ([[windows-hosting-vendor-research]] → impl-таска позже)
|
||||
|
||||
Это **Фаза 2** roadmap'а CMS backup'ов. После завершения — списать [[cms-stopgap-backup-daily]] pipeline.
|
||||
|
||||
## Key files / refs
|
||||
- **Source MSSQL:** docker container на windows-host, image `mcr.microsoft.com/mssql/server:2019-latest`, volume `mssql_mssql_data`, 5 production DBs (MoreThenCms, Stayer*, stostayer, TireService) — см. [[../.wiki/concepts/recovery-architecture-snapshot]] §"Запущенные docker контейнеры"
|
||||
- **Source MinIO:** docker container на windows-host, image `minio/minio:RELEASE.2020-07-13T18-09-56Z`, volume bind `./data`
|
||||
- **Target MSSQL:** `/opt/stacks/databases/mssql/{data,certs,docker-compose.yml}` на VDS — паттерн как у existing DBs, см. [[../.wiki/entities/vds-kzntsv]]
|
||||
- **Target MinIO:** `/opt/stacks/storage/minio/` (новый stack на VDS)
|
||||
- **CMS connection strings (изменить):**
|
||||
- MSSQL: `Data Source=localhost,1433` → `Data Source=mssql.vds.kzntsv.site,1433` (через traefik raw-TCP passthrough)
|
||||
- MinIO: endpoint `localhost:9000` → `minio.vds.kzntsv.site:9000`
|
||||
- **Existing backup pipeline для расширения:** `/opt/stacks/backup/scripts/run.sh` на VDS (см. [[../.tasks/vds-backup-rsync-kreknin]] — 🟢 done)
|
||||
- **TLS pattern:** self-signed certs через traefik raw-TCP passthrough, см. [[../.wiki/concepts/db-tls-self-signed-via-traefik-raw-tcp]] + [[../.wiki/concepts/traefik-tcp-passthrough-vs-starttls]]
|
||||
|
||||
## Acceptance
|
||||
1. **MSSQL container на VDS** запущен, 5 prod DBs восстановлены (cold cutover: stop CMS app pool → backup MSSQL host-side → restore on VDS → repoint connection strings → start CMS app pool)
|
||||
2. **MinIO на VDS** запущен, content мигрирован (`mc mirror` от source к target)
|
||||
3. **CMS connection strings updated** в web.config (или эквиваленте), sites функциональны (smoke test 8 hosts: 200 OK + asset loading + admin/assets/getList — это известный hot-path)
|
||||
4. **Pre-cutover benchmark выполнен** — admin assets UI / search / catalog response times измерены до и после миграции, **latency degradation <2x** (target). Если worse — discussed с user перед commit'ом cutover (возможно retreat или оптимизация query patterns)
|
||||
5. **Backup pipeline на VDS расширен:** добавлены в `run.sh`:
|
||||
- `mssql_dump_full` ежедневно (как pg_dumpall pattern)
|
||||
- `mssql_tx_log_backup` ежечасно (новая нога — `BACKUP LOG` через `docker exec mssql sqlcmd ...`)
|
||||
- `minio_mirror` ежедневно (`mc mirror` либо rsync data dir)
|
||||
6. **ntfy push verified** для расширенного pipeline (включает MSSQL+MinIO size/duration)
|
||||
7. **`cms-stopgap-backup-daily` cron на windows-host отключён** после первого успешного VDS-pipeline run (atomic swap, не parallel-running, чтобы не оставлять confusing-state двух pipelines)
|
||||
8. **Documented** в [[../.wiki/concepts/mssql-minio-on-vds]] (создать) с:
|
||||
- architecture diagram (IIS → traefik VDS → MSSQL/MinIO containers)
|
||||
- rollback recipe (если cutover failed — vernut' connection strings + reactivate stop-gap pipeline)
|
||||
- migration runbook (что делал, в каком порядке)
|
||||
|
||||
## Decisions log
|
||||
- 2026-05-21: создана из roadmap-workshop'а ([[../.wiki/concepts/future-resilient-architecture-goals]] §Фаза 2). User-confirmed: MSSQL+MinIO мигрируют на VDS (vs alternative — оставить на managed Windows host рядом с IIS). Reasons:
|
||||
- DB park уже на VDS, unified backup operation
|
||||
- Linux containers стабильнее и дешевле в обслуживании чем Windows-side MSSQL
|
||||
- VDS уже работает, не плодим хосты
|
||||
- Подготавливает ground для IIS-migration (после неё IIS host сможет быть thin — только web layer)
|
||||
|
||||
## Open questions
|
||||
- [ ] **MSSQL Express vs Developer vs Standard на Linux container** — TBD по licensing. Production size MoreThenCms — проверить, помещается ли в Express limits (10GB per DB, 1410MB RAM). Если нет — Developer (бесплатно для non-prod, формально не для прод) или Standard ($$$$). Альтернатива — migration MSSQL → PostgreSQL (упомянуто в roadmap как long-term option) — отдельный major project.
|
||||
- [ ] **MinIO migration approach** — `mc mirror` overnight (zero-downtime если кратко) или maintenance window (cleaner)?
|
||||
- [ ] **Cutover timing** — нужен ли downtime window клиентам, или можно zero-downtime через MSSQL log shipping (source → target replay, потом final switch)?
|
||||
- [ ] **CMS connection-string change** — где живёт config (web.config? отдельный appsettings? hardcoded в DLL?). Если hardcoded — нужен DLL rebuild который требует build env, отложен в [[../.wiki/concepts/cms-admin-assets-root-folder-seed]] §"Долгосрочный TODO"
|
||||
- [ ] **Hermes service на windows-host?** (упомянут как defer в [[../.wiki/entities/vds-kzntsv]] Open issues) — проверить не зависит ли от MSSQL/MinIO, если да — мигрируется заодно или ломается
|
||||
|
||||
## Risks
|
||||
- **WAN latency IIS→MSSQL:** теперь 10-30ms vs localhost. Большинство CMS-операций batchey, не latency-sensitive. **Pre-cutover benchmark обязателен** для hot-paths (admin assets UI / search / каталоги) — flag если round-trip-heavy. См. acceptance item 4.
|
||||
- **MSSQL Linux compat:** некоторые edge-case T-SQL features differ (CLR, FileStream, full-text search). Smoke test обязателен — `EXEC sp_helpdb` + проверить что нет CLR assemblies / FileStream filegroups в prod DBs.
|
||||
- **TLS overhead:** rawTCP through traefik adds minor latency vs direct connection. Negligible (<1ms) но проверить.
|
||||
- **Cutover rollback:** если CMS не работает после repoint — quick revert connection strings возможен **только** если MSSQL на windows-host оставлен running parallel ~24-48ч после cutover. План: stop receiving writes на windows-MSSQL (read-only), но container running, для emergency rollback. Через 48ч uptime — stop windows-MSSQL container, через неделю — `docker rm + docker volume rm`.
|
||||
|
||||
## Notes
|
||||
Эта таска — major (1-2 недели работы realistic). Можно разбить на sub-phases при impl: (a) MSSQL container deploy + restore from backup, (b) connection string change + smoke, (c) MinIO migration, (d) backup pipeline integration. Каждая sub-phase = свой commit с atomic revert recipe.
|
||||
|
||||
Atomic revert (full): revert CMS web.config → windows-host MSSQL/MinIO; восстановить cms-stopgap-backup-daily cron; на VDS — `docker compose down -v` для mssql + minio stacks; удалить новые ноги из `run.sh`.
|
||||
Reference in New Issue
Block a user