feat(cluster): corosync ring1 pe insula, test de repornire cu WoL, fixuri in scripturi

Ring1 aplicat si verificat pe cluster live: config_version 17, ring1_addr pe
10.10.10.20x la fiecare nod, interface{linknumber:1}. Validat cu `corosync -t`
inainte de instalare. Testat prin oprirea reala a lui ring0 pe pveelite: link0
disconnected, link1 connected, cvorum 3/3 neatins - exact scenariul care pe
27 august a lasat nodul mort 16 ore.

Test de repornire completa a clusterului, cu Wake-on-LAN (trezire in ~15s).
Insula a urcat singura pe toate trei nodurile; ipoteza enumerarii tarzii a
USB-ului nu s-a materializat. Unealta noua: wake-cluster.ps1.

Testul a scos la iveala o linie ramasa in /etc/fstab pe pve1 si pveelite, care
monta storage-ul NFS de pe IP-ul de productie inaintea lui pvestatd. Backup-ul
trecea tacut pe reteaua gresita, cu storage.cfg corect. cluster-startup verifica
acum asta automat, impreuna cu IP-urile de insula si conectivitatea reala.

Patru bug-uri gasite prin rulare pe cluster live:

- sonda Oracle nu avea timeout: un sqlplus agatat pe o instanta in pornire a
  blocat cluster-startup 14 minute, fara mesaj, cu propriul prag de 600s
  nefolosit, fiindca bucla n-a apucat o iteratie;
- `bash -c` in loc de `bash -lc`: sqlplus lipsea din PATH, deci baza nu se
  oprea si containerul s-ar fi inchis peste ea;
- PowerShell 5.1 pierde ghilimelele duble catre exe-uri native, deci comanda
  ajungea rupta pe nod - trecut pe trimitere codificata base64;
- backup-ul de crontab si fisierul de stare se rescriau la o a doua rulare,
  lasand monitorizarea oprita permanent si lista de repornit goala.

Documentatia de oprire planificata pornea de la o afirmatie devenita falsa
("nu exista datacenter.cfg") si de la o comanda care ar fi adaugat o a doua
linie `ha:`. Actualizata, impreuna cu inventarul de guest-uri (VM 304 lipsea
din toate listele de ordine si cadea in maturarea de dupa Oracle).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RJFQZcA7uerXRaL1NrsXpS
This commit is contained in:
Marius
2026-08-29 21:13:34 +03:00
parent fd2105d1f9
commit d7b4007af8
10 changed files with 801 additions and 113 deletions

View File

@@ -3,22 +3,31 @@
Instaleaza reatasarea automata a adaptoarelor USB LAN dupa un reset USB.
.DESCRIPTION
Adaptoarele Realtek RTL8156 (driver r8152) folosite ca placa de retea
principala pe pve1 si pveelite se reseteaza singure pe magistrala USB.
Kernelul sterge interfata si o recreeaza, dar nimeni nu o readauga in vmbr0:
in /etc/network/interfaces ea e declarata "inet manual", fara "auto" si fara
"allow-hotplug", deci se ridica doar ca efect secundar, la boot.
Consecinta e un nod care merge perfect si e invizibil in retea, pe termen
nelimitat. Pe pveelite asta a insemnat 16 ore de tacere in noaptea de 27 spre
28 august 2026, plus inca un reset a doua zi la 10:31.
Adaptoarele Realtek RTL8156 (driver r8152) de pe pve1 si pveelite se
reseteaza singure pe magistrala USB. Kernelul sterge interfata si o
recreeaza, dar nimeni nu o reconfigureaza: se ridica doar ca efect secundar,
la boot.
Scriptul instaleaza o regula udev care prinde reaparitia interfetei si o
unitate systemd care reaplica configuratia de retea. Detecteaza singur ce
noduri au adaptor r8152 si le sare pe celelalte - pvemini are placa Intel
igc pe PCIe si nu are nevoie.
unitate systemd care reaplica configuratia de retea (ifreload -a).
Detecteaza singur ce noduri au adaptor r8152 si le sare pe celelalte -
pvemini are placa Intel pe PCIe si nu are nevoie.
CE S-A SCHIMBAT PE 2026-08-29. Cand a fost scris scriptul, dongle-ul USB era
portul puntii vmbr0, adica placa de retea PRINCIPALA - de-aia un reset USB
lasa nodul complet invizibil (16 ore de tacere pe pveelite in noaptea de 27
spre 28 august 2026). Intre timp vmbr0 a fost mutat pe interfata onboard, iar
dongle-ul a ramas doar cu IP-ul retelei dedicate de cluster
(10.10.10.200 / 10.10.10.202), declarat acum "auto ... inet static".
Regula ramane la fel de utila, dar miza s-a schimbat: un reset USB nu mai ia
nodul offline, ci opreste tacut replicarea ZFS si storage-ul NFS
backup-pvemini. In plus, fiind pe ACTION=="add", regula acopera si cazul in
care USB-ul se enumereaza tarziu la boot, dupa networking.service - singurul
risc ramas pentru insula. Neconfirmat inca la o repornire reala.
Context: ../incidents/2026-08-27-pveelite-down.md
../docs/switch-2.5g-dedicat-noduri.md
RULEAZA DE PE STATIA DE ADMIN. SSH intre nodurile Proxmox trece prin
Tailscale si cere autentificare interactiva.
@@ -138,13 +147,28 @@ done
}
Write-Info "adaptoare r8152: $($ifs -join ', ')"
# Interfata conteaza doar daca e chiar portul puntii; altfel regula e inutila.
$port = Invoke-NodeScript -Ip $ip -Script @'
sed -n 's/^[[:space:]]*bridge-ports[[:space:]]*//p' /etc/network/interfaces
# Regula e utila doar daca interfata chiar are ce sa i se reaplice: fie e
# portul puntii (configuratia dinainte de 2026-08-29), fie are propria strofa
# in /etc/network/interfaces (azi: IP-ul retelei dedicate de cluster).
# Fara niciuna, ifreload -a n-ar avea ce configura si regula n-ar folosi la nimic.
$rol = Invoke-NodeScript -Ip $ip -Script @'
port=$(sed -n 's/^[[:space:]]*bridge-ports[[:space:]]*//p' /etc/network/interfaces)
for n in /sys/class/net/*; do
i=${n##*/}
d=$(readlink -f "$n/device/driver" 2>/dev/null)
case "$d" in *r8152) ;; *) continue ;; esac
case " $port " in *" $i "*) echo "$i: port al puntii vmbr0"; continue ;; esac
if grep -qE "^[[:space:]]*(auto|allow-hotplug)[[:space:]]+$i([[:space:]]|$)" /etc/network/interfaces; then
echo "$i: strofa proprie ($(sed -n "s/^[[:space:]]*iface[[:space:]]\+$i[[:space:]]\+//p" /etc/network/interfaces | head -1)), IP: $(ip -4 -o addr show "$i" | awk '{print $4}' | tr '\n' ' ')"
else
echo "$i: NECONFIGURAT in /etc/network/interfaces"
fi
done
'@
Write-Info "bridge-ports vmbr0: $port"
if ($ifs -notcontains $port) {
Write-Warn "adaptorul USB nu e portul puntii - instalez oricum, dar verifica manual"
$rol | ForEach-Object { Write-Info $_ }
if ($rol -match 'NECONFIGURAT') {
Write-Warn "un adaptor r8152 nu e nici port de punte, nici cu strofa proprie -"
Write-Warn "regula se instaleaza, dar pentru el ifreload -a n-are ce aplica"
}
if ($DryRun) {