diff --git a/proxmox/README.md b/proxmox/README.md index 8ba970a..2e5a41d 100644 --- a/proxmox/README.md +++ b/proxmox/README.md @@ -7,8 +7,10 @@ proxmox/ ├── README.md # Acest fișier (index principal) │ ├── cluster/ # Infrastructură cluster Proxmox -│ ├── README.md # Ghid SSH și administrare cluster +│ ├── README.md # Ghid SSH, HA, corosync tuning, diagnostic tools, mail relay, OOM alert │ ├── cluster-ha-monitor.sh # Script monitorizare HA +│ ├── incidents/ # Post-mortems incidente cluster +│ │ └── 2026-04-20-cluster-outage.md # Cascadă OOM pveelite + USB LAN watchdog │ └── ups/ # Sistem UPS pentru cluster │ ├── README.md │ ├── docs/ diff --git a/proxmox/cluster/README.md b/proxmox/cluster/README.md index 7210cac..410806a 100644 --- a/proxmox/cluster/README.md +++ b/proxmox/cluster/README.md @@ -483,11 +483,213 @@ systemctl restart pveproxy --- +## High Availability (HA) + +Cluster-ul folosește HA pentru failover automat al containerelor critice. Configurația a fost revizuită după incidentul 2026-04-20 (vezi `incidents/2026-04-20-cluster-outage.md`). + +### Grupuri HA + +``` +group: ha-group-main → pvemini (primar 100), pveelite (50), pve1 (33) +group: ha-group-elite → pveelite (primar 100), pve1 (33), pvemini (50) +``` + +### Resurse HA active + +| Resursă | Grup | Home node | Max restart | Max relocate | Notă | +|---------|------|-----------|-------------|--------------|------| +| ct:100 portainer | ha-group-main | pvemini | 3 | 3 | | +| ct:101 minecraft | ha-group-elite | pvemini | 3 | 3 | Rulează pe pveelite | +| ct:104 flowise | ha-group-main | pvemini | 3 | 2 | Limite adăugate 2026-04-20 | +| ct:105 test | ha-group-elite | pvemini | - | - | Stopped | +| ct:106 gitea | ha-group-main | pvemini | 3 | 3 | | +| ct:108 central-oracle | ha-group-main | pvemini | 3 | 2 | Limite adăugate 2026-04-20 | + +**VM 109 (oracle-dr-windows) NU mai e în HA** — scos intenționat 2026-04-20 după buclă OOM. Pornit exclusiv de scriptul DR test sâmbăta 06:00. + +### Verificare HA + +```bash +ssh root@10.0.20.201 "ha-manager status" +ssh root@10.0.20.201 "ha-manager config" +``` + +### Modificare limite HA (exemplu) + +```bash +ha-manager set ct:108 --max_restart 3 --max_relocate 2 +``` + +--- + +## Corosync Tuning + +După incidentul 2026-04-20 (crash pveelite din USB LAN disconnect → pierdere cvorum → watchdog reset), tokenul corosync a fost mărit pentru a tolera glitch-uri scurte de rețea. + +**Config curent** (`/etc/pve/corosync.conf`, `config_version: 16`): + +``` +totem { + token: 10000 + token_retransmits_before_loss_const: 10 +} +``` + +Impact: cluster-ul așteaptă **10 secunde** înainte să declare un nod mort (default era 1 sec). Tolerează USB disconnect scurt pe pveelite fără să forțeze reboot. + +Verificare: +```bash +ssh root@10.0.20.201 "corosync-cmapctl | grep 'totem.token '" +# runtime.config.totem.token (u32) = 10650 +# totem.token (u32) = 10000 +``` + +--- + +## Diagnostic Tools (pvemini) + +Instalate 2026-04-20 pentru a prinde cauza crash-ului din 00:23 (care nu a lăsat niciun log). + +### rasdaemon — MCE + PCIe AER monitoring + +```bash +# Verificare erori hardware istorice +ssh root@10.0.20.201 "ras-mc-ctl --summary" +# Memory errors / PCIe AER errors / Extlog / MCE +``` + +### netconsole — kernel logs către pve1 + +pvemini trimite log-uri kernel via UDP către pve1. Dacă pvemini crashează hard, ultimele linii kernel sunt captate pe pve1. + +```bash +# Logs pre-crash pe pve1 +ssh root@10.0.20.200 "tail /var/log/netconsole-pvemini.log" + +# Status serviciu listener +ssh root@10.0.20.200 "systemctl status netconsole-receiver" +``` + +Config pe pvemini: `/etc/modules-load.d/netconsole.conf` +Config pe pve1: `/etc/systemd/system/netconsole-receiver.service` + `/var/log/netconsole-pvemini.log` + +### kdump-tools — captură kernel crash dump + +```bash +# Verificare configurare +ssh root@10.0.20.201 "cat /proc/cmdline | grep crashkernel" +ssh root@10.0.20.201 "systemctl is-active kdump-tools" + +# La următorul crash, dump-ul va fi în: +ssh root@10.0.20.201 "ls /var/crash/" +``` + +Parametru: `crashkernel=128M` în `/etc/kernel/cmdline` (Proxmox folosește systemd-boot prin `proxmox-boot-tool`, nu GRUB). + +### kernel.panic auto-reboot + +```bash +ssh root@10.0.20.201 "sysctl kernel.panic" +# kernel.panic = 10 → auto-reboot după 10s la kernel panic +``` + +--- + +## Mail Notifications + +Toate 3 nodurile trimit mail prin `mail.romfast.ro:465` cu autentificare SMTP SASL (cont `ups@romfast.ro`). + +### Configurare Postfix + +Config în `/etc/postfix/main.cf` pe fiecare nod: +``` +relayhost = [mail.romfast.ro]:465 +smtp_sasl_auth_enable = yes +smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd +smtp_sasl_security_options = noanonymous +smtp_tls_wrappermode = yes +smtp_tls_security_level = encrypt +``` + +Credentiale în `/etc/postfix/sasl_passwd` (permisiuni 600). + +### Test rapid + +```bash +ssh root@10.0.20.201 "echo 'test' | mail -r 'ups@romfast.ro' -s 'test $(hostname)' mmarius28@gmail.com" +ssh root@10.0.20.201 "journalctl -u postfix@- --since '1 min ago' | grep status=" +# Trebuie să vezi: status=sent (250 OK ...) +``` + +### Dependințe + +- `libsasl2-modules` (instalat 2026-04-20 — fără el: `SASL authentication failure: No worthy mechs found`) + +--- + +## OOM Alerting + +Cron pe fiecare nod verifică la 1 minut dacă au avut loc OOM-kills. Dacă da, trimite mail cu detalii. + +### Configurare + +- Script: `/opt/scripts/oom-alert.sh` pe fiecare nod (pve1, pvemini, pveelite) +- Cron: `* * * * * /opt/scripts/oom-alert.sh` +- Mail destinat: `mmarius28@gmail.com` (de la `ups@romfast.ro`) + +### Verificare script instalat + +```bash +for ip in 10.0.20.200 10.0.20.201 10.0.20.202; do + ssh root@$ip "crontab -l | grep oom-alert" +done +``` + +### Test simulare + +```bash +# Generează OOM kill mesaj fals (NU omoară nimic, doar log) +ssh root@10.0.20.202 "logger -t kernel -p kern.warn 'Killed process 99999 (fake-test) total-vm:1kB'" +# Așteaptă 1 min, verifică inbox +``` + +--- + +## Swap pe pveelite + +Adăugat 2026-04-20 ca insurance împotriva OOM cascade (pveelite are doar 16 GB RAM). + +- Swap device: `/dev/zvol/rpool/swap` (ZFS zvol 8 GB) +- Mount: `/etc/fstab` +- swappiness: 10 (folosește swap doar sub presiune reală) + +### Verificare + +```bash +ssh root@10.0.20.202 "swapon --show; sysctl vm.swappiness" +``` + +### Recreare (dacă e nevoie) + +```bash +zfs create -V 8G -b 4K -o compression=zle -o logbias=throughput \ + -o sync=always -o primarycache=metadata -o secondarycache=none \ + rpool/swap +mkswap -f /dev/zvol/rpool/swap +echo '/dev/zvol/rpool/swap none swap sw 0 0' >> /etc/fstab +swapon -a +``` + +--- + ## Documentație Asociată ### Index Principal - **README.md** - `../README.md` - Index complet documentație Proxmox +### Incidents +- **2026-04-20 Cluster Outage:** `incidents/2026-04-20-cluster-outage.md` — post-mortem complet + plan prevenție + ### LXC Containers - **LXC 108 - Oracle Database:** `../lxc108-oracle/README.md` @@ -495,6 +697,7 @@ systemctl restart pveproxy - **VM 201 - Windows 11:** `../vm201-windows/README.md` - SSL Certificates: `../vm201-windows/docs/vm201-certificat-letsencrypt-iis.md` - Troubleshooting: `../vm201-windows/docs/` +- **VM 109 - Oracle DR Windows:** `../vm109-windows-dr/README.md` — NU mai e în HA din 2026-04-20 ### Cluster Resources (acest director) - **HA Monitor:** `cluster-ha-monitor.sh` @@ -502,6 +705,6 @@ systemctl restart pveproxy --- -**Ultima actualizare:** 2026-01-27 +**Ultima actualizare:** 2026-04-20 **Autor:** Marius Mutu **Proiect:** ROMFASTSQL - Proxmox Infrastructure Documentation \ No newline at end of file diff --git a/proxmox/vm109-windows-dr/README.md b/proxmox/vm109-windows-dr/README.md index 8825796..7d1160b 100644 --- a/proxmox/vm109-windows-dr/README.md +++ b/proxmox/vm109-windows-dr/README.md @@ -4,6 +4,26 @@ **VMID:** 109 **Rol:** Disaster Recovery pentru Oracle Database (backup RMAN de pe server Windows extern) +## ⚠️ Important — VM 109 NU este în HA (din 2026-04-20) + +După incidentul 2026-04-20 (vezi `../cluster/incidents/2026-04-20-cluster-outage.md`), VM 109 a fost scos din HA cu `ha-manager remove vm:109`. Motivele: + +- VM 109 este un DR test VM, nu un serviciu live +- Scriptul DR test de sâmbătă (`scripts/weekly-dr-test-proxmox.sh`) pornește/oprește VM 109 manual cu `qm start/stop` +- Cu HA activ, un bug `set -e` în script a lăsat VM 109 pornit 2.5 zile, apoi la crashul pvemini HA a relocat VM 109 pe pveelite (16 GB) → OOM cascade + +**Efecte:** +- VM 109 NU mai e repornit automat la crash node +- VM 109 NU se mai mută de pe pvemini +- VM 109 pornește DOAR la invocarea scriptului DR sau manual cu `qm start 109` +- Scriptul DR are acum `trap cleanup_vm EXIT` care garantează `qm stop 109` la orice ieșire + +**Verificare status:** +```bash +ssh root@10.0.20.201 "qm status 109" # trebuie stopped +ssh root@10.0.20.201 "ha-manager status | grep 109 || echo 'nu e în HA'" +``` + --- # 🛡️ Oracle DR System - Complete Architecture