High Availability Computer Center mit hacc- Teil 2
Teil 2: Einsatz von Nagios auf den Steuerknoten
Von
Josef Müller
Zu beachten ist, dass der Ereignis-Handler für den Host die Verfügbarkeit des logischen Applikationsservers prüft und entsprechend reagiert. Dies geschieht über die externe IP-Adresse des Knotens, die im »Image« definiert wird. Für die interne IP-Adresse und die IP-Aliase kann auch eine Host-Definition benutzt werden. Dafür sollte aber nicht der Ereignis-Handler laut Skript 6 benutzt werden.
Skript 6: event_host
1:#!/bin/bash 2: 3:# event_host 4: 5:# event_handler bei Ausfall einer Applikation 6: 7:# Parameter: 8: 9:eval set -- $(getopt -n $0 -o H:s:t:a: -l host-down: -l help -- "$@") 10: 11:#D echo $@ 12: 13:. /usr/local/nagios/local/data 14:Z=$(date +'%F-%k:%M:%S') 15:SELF=$(basename $0) 16:LOG="$LOGDIR/$SELF.log" 17: 18:exec 2>>$LOG.err 19: 20:while true 21:do 22: case "$1" in 23: -H) HOST="$2"; shift 2;; 24: -s) STATUS="$2"; shift 2;; 25: -t) TYPE="$2"; shift 2;; 26: -a) ATT="$2"; shift 2;; 27: --host-down) HOSTDOWN="$2"; shift 2;; 28: --) shift; break;; 29: --help) cat <<-__ 30: usage: $0 -H host -s state 31: -t type -a attempt 32: --host-down time 33: __ 34: exit 0; 35: break;; 36: esac 37:done 38: 39:echo "$Z: $SELF -H $HOST -s $STATUS -t $TYPE -a $ATT --host-down $HOSTDOWN" \ 40: >>$LOG 41: 42:if [ $HOSTDOWN -ne 0 ] 43:then 44: echo "$Z: $SELF -H $HOST DOWNTIME" >>$LOG 45: exit 0 46:fi 47: 48:# keine Downtime - Behandlung des Problems 49: 50:if [ $STATUS == 'DOWN' ] 51:then 52: if [ $TYPE == 'HARD' ] 53: then 54: # ermitteln Knoten-Nummer aus dem unionfs Verzeichnis 55: if ( KN=$($USER2/get_node $HOST) ) 56: then 57:KN=$($USER2/get_node $HOST) # wirkt sonst nicht 58:#D echo "$Z: $HOST sleep 15 Minuten" \ 59:#D >>$LOG 60:#D set -x 61:#D sleep 15m 62:#D echo "$Z: $HOST weakup -> Ping $HOST" \ 63:#D >>$LOG 64:if ( R=$(ping $HOST -c 1) ) 65:then 66: echo "$Z: $HOST OK: $R" \ 67: >>$LOG 68: exit 0 69:else 70: echo "$Z: $HOST - Ping ERROR: $R" \ 71: >>$LOG 72: echo "$Z: $HOST; Node: $KN --> $USER2/blade_ctrl $KN off " \ 73: >>$LOG 74: # Ausschalten defekter Knoten 75: $USER2/blade_ctrl $KN off >>$LOG 76: # Suchen freien Knoten 77: cd $UNION_DIR 78: for KNF in $UNION_IP 79: # moegliche Knoten 80: do 81: if ( test -d $KNF ) 82: then 83: echo "$Z: Knoten: $KNF belegt" \ 84: >>$LOG 85: else 86: # freier Knoten gefunden -> Zuordnen 87: echo "$Z: $UNION_DIR: mv $KN $KNF" \ 88: >>$LOG 89: mv $KN $KNF 90: # Platzhalter -> bisherigen Knoten (HW-Defekt) 91: echo "$Z: $UNION_DIR: ln -s XXX $KN" \ 92: >>$LOG 93: ln -s XXX $KN 94: # Neuzuordnung OK -> Einschalten 95: if ( test -d $KNF ) 96: then 97: echo "$Z: $HOST; $USER2/blade_ctrl $KNF on" \ 98: >>$LOG 99: $USER2/blade_ctrl $KNF on >>$LOG 100:if [ $? -eq 0 ] 101:then 102: echo "$Z: $USER2/nagios.down $HOST $((10 * 60))" >>$LOG 103: $USER2/nagios.down "$HOST" $((10 * 60)) \ 104: "AUTO: Knoten RESET ueber Management-Blade" 105:fi 106: exit 0 107: else 108: echo "$Z: $HOST; ERROR: mv $KN $KNF" \ 109: >>$LOG 110: exit 3 111: fi 112: fi 113: done 114:fi 115: else 116: echo "$Z: Knoten: $HOST wird nicht behandelt" 117: exit 0 118: fi 119: fi 120:fi 121: 122: 123:exit 0
Der Vollständigkeit halber sollen die folgenden Skripte noch angegeben werden (Skript 7):