Runbook nou pentru oprirea controlata a celor 3 noduri (lucrari electrice, mutare rack, mentenanta UPS) fara ca HA sa relocheze resursele si fara ca watchdog-ul sa reseteze hard nodul ramas fara quorum. Doua capcane documentate: - /etc/pve/datacenter.cfg nu exista => shutdown_policy implicit `conditional` => poweroff pe nod declanseaza FAILOVER, nu freeze - watchdog-ul face reset hard dupa ~60s pe nodul care pierde quorumul cu servicii HA inca active Corectii in failover/README.md, verificate pe clusterul live: - VM 201 ESTE in HA (grup ha-prefer-pvemini), docul spunea ca nu e - CT 108 e in ha-prefer-pvemini (pvemini:100, pve1:50, pveelite:10), nu in ha-group-main cu pveelite:50/pve1:33 - replicare CT 108 si VM 201 la */15 min, nu */5 => RPO real 15 min Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RRyaDj39hPQ89SZS6URRpS
132 lines
5.0 KiB
Markdown
132 lines
5.0 KiB
Markdown
# Failover & High Availability
|
|
|
|
Strategia HA pe cluster, separată pe nivele de criticitate.
|
|
|
|
## Rezumat resurse critice
|
|
|
|
| Resursă | Criticitate | HA automat | Replicare | RPO |
|
|
|---------|-------------|------------|-----------|-----|
|
|
| CT 108 Oracle central | Nivel 0 | Da | pveelite `*/15` min, pve1 `*/15` min | 15 min |
|
|
| VM 201 Windows roacentral | Nivel 0 | **Da** (din 2026, vezi mai jos) | pveelite `*/15` min, pve1 `*/15` min | 15 min |
|
|
| CT 171 claude-agent | Nivel 1 | Da | pveelite `*/15` min, pve1 `*/15` min | 15 min |
|
|
| CT 104 flowise | Nivel 2 | Da | zilnic 21:15 | 24h |
|
|
| CT 106 gitea | Nivel 2 | Da | `*/2` ore | 2h |
|
|
| CT 100 portainer | Nivel 2 | Da | zilnic | 24h |
|
|
|
|
## VM 201 — HA automat + procedură manuală de rezervă
|
|
|
|
> **Corectat 2026-08-27.** Docul spunea anterior că VM 201 nu este în HA. **Nu mai
|
|
> este adevărat** — verificat pe cluster live: `vm:201 (pvemini, started)`, grup
|
|
> `ha-prefer-pvemini`, `max_restart 3`, `max_relocate 2`.
|
|
|
|
VM 201 (Windows production) **este acum în HA**, grup `ha-prefer-pvemini`
|
|
(pvemini:100, pve1:50, pveelite:10). Dacă pvemini cade, CRM-ul o repornește
|
|
automat pe pve1 din ultima replicare ZFS (RPO 15 min).
|
|
|
|
Motivul pentru care a stat inițial în afara HA: la o mentenanță în care pvemini a
|
|
fost scos temporar din HA, VM 201 a migrat automat — comportament nedorit pentru
|
|
Windows production, care cere fereastră de mentenanță controlată.
|
|
|
|
**Acest risc rămâne valabil.** Pentru orice oprire planificată setează
|
|
`shutdown_policy=freeze` înainte — vezi
|
|
[Oprire planificată a clusterului](../docs/oprire-planificata-cluster.md).
|
|
|
|
Procedura manuală de mai jos rămâne validă ca **rezervă**, pentru cazul în care HA
|
|
nu reușește recovery-ul (lipsă quorum, pveelite fără RAM, replicare rămasă în urmă).
|
|
|
|
### Declanșator alertă
|
|
|
|
Cron pe pveelite verifică pvemini la fiecare minut:
|
|
- Script: `/opt/scripts/pvemini-down-alert.sh`
|
|
- După 2 minute DOWN consecutive → mail `mmarius28@gmail.com` cu comanda failover ready-to-run
|
|
|
|
### Execuție failover
|
|
|
|
Din orice sesiune SSH:
|
|
|
|
```bash
|
|
ssh root@10.0.20.202 /opt/scripts/failover-vm201.sh
|
|
```
|
|
|
|
Scriptul:
|
|
1. Verifică pvemini efectiv DOWN (ping + ssh); abort dacă răspunde
|
|
2. Verifică VM 201 nu rulează deja pe pveelite
|
|
3. Afișează ultima replicare ZFS disponibilă local
|
|
4. Cere confirmare interactivă (tastezi `DA`)
|
|
5. `qm start 201` pe pveelite
|
|
6. Trimite mail confirmare cu pași post-failover
|
|
|
|
Pentru automatizare (fără prompt):
|
|
```bash
|
|
ssh root@10.0.20.202 /opt/scripts/failover-vm201.sh --yes
|
|
```
|
|
|
|
### După revenire pvemini — script interactiv
|
|
|
|
**NU porni automat VM 201 pe pvemini.** Date posibil divergente.
|
|
|
|
```bash
|
|
ssh root@10.0.20.202 /opt/scripts/recover-vm201-to-pvemini.sh
|
|
```
|
|
|
|
Scriptul verifică:
|
|
- pvemini uptime min. 30 min + erori recente
|
|
- pvemini reachable ssh + VM 201 nu rulează deja acolo (anti split-brain)
|
|
- VM 201 running local pe pveelite
|
|
|
|
Pași executați automat (cu confirmare):
|
|
1. `qm shutdown 201` pe pveelite
|
|
2. `pvesr create-local-job 201-2 pvemini --source pveelite` + run forțat
|
|
3. `qm migrate 201 pvemini` offline
|
|
4. Cleanup job replicare inversă
|
|
5. `qm start 201` pe pvemini
|
|
|
|
Non-interactiv: adaugă `--yes`.
|
|
|
|
## CT 108 Oracle — HA automat
|
|
|
|
- Group `ha-prefer-pvemini` (pvemini:100, pve1:50, pveelite:10) — *corectat 2026-08-27,
|
|
docul spunea `ha-group-main` cu alte priorități*
|
|
- `max_restart 3, max_relocate 2`
|
|
- Replicare `*/15` min → failover automat cu RPO 15 min
|
|
- **Constrângere RAM pveelite 16 GB**: dacă pvemini cade, pveelite trebuie să aibă spațiu pentru CT 108 (8 GB) + CT 101 existent + eventual alte CT-uri HA
|
|
|
|
## CT 171 claude-agent — HA automat
|
|
|
|
- Adăugat în HA pentru acces Claude Code continuu
|
|
- Dacă pvemini cade, CT 171 pornește pe pveelite cu ultima replicare (max 15 min în urmă)
|
|
- State = workspace files din `/workspace/` — replicate ZFS
|
|
|
|
## Fișiere relevante
|
|
|
|
| Fișier | Locație | Scop |
|
|
|--------|---------|------|
|
|
| `failover-vm201.sh` | `/opt/scripts/` pe pveelite | Failover manual VM 201 pvemini → pveelite |
|
|
| `recover-vm201-to-pvemini.sh` | `/opt/scripts/` pe pveelite | Recovery interactiv VM 201 pveelite → pvemini |
|
|
| `pvemini-down-alert.sh` | `/opt/scripts/` pe pveelite | Watchdog 1 min, mail dacă pvemini DOWN 2 min |
|
|
| `oom-alert.sh` | `/opt/scripts/` pe toate nodurile | Alertă OOM kills |
|
|
|
|
## Comenzi utile
|
|
|
|
```bash
|
|
# Stare replicare
|
|
ssh root@10.0.20.201 "pvesr status"
|
|
|
|
# Stare HA
|
|
ssh root@10.0.20.201 "ha-manager status"
|
|
|
|
# Forțează replicare acum (util înainte de mentenanță)
|
|
ssh root@10.0.20.201 "pvesr run --id 108-1; pvesr run --id 201-1; pvesr run --id 171-1"
|
|
|
|
# Test script failover (dry — fără confirmare)
|
|
ssh root@10.0.20.202 "/opt/scripts/failover-vm201.sh" # va abort dacă pvemini răspunde
|
|
```
|
|
|
|
## Oprire planificată a întregului cluster
|
|
|
|
Pentru lucrări electrice, mutare rack sau mentenanță UPS — **nu folosi butonul
|
|
Shutdown direct**. Politica implicită `conditional` relochează resursele HA, iar
|
|
watchdog-ul resetează hard nodul rămas fără quorum.
|
|
|
|
→ [Oprire planificată a clusterului](../docs/oprire-planificata-cluster.md)
|