diff --git a/proxmox/README.md b/proxmox/README.md index 7237f91..5a25abf 100644 --- a/proxmox/README.md +++ b/proxmox/README.md @@ -331,6 +331,9 @@ ssh claude@100.95.55.51 | `scripts/rman_backup*.bat` | Scripturi RMAN pentru backup Windows | | `scripts/transfer_backups.ps1` | Transfer backup-uri către storage | | `scripts/*-proxmox.sh` | Scripturi monitorizare din Proxmox | +| `scripts/deploy.sh` | **Deploy scripturi pe noduri + VM 109** (rulează din repo) | +| `scripts/vm109-patch-window.sh` | Fereastră lunară Windows Update pe VM 109 | +| `scripts/check_servicing.ps1` | Guard servicing înainte de restore (guest) | **Quick Start:** ```bash @@ -341,6 +344,16 @@ ssh claude@100.95.55.51 /mnt/e/proiecte/ROMFASTSQL/proxmox/vm109-windows-dr/scripts/weekly-dr-test-proxmox.sh ``` +**Deploy modificări** (scripturile de mai sus rulează pe noduri, nu din repo): +```bash +cd proxmox/vm109-windows-dr/scripts +./deploy.sh --check # ce diferă față de noduri, fără să copieze +./deploy.sh # copiază pe pvemini + pveelite +./deploy.sh --guest # + scripturile PowerShell pe VM 109 +./deploy.sh --help # distribuția pe noduri și ce verifică +``` +Detalii: `vm109-windows-dr/README.md`, secțiunea **Deploy**. + --- ### VM 201 - Windows 11 @@ -458,6 +471,9 @@ ssh root@10.0.20.201 "qm snapshot 302 pre-test --description 'Before ROA test'" - **Configurez RMAN backup** → `vm109-windows-dr/README.md` - **Monitorizez backup-uri** → `vm109-windows-dr/scripts/oracle-backup-monitor-proxmox.sh` - **Test DR săptămânal** → `vm109-windows-dr/scripts/weekly-dr-test-proxmox.sh` +- **Am modificat un script și vreau să ajungă pe noduri** → `vm109-windows-dr/scripts/deploy.sh --check`, apoi fără `--check` +- **Testul DR a picat cu „Restore failed" fără log RMAN** → `vm109-windows-dr/README.md`, secțiunea *Windows Update pe VM 109* +- **Patching Windows pe VM 109** → `vm109-windows-dr/scripts/vm109-patch-window.sh` (prima duminică, 03:00) - **Plan testare DR** → `vm109-windows-dr/docs/PLAN_TESTARE_MONITORIZARE.md` ### Windows VM 302 - Test ROA Setup (XE + SE) diff --git a/proxmox/vm109-windows-dr/README.md b/proxmox/vm109-windows-dr/README.md index 3eeb8b2..8348485 100644 --- a/proxmox/vm109-windows-dr/README.md +++ b/proxmox/vm109-windows-dr/README.md @@ -338,6 +338,17 @@ cd proxmox/vm109-windows-dr/scripts ./deploy.sh # doar nodurile Proxmox ./deploy.sh --guest # noduri + scripturile PowerShell pe VM 109 ./deploy.sh --guest-only # doar VM 109 +./deploy.sh --help # distribuția pe noduri, verificările, contextul +``` + +Rulează `--check` întâi, mereu: e singurul mod ieftin de a vedea dacă un nod a rămas în urmă. Output tipic după un deploy reușit — doar `=` (identic) pe toate liniile: + +``` +--- 10.0.20.202 --- + = weekly-dr-test-proxmox.sh (identic) + = vm109-patch-window.sh (identic) + ~ oracle-backup-monitor-proxmox.sh (DIFERĂ) <- de copiat + ~ nightly-backup-mirror.sh (LIPSEȘTE pe nod) <- niciodată deployat ``` ### Distribuția pe noduri — asimetrică intenționat diff --git a/proxmox/vm109-windows-dr/scripts/deploy.sh b/proxmox/vm109-windows-dr/scripts/deploy.sh index 03861e1..fd8ff09 100644 --- a/proxmox/vm109-windows-dr/scripts/deploy.sh +++ b/proxmox/vm109-windows-dr/scripts/deploy.sh @@ -87,12 +87,72 @@ DO_NODES=true DO_GUEST=false CHECK_ONLY=false +usage() { + cat <<'HELP' +deploy.sh — copiază scripturile DR din repo pe destinații, cu verificări. + +UTILIZARE + ./deploy.sh [OPȚIUNE] + +OPȚIUNI + (fără) Deploy pe nodurile Proxmox (pvemini + pveelite). + --check Nu copiază nimic; raportează ce diferă sau lipsește. + Rulează-l întâi, mereu. + --guest Noduri + scripturile PowerShell pe VM 109. + --guest-only Doar VM 109. + --help, -h Textul ăsta. + +CE VERIFICĂ ÎNAINTE SĂ COPIEZE + * script în execuție — refuză suprascrierea. bash citește scriptul + incremental de pe disc, deci suprascrierea unui test DR în curs + (~18 min) corupe execuția. + * CRLF — bash pe Linux răspunde "$'\r': command not found". + * bash -n local, apoi încă o dată pe nod după copiere (prinde + transferurile trunchiate). + * md5 — sare peste fișierele identice, ca output-ul să arate doar + ce s-a schimbat efectiv. + +DISTRIBUȚIA PE NODURI (asimetrică intenționat — nu o "repara") + ambele weekly-dr-test-proxmox.sh, vm109-patch-window.sh, + vm109-watchdog.sh — cluster-aware, urmăresc VM 109 după + un failover HA; lipsa de pe un nod = testul dispare tăcut. + Plus check_servicing.ps1 / install_updates.ps1, ca sursă + pentru deploy-ul către guest. + pveelite oracle-backup-monitor, zfs-replicate, nightly-mirror — + acolo trăiește datasetul ZFS oracle-backups. + pvemini pveelite-down-alert, failover-dr-to-pvemini, + failback-dr-to-pveelite — reacționează la CĂDEREA lui + pveelite. Pe pveelite ar fi inutile (nodul e jos) și ar + înlesni exact split-brain-ul pe care încearcă să-l prevină. + +DESPRE GUEST (--guest) + VM 109 e oprit între teste, deci scriptul îl pornește, setează + vm109-debug.flag (altfel watchdog-ul îl oprește la 60 min), copiază + prin pveelite ca jump host, verifică funcțional check_servicing.ps1 + și oprește VM-ul la loc. Dacă VM 109 rula deja, avertizează și lasă + 5 secunde pentru Ctrl-C. + +CE NU FACE + Nu atinge cron-ul. După adăugarea unui script nou: + ssh root@10.0.20.202 'crontab -l | grep -E "dr-test|patch-window|watchdog"' + +CONTEXT + proxmox/vm109-windows-dr/README.md, secțiunea "Deploy". +HELP +} + case "${1:-}" in --guest) DO_GUEST=true ;; --guest-only) DO_GUEST=true; DO_NODES=false ;; --check) CHECK_ONLY=true ;; + --help|-h) usage; exit 0 ;; "") ;; - *) echo "Utilizare: $0 [--guest|--guest-only|--check]" >&2; exit 2 ;; + *) + echo "Opțiune necunoscută: $1" >&2 + echo >&2 + usage >&2 + exit 2 + ;; esac red() { printf '\033[0;31m%s\033[0m\n' "$*"; }