feat(dr): script de deploy pentru scripturile DR + documentare procedura

Pana acum deploy-ul se facea manual (`cp ... /opt/scripts/`), nedocumentat
nicaieri - de unde si fisierele weekly-dr-test-proxmox.sh.bak-* ramase pe
pveelite. deploy.sh face aceiasi pasi, dar refuza situatiile care au costat
deja timp:

- suprascrierea unui script AFLAT IN EXECUTIE: bash citeste scriptul
  incremental de pe disc, iar suprascrierea unui test DR in curs (~18 min)
  corupe executia;
- CRLF: bash pe Linux raspunde "$'\r': command not found";
- transfer trunchiat: bash -n local si inca o data pe nod dupa copiere;
- flag-ul vm109-debug.flag lasat in urma dupa deploy pe guest (dezarmeaza
  permanent watchdog-ul, exact apararea care a prins incidentul 04-20).

Distributia pe noduri e asimetrica intentionat si e codificata explicit in
script: scripturile cluster-aware (test DR, patch window, watchdog) pe ambele
noduri fiindca urmaresc VM 109 dupa failover HA; ZFS/mirror doar pe pveelite
unde traieste datasetul; alertele si failover-ul doar pe pvemini, fiindca
reactioneaza la caderea pveelite - puse pe pveelite ar fi inutile si ar
inlesni exact split-brain-ul pe care incearca sa-l previna.

Verificarea "ruleaza acum" foloseste pgrep -f '[/]opt/scripts/x.sh'.
Parantezele nu sunt cosmetice: comanda trimisa prin ssh apare ea insasi in
lista de procese, deci forma fara paranteze se gaseste pe sine si raporteaza
orice script ca fiind in executie (verificat: exit 0 vs exit 1).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BhQBTegE4PiMPPaapLHjkc
This commit is contained in:
Marius
2026-08-08 17:19:03 +03:00
parent 94758421c5
commit dabe5a34e3
2 changed files with 326 additions and 0 deletions

View File

@@ -327,6 +327,51 @@ D:\oracle\scripts\cleanup_database.cmd
ssh root@10.0.20.202 "qm stop 109"
```
## 🚀 Deploy
Repo-ul e sursa; scripturile se copiază pe destinații cu `scripts/deploy.sh`. Până în 2026-08-08 deploy-ul se făcea manual (`cp ... /opt/scripts/`), de unde și fișierele `.bak-*` rămase pe pveelite.
```bash
cd proxmox/vm109-windows-dr/scripts
./deploy.sh --check # ce diferă, fără să copieze nimic
./deploy.sh # doar nodurile Proxmox
./deploy.sh --guest # noduri + scripturile PowerShell pe VM 109
./deploy.sh --guest-only # doar VM 109
```
### Distribuția pe noduri — asimetrică intenționat
| Script | pvemini (.201) | pveelite (.202) | De ce |
|---|:---:|:---:|---|
| `weekly-dr-test-proxmox.sh` | ✅ | ✅ | cluster-aware, urmărește VM 109 după failover HA |
| `vm109-patch-window.sh` | ✅ | ✅ | idem |
| `vm109-watchdog.sh` | ✅ | ✅ | idem |
| `check_servicing.ps1`, `install_updates.ps1` | ✅ | ✅ | sursă pentru deploy-ul către guest |
| `oracle-backup-monitor-proxmox.sh` | — | ✅ | acolo e datasetul ZFS `oracle-backups` |
| `zfs-replicate-oracle-backups.sh` | — | ✅ | sursa replicării |
| `nightly-backup-mirror.sh` | — | ✅ | idem |
| `pveelite-down-alert.sh` | ✅ | — | reacționează la **căderea** pveelite |
| `failover-dr-to-pvemini.sh` | ✅ | — | rulat de operator **pe pvemini** |
| `failback-dr-to-pveelite.sh` | ✅ | — | idem |
Nu „repara" asimetria: un script de failover prezent pe nodul greșit e exact scenariul de split-brain pe care scripturile încearcă să-l prevină.
### Ce verifică deploy.sh înainte să copieze
- **script în execuție** — refuză suprascrierea; bash citește scriptul incremental de pe disc, iar suprascrierea unui test DR în curs (~18 min) corupe execuția;
- **CRLF** — `bash` pe Linux răspunde `$'\r': command not found`;
- **`bash -n`** local și î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.
Pentru guest: VM 109 e oprit între teste, deci `--guest` î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ă 5s pentru Ctrl-C.
**Cron-ul nu e atins de deploy.** După adăugarea unui script nou:
```bash
ssh root@10.0.20.202 'crontab -l | grep -E "dr-test|patch-window|watchdog"'
```
## 🐛 Troubleshooting
### ⚡ Simptome frecvente — unde te uiți întâi