docs(dr): --help in deploy.sh + referinte in indexul master

deploy.sh era documentat doar in README-ul VM 109; nu aparea nicaieri in
proxmox/README.md, deci nu il gaseai daca nu stiai deja ca exista. Iar
`deploy.sh --help` raspundea cu o singura linie pe stderr si exit 2 - o
unealta documentata trebuie sa se poata explica singura.

- deploy.sh: --help / -h cu utilizare completa (optiuni, ce verifica inainte
  sa copieze, distributia pe noduri si de ce e asimetrica, ce face --guest cu
  VM 109 oprit, si faptul ca nu atinge cron-ul). Exit 0 pentru --help, exit 2
  cu mesaj pe stderr pentru optiune necunoscuta.
- proxmox/README.md: deploy.sh, vm109-patch-window.sh si check_servicing.ps1
  in tabelul de fisiere, bloc "Deploy modificari" in Quick Start, plus intrari
  in "Vreau sa..." pentru deploy, pentru patching si pentru simptomul
  "Restore failed fara log RMAN".
- README VM 109: --help in lista de comenzi si un exemplu de output --check,
  ca sa se vada diferenta dintre "DIFERA" si "LIPSESTE pe nod".

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:46:08 +03:00
parent d19c649ee9
commit 7b0224c276
3 changed files with 88 additions and 1 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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' "$*"; }