#!/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 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