3c769b1b53828bc60ae671c6559071bb17490144
8 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
d7b4007af8 |
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
|
||
|
|
8bdcb48291 |
feat(cluster): reatasare automata a adaptoarelor USB LAN dupa reset USB
Adaptoarele Realtek RTL8156 (r8152) sunt placa de retea principala pe DOUA noduri, nu doar pe pveelite: pve1 are enx6c1ff759e2cb ca bridge-port, exact aceeasi configuratie si aceeasi vulnerabilitate. pvemini e in regula, are Intel igc pe PCIe. Defectul nu e resetul USB in sine, ci ca interfata recreata nu mai ajunge inapoi in vmbr0: e declarata "inet manual", fara auto si fara allow-hotplug, deci se ridica doar ca efect secundar la boot. Nodul ramane pornit si invizibil, la nesfarsit - 16 ore pe pveelite in noaptea asta, plus inca un reset azi la 10:31, in timp ce lucram la asta. Regula udev prinde reaparitia interfetei si porneste o unitate systemd care da ifreload -a. Am ales ifreload, nu ifup, din doua motive: interfata e port de punte si doar ifreload reface legatura cu vmbr0, si e comanda verificata in teren - exact ea a readus pveelite in retea de doua ori azi. Doua capcane platite, amandoua consemnate in fisiere ca sa nu se reia: 1. Prefixul 70- NU functioneaza. ID_NET_DRIVER e populat abia de 80-net-setup-link.rules, deci la 70- variabila e goala si regula nu se potriveste - tacut, fara nicio eroare. udevadm test citea fisierul, dar RUN-ul nu aparea in lista finala. Prima rulare a testului a "reusit" doar pentru ca a lucrat plasa de siguranta la 90 s, nu regula. Cu 99-, revenirea e in 8 secunde. 2. PowerShell inghite ghilimelele cand paseaza argumente catre ssh, iar nodul primea [ = r8152 ] in loc de [ "$d" = r8152 ]. Scripturile remote se trimit acum codificate base64, nu prin niveluri de citare. Testat cu reset USB real pe pveelite (deautorizare/reautorizare pe magistrala, adica exact ce face controllerul cand cedeaza singur): revenire in 8 secunde, unitatea usb-lan-hotplug@eth0.service pornita si terminata cu succes. Instanta e eth0 pentru ca evenimentul add precede redenumirea in enxMAC - unitatea ignora %I si reaplica toata configuratia, deci nu conteaza. 8 secunde e sub tokenul corosync de 10 s, deci un reset USB nu ar mai trebui nici macar sa scoata nodul din cluster. Testul isi armeaza singur o plasa de siguranta - ifreload -a programat la 90 s - ca o regula gresita sa nu ceara drum pana la nod. A si folosit, la prima rulare. Pe pve1 am instalat fara testul distructiv, acolo ruleaza CT 101 si CT 110; verificat neinvaziv cu udevadm test. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VAEUqrv26jCM5KwAPtkHb8 |
||
|
|
5e31d975df |
docs(cluster): pveelite - cauza confirmata, resetul adaptorului USB LAN
Nodul nu s-a oprit niciodata. La verificarea de azi avea uptime 17h46m, cu boot
pornit la 27.08 ora 16:03:06 - a mers toata noaptea, fara retea. Jurnalul
continua cu 58.454 de linii dupa 17:26:44, ceea ce inchide definitiv discutia
alimentare vs retea.
Vinovatul, din jurnalul kernel: Realtek RTL8156B (0bda:8156, driver r8152) pe
usb 2-3. La 16:01:45 si la 17:26:41 adaptorul s-a resetat si a fost re-enumerat.
Kernelul sterge interfata si o recreeaza - dar nimeni nu o readauga in vmbr0 si
nu o ridica, pentru ca nu exista regula de hotplug. Din acel moment masina merge
perfect si e invizibila in retea.
Partea care merita retinuta e de ce la 16:01 si-a revenit si la 17:26 nu. La
16:01 LRM-ul HA era activ, deci watchdog-ul era armat: pierderea retelei a dus la
pierderea quorumului, watchdog-mux a expirat la 16:02:39 si a resetat masina la
16:02:44 - repornire care a readus reteaua din intamplare, pentru ca la boot
interfetele se ridica prin auto. La 17:26 fence-ul mutase deja vm:109 pe pvemini,
LRM-ul era idle, watchdog-ul nearmat. Nimic nu a mai repornit masina. Singurul
lucru care "repara" defectul asta era un efect secundar, nu un mecanism proiectat
- pe un nod fara servicii HA, aceeasi defectiune devine permanenta si tacuta.
Reparat cu ifreload -a de la consola, la 09:49. Restul verificarii e curat: ZFS
ONLINE fara erori, cluster 3/3, SMART fara FAILED, replicarea se reia singura.
Reparatia de fond intra in Tier 1: eno1 exista si e functional, doar ca nu are
cablu (Link detected: no). Adaptorul USB e cauza a doua incidente pe nodul asta.
Am scris si ordinea operatiilor, pentru ca inversata te lasa fara retea cu drum
pana la nod.
Prima rulare reala a scriptului a scos la iveala trei defecte ale lui, toate
reparate aici:
- tiparele de semnatura hardware prindeau linii normale de boot ("Registered
thermal governor", "NMI watchdog: Enabled", "EDAC MC: Ver: 3.0.0") si produceau
un verdict de defect hardware care contrazicea concluzia corecta din acelasi
bilant. Strans tiparele si filtrat prin -p warning; verificat pe nod: 0
potriviri.
- LRM idle era raportat ca "stare neclara". E starea normala a unui nod fara
servicii HA - iar scriptul spune acum explicit ca idle inseamna watchdog
nearmat, adica exact motivul pentru care caderea de la 17:26 nu s-a auto-reparat.
- Tailscale era raportat [ok] desi e delogat: systemctl is-active zice active, dar
tailscale status zice "Logged out". De aici si cele 27 de zile de offline.
Consemnat si raspunsul la intrebarea cu magic packet, cu MAC-urile ambelor
interfete, ca sa nu se reia: WoL nu ar fi ajutat oricum, masina nu era oprita.
Dupa mutarea pe eno1 devine insa realmente utilizabil.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VAEUqrv26jCM5KwAPtkHb8
|
||
|
|
c67e7d8361 |
docs(cluster): pveelite are LAN pe USB - a doua ipoteza pentru caderea de ieri
Intrebarea "nu-l putem trezi cu un magic packet?" a scos la iveala ceva ce schimba diagnosticul, nu doar raspunsul la ea. Pe WoL, pe scurt: nu se poate nici macar incerca. MAC-ul lui pveelite nu mai exista nicaieri - intrarea ARP a expirat pe pvemini (INCOMPLETE), pe pve1 (FAILED), in tabela statiei de admin si pe LXC-urile de pe LAN; nodurile au IP static, deci nu exista lease DHCP; in documentatie nu e consemnat. Raman tabela routerului sau citirea fizica de pe nod. Si chiar cu MAC-ul, placa de retea e pe USB, iar un dongle USB e nealimentat in soft-off, deci nu asculta dupa magic packet. Partea care conteaza insa e alta: pveelite ARE placa de retea pe USB, si deconectarea ei e modul de defectare deja documentat al acestui nod - incidentul 2026-04-20 a pornit exact de la un USB LAN disconnect, motiv pentru care tokenul corosync a fost marit la 10 s. Un nod care si-a pierdut adaptorul de retea arata din exterior identic cu unul oprit: fara ping, fara ARP, fara corosync, fara SSH. Toate observatiile din incident sunt compatibile cu ambele scenarii, iar eu scrisesem doar unul. Pentru 16:01 dovezile inclina in continuare spre repornire - curba de memorie din RRD se reseteaza (2,43 GB la 16:00 -> 2,10 GB la 16:30, sub valoarea de dupa boot) si NFS-ul se reataseaza. Pentru 17:26 nu exista niciun indiciu echivalent: nodul pur si simplu a incetat sa fie vizibil, ceea ce o deconectare USB explica la fel de bine ca o pierdere de alimentare. Am slabit corespunzator formularile din TL;DR si din cronologie, unde afirmasem repornirea ca fapt. Consecinta practica, pusa in document ca avertisment inainte de orice altceva: prima observatie la fata locului e daca masina merge - ventilatoare, LED-uri, imagine. Daca e pornita, nu a fost o cadere de alimentare, jurnalul e intact si reparatia e la dongle, cablu sau portul de switch. Nu apasa butonul de power inainte sa te uiti. In script, pasul 1 nu mai citeste boot-urile dupa index - indexurile difera intre cele doua scenarii si ar fi dus la concluzii gresite. Acum taie jurnalul dupa ora si pune intai testul decisiv: exista intrari dupa 17:26:44? Daca da, masina a mers mai departe si a cazut doar reteaua, iar verdictul si remediile se schimba complet. Adaugat si un bloc de diagnostic pentru adaptorul USB (interfete, drivere, lsusb, deconectari si evenimente de link in jurnalul kernel). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VAEUqrv26jCM5KwAPtkHb8 |
||
|
|
636d83b883 |
docs(cluster): incident 2026-08-27 pveelite mort + verificarea de la revenire
pveelite s-a resetat singur la 16:01 si a murit definitiv la 17:26, pe o masina complet idle (CPU 0,4%, load 0,10, RAM 2,15 din 15,3 GB). E inaccesibil si la nivel L2 - ip neigh raporteaza FAILED - deci diagnosticul nu se poate duce mai departe de la distanta. Ce exclud dovezile: nu e resurse (RRD-ul de pe pvemini arata nodul inactiv), nu e retea (niciun flap knet in 7 zile in afara zilei de azi, pve1 si pvemini stabile de la 13:20), nu e UPS (OL, baterie 100%, input 239,6 V), nu e comanda de la noi (singura rulare ups-shutdown de azi a fost dry-run, iar in jurnal nu exista niciun poweroff catre .202). Ramane alimentarea sau hardware-ul. Oprirea de la pranz a fost planificata, nu o cadere: qmshutdown:303 de la root@pam la 12:25, statia de admin conectata la 12:28:59, poweroff curat pe toate trei la 12:33-12:36. pveelite a revenit normal la 13:20 si a mers 2h40m. Cedarea vine deci dupa ciclul de oprire-pornire, ceea ce intareste ipoteza de alimentare. Impactul pe productie e zero - pe nod nu era decat CT 301, care e template oprit, iar vm:109 era oprit si a fost recuperat curat pe pvemini de fence la 17:28. Replicarea catre pve1 e intacta si la zi (RPO 15 min respectat). Ce ramane in aer: clusterul sta pe 2 voturi din 3, fara marja, si replicarea catre pveelite e oprita pe toate cele 9 job-uri. Trei lucruri au mers pentru ca au fost reparate dupa aprilie: fence-ul a recuperat un singur serviciu si i-a respectat starea oprita, consolidarea sarcinii pe pvemini/pve1 a facut caderea un non-eveniment, iar alerta a plecat pe email la 17:31. Scriptul de verificare se ruleaza cand nodul e pornit fizic la loc. Ordinea nu e intamplatoare - intai de ce a cazut, din jurnalul boot-urilor care abia acum devin citibile, si abia apoi starea. Daca jurnalul e tacut inainte de ambele caderi, scriptul NU declara nodul sanatos: da verdict de alimentare/hardware si cere testarea sursei si a memoriei inainte ca pveelite sa fie iar tinta de failover. Exact capcana din 2026-04-20, unde pvemini a repornit singur si parea in regula. Verificat pe clusterul viu: cei trei parseri (voturi quorum, job-uri de replicare esuate, stare LRM) intorc 2, 9 si "LRM mort", adica starea reala de acum. Doua lucruri colaterale, consemnate in document, nu rezolvate aici: tailscaled e mort pe pveelite de 27 de zile, deci nu exista acces out-of-band, iar textul alertei pveelite-down-alert.sh trimite la un export NFS care nu mai e in storage.cfg. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VAEUqrv26jCM5KwAPtkHb8 |
||
|
|
730ce94fac |
feat(cluster): varianta PowerShell a scripturilor de oprire/repornire
Statia de admin e Windows si nu ruleaza .sh direct: `bash` din PATH e cel din WSL, cu alt filesystem si alta configuratie de chei SSH. Adaug echivalentele native PowerShell. - cluster-shutdown.ps1 / cluster-startup.ps1, aceeasi logica si aceleasi garantii ca variantele bash - folosesc clientul OpenSSH din Windows, deja prezent in System32 - compatibile PowerShell 5.1: fara &&/||, fara ternar, fara ?., fara -AsHashtable; ping prin System.Net.NetworkInformation.Ping, nu Test-Connection (WMI, lent si des blocat) - nu redirecteaza stderr-ul lui ssh: in 5.1 asta transforma fiecare linie intr-un ErrorRecord si strica $LASTEXITCODE chiar cand comanda a reusit - parsarea `pct list` / `qm list` se face in PowerShell, nu prin awk remote, ca sa nu se incurce interpolarea $1/$2 din stringurile PowerShell - scriu acelasi format de fisier de stare ca variantele bash, deci poti opri cu una si porni cu cealalta Ambele testate cu -DryRun pe clusterul live, rezultat identic cu bash. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RRyaDj39hPQ89SZS6URRpS |
||
|
|
3ae491f8f2 |
feat(cluster): scripturi de oprire si repornire controlata a clusterului
cluster-shutdown.sh / cluster-startup.sh — automatizeaza procedura din docs/oprire-planificata-cluster.md. Ruleaza de pe statia de admin prin SSH, nu de pe un nod: nodul care se opreste ultimul nu poate raporta rezultatul, iar la pornire scriptul trebuie sa astepte nodurile din afara. Decizii importante: - guest-urile din HA se opresc/pornesc cu `ha-manager set --state`, NU cu pct/qm shutdown; din CLI acestea nu actualizeaza state-ul HA si CRM-ul poate reporni guest-ul in mijlocul opririi - apartenenta la HA se descopera dinamic din `ha-manager config` - ordinea de oprire e pe dependente: consumatorii intai, CT 108 Oracle ultimul, cu `shutdown immediate` in baza inainte de a opri containerul - shutdown-ul salveaza local ce rula; startup-ul porneste exact atat, ca sa nu reporneasca VM-uri oprite intentionat - NEVER_AUTOSTART (109, 301, 310) protejeaza fallback-ul fara fisier de stare: VM 109 e DR-ul a carui pornire nedorita a declansat incidentul 2026-04-20, restul sunt template-uri - garda impotriva rularii de pe un nod sau din CT 171 (s-ar sinucide) - ping_host() portabil Git Bash / Linux Corectat in runbook: ordinea de oprire spunea "Oracle primul", gresit ca ordine de dependente — VM 201 si CT 104 consuma baza. Ambele testate cu --dry-run pe clusterul live. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RRyaDj39hPQ89SZS6URRpS |
||
|
|
3ded5d3f2f |
docs(cluster): incident pvemini backup SSD hang + thermal monitoring
Documenteaza incidentul Kingston SNV3S2000G hang la 2026-04-30 (Sensor 2
74°C → emergency mode + restart loop) si masurile aplicate: distantare
temporala backup-uri par/impar, mutare CT 101+110 pe pve1 backup-ssd,
nofail in fstab, hardware watchdog iTCO_wdt, monitoring CSV la 30 min.
Adauga scripturile /opt/scripts/kingston-thermal-{monitor,report}.sh
pentru tracking trend si alertare la depasirea pragurilor termale.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|