Eines der sehr angenehmen Features von Pacemaker ist die Möglichkeit, eine Ressource im Hinblick auf ihren Status zu untersuchen; das geschieht mittels der
»Monitor
«
-Operation. Der Resource Agent muss, wenn Pacemaker ihn mit dem
»monitor
«
-Target aufruft, überprüfen, ob das jeweilige Programm so läuft, wie es in der Ressourcen-Konfiguration vorgeschrieben ist. Meistens fällt deshalb die Überprüfung mehrerer Faktoren an. Im Falle von Asterisk ist die Monitor-Funktion über zwei Funktionen im OCF-Agent realisiert. Einerseits überprüft die
»asterisk_status
«
-Funktion, ob ein Prozess vorhanden ist, der dem Eintrag in Asterisks PID-File entspricht und ob ein zu dieser Instanz gehörender
»astcanary
«
-Prozess vorhanden ist.
»asterisk_monitor
«
findet außerdem heraus, ob der Asterisk-Prozess auf eine Anfrage über die Asterisk-Console antwortet und testet darüber hinaus, ob eine Test-Anfrage mittels
»sipsak
«
funktioniert.
Anhand von Asterisk lässt sich gut nachvollziehen, wie mit Sonderfällen bei der Status-Abfrage umzugehen ist. Wenn Asterisk im Realtime-Modus läuft, muss zusätzlich zum eigentlichen
»asterisk
«
-Prozess auch
»astcanary
«
laufen. Astcanary aktualisiert den Timestamp einer Datei mit dem etwas schrägen Namen
»alt.asterisk.canary.tweet.tweet.tweet"
«
, die im Asterisk-Status-Ordner liegt, im Sekundentakt. Solange diese Timestamp-Änderung stattfindet, läuft Asterisk im Realtime-Modus. Hört die Timestamp-Aktualisierung auf, wechselt Asterisk in den normalen Modus zurück. Setzt der Cluster-Admin den Parameter
»realtime
«
auf
»yes
«
, muss also zusätzlich zu Asterisk auch der Status von
»astcanary
«
überprüft werden – denn wenn Astcanary nicht läuft, liefe auch Asterisk nicht mehr so, wie konfiguriert, und der Resource Agent müsste bei einer Status-Abfrage einen Fehler zurückgeben.
Anhand von Asterisk lässt sich auch gut demonstrieren, wie mit Programmen umzugehen ist, die die Angabe ihrer Status-Files (PID-File, Socket für die Verbindung von externen Programme) nicht per Parameter an das eigentliche Binary unterstützen. Asterisk kennt keinen entsprechenden Parameter.
Das File, das die PID einer gerade laufenden Asterisk-Instanz enthält, heißt stets
» asterisk.pid
«
und liegt im Asterisk-Rundir. Wo das Rundir liegt, steht in der Asterisk-Konfigurationsdatei, die Variable heißt
»astrundir
«
. Konkret ist es im Falle des Asterisk-Agents also empfehlenswert, zuerst eine Variable zu definieren, die den Wert für
»astrundir
«
enthält. Die Definition dieser Variable gehört ans Ende des Resource Agents und kann dann etwa so aussehen:
ASTRUNDIR=`grep astrundir $OCF_RESKEY_config | awk '/^astrundir/{print $3}'`
Zusätzlich empfiehlt es sich auch, den Wert von
»astlogdir
«
in einer eigenen Variablen zu speichern, denn der wird beim Programmstart gebraucht. Die Definition ist analog zu
»astrundir
«
:
ASTLOGDIR=`grep astlogdir $OCF_RESKEY_config | awk '/^astlogdir/{print $3}'`