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:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user