Sun Cluster Entwicklerhandbuch Datendienste für Solaris OS

Steuern des Datendienstes

Ein Datendienst muss eine Start- oder Prenet_start-Methode bereitstellen, um den Anwendungsdämon auf dem Cluster zu aktivieren, sowie eine Stop- oder Postnet_stop-Methode zum Stoppen des Anwendungsdämons auf dem Cluster. Der Beispieldatendienst implementiert eine Start- und eine Stop-Methode. Bestimmen der zu verwendenden Start- und Stop-Methoden enthält Informationen darüber, in welchen Fällen möglicherweise die Verwendung von Prenet_start und Postnet_stop vorzuziehen wäre.

Start-Methode

RGM ruft die Start-Methode auf einem Cluster-Knoten auf, wenn die Ressourcengruppe, die den Datendienst enthält, auf diesem Knoten online gebracht wird bzw. wenn die Ressourcengruppe bereits online ist und die Ressource aktiviert wird. In der Beispielanwendung aktiviert die Start-Methode den in.named (DNS)-Dämon auf diesem Knoten.

Dieser Abschnitt beschreibt die Hauptteile der Start-Methode für die Beispielanwendung. Die Funktionalität, die allen Rückmeldemethoden gemeinsam ist, wird nicht beschrieben, wie zum Beispiel die parse_args()-Funktion und das Abrufen von syslog (in Bereitstellen gemeinsamer Funktionalität für alle Methoden beschrieben).

Eine vollständige Auflistung der Start-Methode ist in Start-Methode enthalten.

Überblick über Start

Vor dem Versuch, DNS zu starten, überprüft die Start-Methode des Beispieldatendienstes, ob das Konfigurationsverzeichnis und die Konfigurationsdatei (named.conf) zugänglich und verfügbar sind. Die Informationen in named.conf sind für einen erfolgreichen DNS-Betrieb entscheidend.

Diese Rückmeldemethode verwendet PMF (pmfadm ) zum Starten des DNS-Dämons (in.named). Wenn DNS abstürzt oder nicht startet, versucht PMF eine vorgeschriebene Anzahl von Malen, den Dienst während eines festgelegten Zeitintervalls zu starten. Die Anzahl der Wiederholungen und das Intervall sind durch Eigenschaften in der RTR-Datei des Datendienstes angegeben.

Überprüfen der Konfiguration

DNS benötigt für die Ausführung Informationen aus der named.conf-Datei im Konfigurationsverzeichnis. Daher führt die Start-Methode einige Gesundheits-Checks aus, um zu überprüfen, ob auf das Verzeichnis und die Datei zugegriffen werden kann, bevor DNS gestartet wird.

Die Confdir-Erweiterungseigenschaft stellt den Pfad zum Konfigurationsverzeichnis bereit. Die Eigenschaft selbst ist in der RTR-Datei definiert. Den Speicherort gibt jedoch der Cluster-Verwalter beim Konfigurieren des Datendienstes an.

Im Beispieldatendienst ruft die Start-Methode den Speicherort des Konfigurationsverzeichnisses mithilfe der Funktion scha_resource_get() ab.


Hinweis –

Da Confdir eine Erweiterungseigenschaft ist, gibt scha_resource_get() sowohl den Typ als auch den Wert zurück. Der awk-Befehl ruft lediglich den Wert ab und legt ihn in einer Shell-Variablen ab, CONFIG_DIR.



# Den Wert von Confdir suchen, den der Cluster-Verwalter beim Hinzufügen
# der Ressource eingestellt hat.
config_info=`scha_resource_get -O Extension -R $RESOURCE_NAME \
-G $RESOURCEGROUP_NAME Confdir`

# scha_resource_get gibt sowohl den "Typ" als auch den "Wert" für die
# Erweiterungseigenschaften zurück. Nur den Wert der Erweiterungseigenschaft abrufen.
CONFIG_DIR=`echo $config_info | awk '{print $2}'`

Die Start-Methode verwendet dann den Wert von CONFIG_DIR, um zu überprüfen, ob das auf das Verzeichnis zugegriffen werden kann. Wenn kein Zugriff möglich ist, protokolliert Start eine Fehlermeldung und wird mit Fehlerstatus beendet. Weitere Informationen finden Sie unter Start-Beendigungsstatus.


# Prüfen, ob Zugriff auf $CONFIG_DIR möglich ist.
if [ ! -d $CONFIG_DIR ]; then
   logger -p ${SYSLOG_FACILITY}.err \
         -t [$SYSLOG_TAG] \
         "${ARGV0} Verzeichnis $CONFIG_DIR fehlt oder ist nicht eingehängt"
   exit 1
fi

Vor dem Starten des Anwendungsdämons führt diese Methode eine abschließende Prüfung durch, um zu überprüfen, ob die named.conf-Datei vorhanden ist. Wenn sie nicht vorhanden ist, protokolliert Start eine Fehlermeldung und wird im Fehlerstatus beendet.


# Wechsel zum $CONFIG_DIR-Verzeichnis, falls die
# Datendateien relative Pfadnamen enthalten.
cd $CONFIG_DIR

# Prüfen, ob die named.conf-Datei im $CONFIG_DIR-Verzeichnis vorhanden ist
if [ ! -s named.conf ]; then
   logger -p ${SYSLOG_FACILITY}.err \
         -t [$SYSLOG_TAG] \
         "${ARGV0} Datei $CONFIG_DIR/named.conf fehlt oder ist leer"
   exit 1
fi

Starten der Anwendung

Diese Methode verwendet PMF (pmfadm) zum Starten der Anwendung. Über den pmfadm-Befehl können Sie die Anzahl der Male einstellen, die eine Anwendung während eines angegebenen Zeitraums neu gestartet wird. Die RTR-Datei enthält dafür zwei Eigenschaften: Retry_count gibt die Anzahl von Malen an, für die der Neustart der Anwendung versucht wird, und Retry_interval den Zeitraum, in dem die Versuche stattfinden sollen.

Die Start-Methode ruft die Werte für Retry_count und Retry_interval mithilfe der Funktion scha_resource_get() ab und speichert sie in Shell-Variablen. Dann werden diese Werte an pmfadm übergeben. Dabei werden die Optionen -n und -t verwendet.


# Wert für Wiederholversuchszähler aus der RTR-Datei abrufen.
RETRY_CNT=`scha_resource_get -O Retry_Count -R $RESOURCE_NAME \
-G $RESOURCEGROUP_NAME`
# Wert für das Wiederholungsintervall aus der RTR-Datei abrufen. Der
# Wert ist in Sekunden angegeben und muss für die Übergabe an pmfadm in Minuten
# konvertiert werden. Beachten Sie, dass die Konversion aufrundet; 50 Sekunden werden
# zu einer Minute aufgerundet.
((RETRY_INTRVAL=`scha_resource_get -O Retry_Interval -R $RESOURCE_NAME \
-G $RESOURCEGROUP_NAME` / 60))

# in.named-Dämon unter PMF-Steuerung starten. Abstürzen lassen und bis zu
# $RETRY_COUNT Male in einem Zeitraum von $RETRY_INTERVAL abstürzen lassen
# und neu starten. Wenn er öfter abstürzt, versucht PMF keinen Neustart mehr.
# Wenn unter der Markierung <$PMF_TAG> bereits ein Prozess registriert ist, sendet PMF
# eine Warnmeldung, dass der Prozess bereits läuft.
pmfadm -c $PMF_TAAG -n $RETRY_CNT -t $RETRY_INTRVAL \
    /usr/sbin/in.named -c named.conf

# Meldung protokollieren, dass HA-DNS gestartet wurde.
if [ $? -eq 0 ]; then
   logger -p ${SYSLOG_FACILITY}.err \
         -t [$SYSLOG_TAG] \
         "${ARGV0} HA-DNS erfolgreich gestartet"
fi
exit 0

Start-Beendigungsstatus

Eine Start-Methode darf erst dann mit Erfolg beendet werden, wenn die zugrunde liegende Anwendung auch tatsächlich läuft und verfügbar ist, vor allem dann, wenn andere Datendienste von ihr abhängen. Eine Möglichkeit zum Überprüfen des Erfolgs besteht darin, ein Testsignal an die Anwendung zu senden, um festzustellen, ob sie läuft, bevor die Start-Methode beendet wird. Vergewissern Sie sich bei komplexen Anwendungen wie zum Beispiel Datenbanken, dass der Wert für die Start_timeout-Eigenschaft in der RTR-Datei ausreichend hoch eingestellt wird, damit die Anwendung genügend Zeit zum Initialisieren und Wiederherstellen nach einem Absturz hat.


Hinweis –

Da die Anwendungsressource (DNS) im Beispieldatendienst schnell startet, überprüft der Beispieldatendienst nicht, ob sie läuft, bevor die Methode mit Erfolg beendet wird.


Wenn diese Methode DNS nicht starten kann und mit einem Fehlerstatus beendet wird, prüft RGM die Failover_mode-Eigenschaft, die die Reaktion auf den Fehlerstatus festlegt. Der Beispieldatendienst stellt die Failover_mode-Eigenschaft nicht ausdrücklich ein. Daher hat sie den Standardwert NONE, es sei denn, der Cluster-Verwalter hat diesen Standardwert übersteuert und einen anderen Wert angegeben. In diesem Fall ist die einzige Aufgabe von RGM, den Zustand des Datendienstes einzustellen. Ein Bedienereingriff ist erforderlich, um auf demselben Knoten neu zu starten oder ein Failover auf einen anderen Knoten auszuführen.

Stop-Methode

Die Stop-Methode wird auf einem Cluster-Knoten aufgerufen, wenn die Ressourcengruppe mit der HA-DNS-Ressource auf diesem Knoten offline genommen wird bzw. wenn die Ressourcengruppe online bleibt, jedoch die Ressource deaktiviert wird. Diese Methode stoppt den in.named (DNS)-Dämon auf dem Knoten.

Dieser Abschnitt beschreibt die Hauptteile der Stop-Methode für die Beispielanwendung. Die Funktionalität, die allen Rückmeldemethoden gemeinsam ist, wird nicht beschrieben, wie zum Beispiel die parse_args()-Funktion und das Abrufen von syslog (in Bereitstellen gemeinsamer Funktionalität für alle Methoden beschrieben).

Eine vollständige Auflistung der Stop-Methode ist in Stop-Methode enthalten.

Überblick über Stop

Zwei Punkte müssen beim Stoppen des Datendienstes vor allem beachtet werden. Als Erstes muss für ein ordnungsgemäßes Herunterfahren gesorgt werden. Das Senden eines SIGTERM-Signals über pmfadm ist die beste Möglichkeit, ein ordnungsgemäßes Herunterfahren zu erzielen.

Als Zweites muss sichergestellt werden, dass der Datendienst wirklich gestoppt wird, um zu vermeiden, dass er in den Stop_failed-Zustand versetzt wird. Die beste Möglichkeit hierzu ist das Senden eines SIGKILL-Signals über pmfadm.

Die Stop-Methode im Beispieldatendienst berücksichtigt diese beiden Punkte. Sie sendet zunächst ein SIGTERM-Signal. Wenn dieses Signal den Datendienst nicht stoppen kann, sendet die Methode ein SIGKILL-Signal.

Bevor versucht wird, DNS zu stoppen, überprüft die Stop-Methode, ob der Prozess tatsächlich läuft. Wenn der Prozess läuft, verwendet Stop PMF (pmfadm), um ihn zu stoppen.

Diese Stop-Methode ist garantiert idempotent. Auch wenn RGM eine Stop-Methode nicht zum zweiten Mal aufrufen sollte, ohne zuvor den Datendienst über einen Aufruf der entsprechenden Start-Methode gestartet zu haben, kann eine Stop-Methode für eine Ressource aufgerufen werden, obwohl diese nie gestartet wurde oder von selbst ausfiel. Diese Stop-Methode wird also mit Erfolg beendet, selbst wenn DNS nicht läuft.

Stoppen der Anwendung

Die Stop-Methode bietet zwei Möglichkeiten zum Stoppen des Datendienstes: eine geordnete oder weiche Art, bei der ein SIGTERM-Signal über pmfadm verwendet wird, und eine plötzliche oder harte Art, bei der ein SIGKILL-Signal eingesetzt wird. Die Stop-Methode ruft den Stop_timeout-Wert ab (den Zeitraum, in dem die Stop-Methode einen Wert zurückgeben muss). Stop weist dann 80% dieser Zeit dem weichen Stoppvorgang und 15% dem harten Stoppvorgang zu (5% werden zurückgehalten), wie im folgenden Beispiel gezeigt.

STOP_TIMEOUT=`scha_resource_get -O STOP_TIMEOUT -R $RESOURCE_NAME
\

-G $RESOURCEGROUP_NAMÈ
((SMOOTH_TIMEOUT=$STOP_TIMEOUT * 80/100))

((HARD_TIMEOUT=$STOP_TIMEOUT * 15/100))

Die Stop-Methode verwendet pmfadm -q, um zu überprüfen, ob der DNS-Dämon läuft. Ist das der Fall, sendet Stop zunächst mit pmfadm -s ein TERM-Signal zum Beenden des DNS-Prozesses. Wenn dieses Signal den Prozess nach Ablauf von 80% des Zeitüberschreitungswertes nicht beenden konnte, sendet Stop ein SIGKILL-Signal. Wenn auch dieses Signal den Prozess nicht innerhalb von 15% des Zeitüberschreitungswertes beenden kann, protokolliert die Methode eine Fehlermeldung und wird mit Fehlerstatus beendet.

Wenn pmfadm den Prozess beendet, protokolliert die Methode eine Meldung, die besagt, dass der Prozess gestoppt wurde, und wird mit Erfolg beendet.

Wenn der DNS-Prozess nicht läuft, protokolliert die Methode eine diesbezügliche Meldung und wird dennoch mit Erfolg beendet. Das folgende Codebeispiel zeigt, wie Stop den pmfadm-Befehl zum Stoppen des DNS-Prozesses einsetzt.

# Prüfen, ob if in.named läuft. Falls ja, Beenden erzwingen.
if pmfadm -q $PMF_TAG; then
   # SIGTERM-Signal an den Datendienst senden und 80% des gesamten
   # Zeitüberschreitungswertes warten.
   pmfadm -s $RESOURCE_NAME.named -w $SMOOTH_TIMEOUT TERM
   if [ $? -ne 0 ]; then
      logger -p ${SYSLOG_FACILITY}.err \
          -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME] \
          “${ARGV0} HA-DNS konnte nicht mit SIGTERM gestoppt werden; Mit \
           SIGKILL erneut versuchen”

      # Da der Datendienst mit einem SIGTERM-Signal nicht gestoppt wurde, jetzt
      # SIGKILL verwenden und für weitere 15% des Zeitüberschreitungswertes warten.
      pmfadm -s $PMF_TAG -w $HARD_TIMEOUT KILL
      if [ $? -ne 0 ]; then
          logger -p ${SYSLOG_FACILITY}.err \
          -t [$SYSLOG_TAG]
          “${ARGV0} HA-DNS konnte nicht gestoppt werden; Beenden NICHT ERFOLGREICH”

          exit 1
      fi
fi
else
   # Der Datendienst läuft nun nicht. Meldung protokollieren und mit
   # Erfolg beenden.
   logger -p ${SYSLOG_FACILITY}.err \
           -t [$SYSLOG_TAG] \
           “HA-DNS ist nicht gestartet”

   # Auch wenn HA-DNS nicht läuft, mit Erfolg beenden, damit die Datendienst-
   # ressource nicht in den STOP_FAILED-Zustand versetzt wird.

   exit 0

fi

# DNS konnte erfolgreich gestoppt werden. Meldung protokollieren und mit Erfolg beenden.
logger -p ${SYSLOG_FACILITY}.err \
    -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME]
\
    “HA-DNS erfolgreich gestoppt”
exit 0

Stop-Beendigungsstatus

Eine Stop-Methode darf erst dann mit Erfolg beendet werden, wenn die zugrundeliegende Anwendung auch tatsächlich gestoppt wurde, vor allem wenn andere Datendienste von ihr abhängen. Andernfalls können Daten beschädigt werden.

Vergewissern Sie sich für komplexe Anwendungen wie zum Beispiel Datenbanken, dass der Wert für die Stop_timeout-Eigenschaft in der RTR-Datei ausreichend hoch eingestellt wird, damit die Anwendung beim Stoppvorgang genügend Zeit zum Bereinigen hat.

Wenn diese Methode DNS nicht stoppen kann und mit Fehlerstatus beendet wird, prüft RGM die Failover_mode-Eigenschaft, die festlegt, welche Reaktion nun erfolgt. Der Beispieldatendienst stellt die Failover_mode-Eigenschaft nicht explizit ein. Daher hat sie den Standardwert NONE, es sei denn, der Cluster-Verwalter hat diesen übersteuert und einen anderen Wert angegeben. In diesem Fall ist die einzige Aufgabe von RGM, den Zustand des Datendienstes auf Stop_failed einzustellen. Ein Bedienereingriff ist erforderlich, um das Stoppen der Anwendung zu erzwingen und den Stop_failed-Zustand aufzuheben.