Trei lucruri gasite continuand handoff-ul de la incidentul pveelite. 1. Replicarea oracle-backups taia snapshoturile doar pe sursa. Pe destinatie nu curata nimeni, deci din 25.04 se adunasera 11.886 snapshoturi tinand 941G pe pvemini - nodul cu toata productia, ajuns la 93%. Adaugat KEEP_SNAPS_DEST=288 (72h). Dupa curatarea restantei: 93% -> 44%, 1,01T liberi. Verificat ca rularea cron urmatoare pastreaza fix 288. Stergerea pe interval (ds@a%b) prinde si snapshoturile @failback_/@init_ dintre capete, deci scriptul sterge cate unul; intervalul s-a folosit o singura data, manual, dupa ce s-a verificat ca nu exista non-repl_. 2. pvemini-down-alert.sh rula din cron fara PATH, iar ha-manager e in /usr/sbin: sectiunea "HA status" iesea goala tacut la fiecare alerta. 3. Resetarile adaptorului USB LAN nu erau intamplatoare. Un mouse optic defect se re-enumera de ~1000 de ori pe zi pe acelasi controller xHCI (0000:00:14.0) ca adaptorul de retea; tastatura de pe acelasi hub are o singura enumerare. Erorile "xhci_hcd WARN Set TR Deq Ptr" apar lipite de fiecare resetare r8152, la 3 secunde dupa cate o re-enumerare a mouse-ului. Portul mouse-ului dezactivat din sysfs ca experiment reversibil. Punctul cu exportul NFS "inexistent" din planul de preventie era alarma falsa: exportul e viu, doar ca nu e storage Proxmox. Marcat ca atare. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VAEUqrv26jCM5KwAPtkHb8
89 lines
3.5 KiB
Bash
Executable File
89 lines
3.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# Alertă când pvemini e unreachable — rulează pe pveelite din cron 1 min
|
|
# Deployed la /opt/scripts/pvemini-down-alert.sh pe pveelite
|
|
# Stateful: alertează o dată după 2 minute consecutive DOWN, reset la UP
|
|
set -euo pipefail
|
|
|
|
# Cron rulează cu PATH minimal (/usr/bin:/bin). ha-manager e în /usr/sbin, deci
|
|
# fără linia asta secțiunea "HA status" din alertă iese goală, tăcut:
|
|
# /opt/scripts/pvemini-down-alert.sh: line 38: ha-manager: command not found
|
|
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
|
|
|
PRIMARY_IP=10.0.20.201
|
|
STATE=/var/run/pvemini-down-alert.state
|
|
MAIL_TO=mmarius28@gmail.com
|
|
THRESHOLD=2 # min consecutive
|
|
|
|
COUNT=0
|
|
[[ -f "$STATE" ]] && COUNT=$(cat "$STATE")
|
|
|
|
if ping -c 2 -W 2 "$PRIMARY_IP" &>/dev/null; then
|
|
if [[ "$COUNT" -ge "$THRESHOLD" ]]; then
|
|
# Recovery
|
|
echo "pvemini revenit online la $(date)" | \
|
|
mail -r 'ups@romfast.ro' -s "[OK] pvemini UP" "$MAIL_TO"
|
|
fi
|
|
echo 0 > "$STATE"
|
|
exit 0
|
|
fi
|
|
|
|
COUNT=$((COUNT + 1))
|
|
echo "$COUNT" > "$STATE"
|
|
|
|
# Alertează o singură dată când atingem threshold
|
|
if [[ "$COUNT" -eq "$THRESHOLD" ]]; then
|
|
{
|
|
echo "pvemini (10.0.20.201) NU răspunde la ping de $THRESHOLD minute"
|
|
echo "Timp: $(date)"
|
|
echo
|
|
echo "Stare cluster:"
|
|
pvecm status 2>&1 | head -20 || true
|
|
echo
|
|
echo "HA status:"
|
|
ha-manager status 2>&1 || true
|
|
echo
|
|
echo "=========================================="
|
|
echo "CT-uri HA (104, 106, 108, 171): migrare AUTOMATĂ"
|
|
echo "pe pveelite în ~2 min dacă pveelite are RAM."
|
|
echo "=========================================="
|
|
echo
|
|
echo "### FAILOVER MANUAL VM 201 (Windows) ###"
|
|
echo
|
|
echo "Dacă pvemini rămâne DOWN, pentru a porni VM 201 pe pveelite:"
|
|
echo
|
|
echo " ssh root@10.0.20.202 /opt/scripts/failover-vm201.sh"
|
|
echo
|
|
echo "(tastezi 'DA' la prompt; scriptul folosește ultima replicare"
|
|
echo " ZFS — max 5 min în urmă. Verifică ping + ssh înainte)"
|
|
echo
|
|
echo "Variantă non-interactivă:"
|
|
echo " ssh root@10.0.20.202 /opt/scripts/failover-vm201.sh --yes"
|
|
echo
|
|
echo
|
|
echo "### REVENIRE PE PVEMINI (după ce pvemini e stabil) ###"
|
|
echo
|
|
echo "IMPORTANT: NU porni VM 201 pe pvemini automat — date divergente."
|
|
echo "Folosește scriptul interactiv care face toți pașii în siguranță:"
|
|
echo
|
|
echo " ssh root@10.0.20.202 /opt/scripts/recover-vm201-to-pvemini.sh"
|
|
echo
|
|
echo "Scriptul verifică:"
|
|
echo " - pvemini uptime min. 30 min + erori recente"
|
|
echo " - pvemini reachable ssh + VM 201 NU rulează deja acolo"
|
|
echo " - VM 201 running local pe pveelite"
|
|
echo
|
|
echo "Execuția face automat (cu confirmări la fiecare pas):"
|
|
echo " 1. qm shutdown 201 pe pveelite"
|
|
echo " 2. pvesr replicare inversă pveelite → pvemini + run forțat"
|
|
echo " 3. qm migrate 201 pvemini (offline)"
|
|
echo " 4. cleanup job replicare inversă"
|
|
echo " 5. qm start 201 pe pvemini"
|
|
echo
|
|
echo "Variantă non-interactivă: adaugă '--yes' la final."
|
|
echo
|
|
echo "CT-urile HA (104, 106, 108, 171) revin automat pe pvemini"
|
|
echo "conform priorității ha-group-main."
|
|
echo "=========================================="
|
|
} | mail -r 'ups@romfast.ro' -s "[CRITIC] pvemini DOWN $THRESHOLD min" "$MAIL_TO"
|
|
fi
|