Ich weiss nicht, wo du guckst. Ein FAILOVER == 0 finde ich im Script nur in Verbindung mit deinem erwähnten Einwand &&, das in einem Vorscript mit || tatsächlich falsch war.
Vielleicht bin ich auch ich im eigenen Script auch betriebsblind
Aber ich finde nur ein
Darum poste ich das Script vorsichtshalber nochmal:
Vielleicht bin ich auch ich im eigenen Script auch betriebsblind
Aber ich finde nur ein
Code:
if [ $FORCEFAILOVER == 1 ] || [ $MASTERGWUP == 0 ]
Darum poste ich das Script vorsichtshalber nochmal:
Code:
#!/bin/bash
# FAILOVER für Gateway-VMs openWRT254 und OpenWRT247 auf PVE-Hosts sind 192.168.1.1 verfügbar und im Netz propagiert.
# Die Minimal-OpenWRT-VMs unterscheiden sich nur im definierten GW.
# So sind die Open-WRTs einfachste Proxys der physischen Gateways um recht nahtlos Umschalten zu können.
# Vorraussetzung ist ein konfigurierter Postfix, um Benachrichtgungen mit mutt zu versenden.
# Andere Router erforden natürlich andere Prüfmechanismen.
# checkwan.sh prüft die Internetverfügbarkeit
# forcefailover.sh kan man zu testen verwenden
MAILTO="edv@umbrella.com"
COMPANY="Umbrella corp"
SLEEPTIME=30 # wir prüfen alle 30s.
LINKEDBY="bond0:" # Einzelschnittstelle, vmbr oder bond
MASTERPVE="192.168.1.201" # da sollen die OpenWRTs eigentlich rumwerkeln
AMIMASTERPVE=$(ip addr | grep $MASTERPVE | wc -l) # Bin ich das womöglich selbst?
while true; do
sleep $SLEEPTIME
LINKED=$(ip link show | grep $LINKEDBY | grep "state UP" | wc -l) # Sind wir denn selbst im Netzwerk überhaupt verfügbar?.
if [ $LINKED == 1 ]; then # LAN connection active, sonst hat das alles eh keinen Zweck
ACTIVEMASTERPVE=$(nmap -p 22 $MASTERPVE | grep open | wc -l)
if [ $AMIMASTERPVE == 1 ] || [ $ACTIVEMASTERPVE == 0 ]; then # oh wir sind selbt PVE-Master oder PVE-Master ist platt.
FORCEFAILOVER=$(/root/forcefailover.sh) # Failover erzwingen?
MASTERGWUP=$(/root/checkwan.sh 192.168.1.254 FB) # WAN Haupt-GW prüfen
FAILOVERGWUP=$(/root/checkwan.sh 192.168.1.247 FB) # WAN Failover-GW prüfen
RUNNINGMASTER=$(qm list | grep 901 | grep running | wc -l)
RUNNINGFAILOVER=$(qm list | grep 900 | grep running | wc -l)
if [ $RUNNINGMASTER == 0 ]; then # MasterOpenWRT aus
if [ $RUNNINGFAILOVER == 0 ]; then # FailoverOpenWRT aus
qm start 901 # wir aktivieren also den Master
echo "Keine OpenWRT-VM lief. Master wurde nun aber aktiviert." | mutt -s "Aktivierung $COMPANY von Master-OpenWRT (VM901) läuft nun auf $HOSTNAME" -- $MAILTO
fi
fi
if [ $RUNNINGMASTER == 1 ]; then # MasterOpenWRT aktiv, Inet sollte eigentlich funktionieren tuts aber nicht
if [ $FAILOVERGWUP == 1 ]; then # failover wäre möglich
if [ $FORCEFAILOVER == 1 ] || [ $MASTERGWUP == 0 ]; then # Aber MasterRoute scheint offline
qm shutdown 901 && qm wait 901 --timeout 30 && qm start 900 # wir schalten also um
echo "Gateway über OpenWRT Master ist ausgefallen FAILOVER wird aktiviert." | mutt -s "Failover $COMPANY Failover-OpenWRT (VM900) läuft nun auf $HOSTNAME" -- $MAILTO
fi
fi
fi
if [ $RUNNINGFAILOVER == 1 ]; then # FailoverOpenWRT aktiv.
if [ $FORCEFAILOVER == 0 ] && [ $MASTERGWUP == 1 ]; then # Aber MasterRoute scheint online
qm shutdown 900 && qm wait 900 --timeout 30 && qm start 901 # wir schalten also zurück zum Master
echo "Gateway über OpenWRT Master wieder aktiv FAILOVER wurde deaktiviert." | mutt -s "Recover $COMPANY Master-OpenWRT (VM901) läuft nun wieder auf $HOSTNAME" -- $MAILTO
fi
fi
else # unser Master-PVE ist wohl am Start. Alles nicht mehr unser Bier. Wir stoppen hier also alle womöglichen laufende OpenWRTs
if [ $AMIMASTERPVE == 0 ]; then # wir sind also nur Failoverhost und wollen keinesfalls am Master fummeln.
if [ $(qm list | grep "openwrt247" | grep "running" | wc -l) == 1 ]; then qm shutdown 900; fi
if [ $(qm list | grep "openwrt254" | grep "running" | wc -l) == 1 ]; then qm shutdown 901; fi
fi
fi
fi
done
Last edited: