This commit is contained in:
2026-10-27 14:29:43 +03:00
commit 1769946c99
24 changed files with 3762 additions and 0 deletions
+90
View File
@@ -0,0 +1,90 @@
# Default migration target: cnpg | selectel
# Override per run: TARGET=selectel ./migrate-one.sh …
# Or per list line: yc-loop-1 loopxxx selectel
TARGET="${TARGET:-cnpg}"
# CNPG target (pooler NodePort; use a node that runs a pooler pod)
CNPG_HOST="${CNPG_HOST:-95.143.178.247}"
CNPG_PORT="${CNPG_PORT:-31574}"
CNPG_SSLMODE="${CNPG_SSLMODE:-disable}"
# 1 = always use CNPG_HOST (public VIP); 0 = try pooler pod hostIP first
CNPG_PREFER_CONFIG_HOST="${CNPG_PREFER_CONFIG_HOST:-0}"
CNPG_POOLER_RW="${CNPG_POOLER_RW:-pooler-cnpg-wilix-rw}"
# Admin role for CREATE ROLE / CREATE DATABASE (kubectl --context local)
CNPG_KUBE_CONTEXT="${CNPG_KUBE_CONTEXT:-local}"
CNPG_NAMESPACE="${CNPG_NAMESPACE:-cnpg-loop-wilix}"
CNPG_CLUSTER="${CNPG_CLUSTER:-loop-cnpg-wilix-1}"
CNPG_ADMIN_SECRET="${CNPG_ADMIN_SECRET:-cnpg-vizor-admin-role-secret}"
# Selectel Managed PostgreSQL (create user/pass/db in UI = same as MM pod secret)
SELECTEL_HOST="${SELECTEL_HOST:-}"
SELECTEL_PORT="${SELECTEL_PORT:-5432}"
SELECTEL_SSLMODE="${SELECTEL_SSLMODE:-require}"
# Source (YC MDB) SSL for pg_dump inside transfer Job
SRC_SSLMODE="${SRC_SSLMODE:-disable}"
# Source Mattermost installs
SOURCE_NS="${SOURCE_NS:-loop}"
JOB_NS="${JOB_NS:-loop}"
# Pin minor to avoid pg_dump/psql \\restrict mismatches across floating :15 tags
PG_IMAGE="${PG_IMAGE:-postgres:15.8}"
JOB_TTL_SECONDS="${JOB_TTL_SECONDS:-86400}"
# pgxfer Job resources (cluster often tight on memory)
XFER_CPU_REQUEST="${XFER_CPU_REQUEST:-200m}"
XFER_CPU_LIMIT="${XFER_CPU_LIMIT:-2}"
XFER_MEMORY_REQUEST="${XFER_MEMORY_REQUEST:-512Mi}"
XFER_MEMORY_LIMIT="${XFER_MEMORY_LIMIT:-2Gi}"
# migrate-list parallelism
PARALLELISM="${PARALLELISM:-1}"
# migrate-one local wait for Job (seconds). 0 = wait forever (manual monitoring).
MIGRATE_JOB_TIMEOUT="${MIGRATE_JOB_TIMEOUT:-86400}"
# On wait timeout while Job still Running: keep Job (do not delete / mark failed)
MIGRATE_KEEP_JOB_ON_TIMEOUT="${MIGRATE_KEEP_JOB_ON_TIMEOUT:-1}"
# Inside transfer Job: retry full dump|restore after short network blips (still restarts copy).
TRANSFER_MAX_ATTEMPTS="${TRANSFER_MAX_ATTEMPTS:-30}"
TRANSFER_RETRY_SLEEP_SEC="${TRANSFER_RETRY_SLEEP_SEC:-60}"
# libpq TCP keepalives (seconds) — reduces silent idle drops on long COPY/INDEX
PG_KEEPALIVES_IDLE="${PG_KEEPALIVES_IDLE:-30}"
PG_KEEPALIVES_INTERVAL="${PG_KEEPALIVES_INTERVAL:-10}"
PG_KEEPALIVES_COUNT="${PG_KEEPALIVES_COUNT:-9}"
# Transfer mode:
# stream — pg_dump | psql (default; retry = full re-dump from MDB)
# file — pg_dump | tee >(zstd>PVC) | psql; on blip re-restore from file (no MDB re-dump)
TRANSFER_MODE="${TRANSFER_MODE:-stream}"
# file-mode volume: pvc | emptydir (emptydir = node disk; survives blips inside same pod only)
DUMP_VOLUME="${DUMP_VOLUME:-pvc}"
DUMP_PVC_SIZE="${DUMP_PVC_SIZE:-80Gi}"
DUMP_STORAGE_CLASS="${DUMP_STORAGE_CLASS:-yc-network-ssd}"
DUMP_EMPTYDIR_SIZE_LIMIT="${DUMP_EMPTYDIR_SIZE_LIMIT:-50Gi}"
# zstd | gzip | none (postgres:15.8 image already has zstd + gzip)
DUMP_COMPRESS="${DUMP_COMPRESS:-zstd}"
DUMP_COMPRESS_LEVEL="${DUMP_COMPRESS_LEVEL:-3}"
# Keep PVC + dump after success (1) so you can re-restore manually
DUMP_KEEP_PVC="${DUMP_KEEP_PVC:-1}"
# cutover-one: MM needs long plugin sync after DB switch
CUTOVER_LIVENESS_INITIAL_DELAY="${CUTOVER_LIVENESS_INITIAL_DELAY:-600}"
CUTOVER_LIVENESS_FAILURE_THRESHOLD="${CUTOVER_LIVENESS_FAILURE_THRESHOLD:-60}"
CUTOVER_READINESS_INITIAL_DELAY="${CUTOVER_READINESS_INITIAL_DELAY:-120}"
CUTOVER_READINESS_FAILURE_THRESHOLD="${CUTOVER_READINESS_FAILURE_THRESHOLD:-60}"
CUTOVER_MEMORY_LIMIT="${CUTOVER_MEMORY_LIMIT:-4Gi}"
CUTOVER_MEMORY_REQUEST="${CUTOVER_MEMORY_REQUEST:-512Mi}"
CUTOVER_CPU_REQUEST="${CUTOVER_CPU_REQUEST:-200m}"
# wait loop: attempts * sleep (default ~30 min)
CUTOVER_WAIT_ATTEMPTS="${CUTOVER_WAIT_ATTEMPTS:-180}"
CUTOVER_WAIT_SLEEP_SEC="${CUTOVER_WAIT_SLEEP_SEC:-10}"
# kill idle CNPG backends left by crashed MM/session-pooler clients
CUTOVER_STALE_IDLE_MINUTES="${CUTOVER_STALE_IDLE_MINUTES:-5}"
# Files relative to this directory
TRANSFER_LIST="${TRANSFER_LIST:-transfer-list.txt}"
DONE_FILE="${DONE_FILE:-done.txt}"
FAILED_FILE="${FAILED_FILE:-failed.txt}"
# Unified migration table (source of truth for status / sizes / batches)
REGISTRY_FILE="${REGISTRY_FILE:-registry.tsv}"
LOG_DIR="${LOG_DIR:-logs}"