Sun Cluster Entwicklerhandbuch Datendienste für Solaris OS

Bereitstellen gemeinsamer Funktionalität für alle Methoden

Dieser Abschnitt beschreibt die Funktionalität, die in allen Rückmeldemethoden des Beispieldatendienstes verwendet wird:

Identifizieren des Befehlsinterpreters und Exportieren des Pfads

Die erste Zeile eines Shell-Skripts muss den Befehlsinterpreter identifizieren. Jedes der Methodenskripts im Beispieldatendienst identifiziert den Befehlsinterpreter wie folgt:


#!/bin/ksh

Alle Methoden-Skripts in der Beispielanwendung exportieren den Pfad zu den Sun Cluster-Binärdateien und -Bibliotheken, anstatt sich auf die PATH-Einstellungen der Benutzer zu verlassen.


#######################################################################
# MAIN
#######################################################################

export PATH=/bin:/usr/bin:/usr/cluster/bin:/usr/sbin:/usr/proc/bin:$PATH

Deklarieren der Variablen PMF_TAG und SYSLOG_TAG

Alle Methoden-Skripts mit Ausnahme von Validate verwenden pmfadm zum Starten bzw. Stoppen des Datendienstes oder des Monitors, indem sie den Ressourcennamen übergeben. Jedes Skript definiert eine Variable, PMF_TAG, die an pmfadm übergeben werden kann, um entweder den Datendienst oder den Monitor zu identifizieren.

Ebenso verwendet jedes Methodenskript den logger-Befehl, um Meldungen im Systemprotokoll zu protokollieren. Jedes Skript definiert eine Variable, SYSLOG_TAG, die mit der Option -t an logger übergeben werden kann, um den Ressourcentyp, die Ressourcengruppe und den Ressourcennamen der Ressource, für die eine Meldung protokolliert wird, zu identifizieren.

Alle Methoden definieren SYSLOG_TAG auf die gleiche Art und Weise, wie im folgenden Beispiel gezeigt. Die dns_probe-, dns_svc_start-, dns_svc_stop- und dns_monitor_check-Methoden definieren PMF_TAG wie folgt, wobei die Verwendung von pmfadm und logger der dns_svc_stop-Methode entnommen wird:


#########################################################################
# MAIN
#########################################################################

PMF_TAG=$RESOURCE_NAME.named

SYSLOG_TAG=$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME

   # SIGTERM-Signal an den Datendienst senden und  80% des
   # gesamten Zeitüberschreitungswerts warten.
   pmfadm -s $PMF_TAG.named -w $SMOOTH_TIMEOUT TERM
   if [ $? -ne 0 ]; then 
      logger -p ${SYSLOG_FACILITY}.info \
          -t [$SYSLOG_TAG] \
          “${ARGV0} Failed to stop HA-DNS with SIGTERM; Retry with \
           SIGKILL”

Die Methoden dns_monitor_start, dns_monitor_stop und dns_update definieren PMF_TAG wie folgt, wobei die Verwendung von pmfadm der dns_monitor_stop-Methode entnommen wird:


#########################################################################
# MAIN
#########################################################################

PMF_TAG=$RESOURCE_NAME.monitor
SYSLOG_TAG=$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME
...

# Feststellen, ob der Monitor läuft, und ggf. Beenden erzwingen. 
if pmfadm -q $PMF_TAG.monitor; then 
   pmfadm -s $PMF_TAG.monitor KILL

Analysieren der Funktionsargumente

RGM ruft alle Rückmeldemethoden — mit Ausnahme der Validate-Methode — folgendermaßen auf.


Methodenname -R Ressourcenname -T Ressourcentypname -G Ressourcengruppenname 

Der Methodenname ist der Pfadname des Programms, das die Rückmeldemethode implementiert. Ein Datendienst gibt den Pfadnamen für jede Methode in der RTR-Datei an. Diese Pfadnamen beziehen sich auf das Verzeichnis, das ebenfalls in der RTR-Datei von der RT_basedir-Eigenschaft angegeben wird. Zum Beispiel werden das Basisverzeichnis und die Methodennamen in der RTR-Datei des Beispieldatendienstes wie folgt angegeben.


RT_BASEDIR=/opt/SUNWsample/bin;
Start = dns_svc_start;
Stop =  dns_svc_stop;
...

Alle Rückmeldemethodenargumente werden als Werte mit Flags übergeben, wobei -R den Namen der Ressourceninstanz, -T den Ressourcentyp und -G die Gruppe angibt, in der die Ressource konfiguriert wird. Weitere Informationen zu Rückmeldemethoden finden Sie in der Online-Dokumentation unter rt_callbacks(1HA).


Hinweis –

Die Validate-Methode wird mit zusätzlichen Argumenten aufgerufen, das heißt mit den Eigenschaftswerten der Ressource und Ressourcengruppe, in denen sie aufgerufen wird. Weitere Informationen finden Sie unter Bearbeiten von Eigenschaftsaktualisierungen.


Jede Rückmeldemethode benötigt eine Funktion zum Analysieren der Argumente, die ihr übergeben werden. Da an alle Rückmeldemethoden die gleichen Argumente übergeben werden, stellt der Datendienst eine einzige Analysefunktion bereit, die für alle Rückmeldungen in der Anwendung eingesetzt wird.

Im Folgenden wird die parse_args()-Funktion gezeigt, die für alle Rückmeldemethoden in der Beispielanwendung verwendet wird.


#########################################################################
# Programmargumente analysieren.
#
function parse_args # [args ...]
{
      typeset opt

      while getopts 'R:G:T:' opt
      do
             case "$opt" in
             R)
                  # Name der DNS-Ressource.
                  RESOURCE_NAME=$OPTARG
                  ;;
             G)
                  # Name der Ressourcengruppe, in der die Ressource
                  # konfiguriert ist.
                  RESOURCEGROUP_NAME=$OPTARG
                  ;;
             T)
                  # Name des Ressourcentyps.
                  RESOURCETYPE_NAME=$OPTARG
                  ;;
             *)
                  logger -p ${SYSLOG_FACILITY}.err \
                  -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME] \
                  "FEHLER: Option $OPTARG unbekannt"
                  exit 1
                      ;;
             esac
    done
}


Hinweis –

Die PROBE-Methode in der Beispielanwendung ist zwar benutzerdefiniert, also keine Sun Cluster-Rückmeldemethode, wird jedoch mit den gleichen Argumenten wie die Rückmeldemethoden aufgerufen. Daher enthält diese Methode genau die gleiche Analysefunktion wie die anderen Rückmeldemethoden.


Die Analysefunktion wird in MAIN wie folgt aufgerufen:


parse_args “$@”

Generieren von Fehlermeldungen

Für Rückmeldemethoden wird empfohlen, syslog für die Ausgabe von Fehlermeldungen an die Endbenutzer zu verwenden. Alle Rückmeldemethoden im Beispieldatendienst verwenden die Funktion scha_cluster_get(), um die Nummer des als Cluster-Protokoll verwendeten syslog wie folgt abzurufen:


SYSLOG_FACILITY=`scha_cluster_get -O SYSLOG_FACILITY`

Der Wert wird in einer Shell-Variablen, SYSLOG_FACILITY, gespeichert und kann im logger-Befehl verwendet werden, um Meldungen im Cluster-Protokoll zu protokollieren. So ruft zum Beispiel die Start-Methode im Beispieldatendienst syslog ab und protokolliert eine Meldung, dass der Datendienst gestartet wurde:


SYSLOG_FACILITY=`scha_cluster_get -O SYSLOG_FACILITY`
...

if [ $? -eq 0 ]; then
   logger -p ${SYSLOG_FACILITY}.err \
         -t [$SYSLOG_TAG] \
         "${ARGV0} HA-DNS erfolgreich gestartet"
fi

Weitere Informationen finden Sie in der Online-Dokumentation unter scha_cluster_get(1HA).

Abrufen von Eigenschaftsinformationen

Die meisten Rückmeldemethoden benötigen Informationen über die Ressourcen- und Ressourcentypeigenschaften des Datendienstes. Die API stellt zu diesem Zweck die scha_resource_get()-Funktion bereit.

Es stehen zwei Arten von Ressourceneigenschaften zur Verfügung: systemdefinierte Eigenschaften und Erweiterungseigenschaften. Systemdefinierte Eigenschaften sind vordefiniert, während Sie Erweiterungseigenschaften in der RTR-Datei definieren.

Wenn Sie scha_resource_get() zum Abrufen des Wertes einer systemdefinierten Eigenschaft verwenden, geben Sie den Eigenschaftsnamen mit dem -O-Parameter an. Der Befehl gibt nur den Wert der Eigenschaft zurück. Im Beispieldatendienst benötigt zum Beispiel die Monitor_start-Methode den Speicherort des Testsignalprogramms, um es zu starten. Das Testsignalprogramm residiert im Basisverzeichnis für den Datendienst, auf das die RT_basedir-Eigenschaft zeigt. Daher ruft die Monitor_start-Methode den Wert von RT_basedir ab und legt ihn in der RT_basedir-Variablen ab:


RT_BASEDIR=`scha_resource_get -O RT_BASEDIR -R $RESOURCE_NAME -G \
$RESOURCEGROUP_NAME`

Für Erweiterungseigenschaften müssen Sie mit dem -O-Parameter angeben, dass es sich um eine Erweiterungseigenschaft handelt, und den Eigenschaftsnamen als letzten Parameter angeben. Für Erweiterungseigenschaften gibt der Befehl sowohl den Typ als auch den Wert der Eigenschaft zurück. Im Beispieldatendienst ruft das Testsignalprogramm zum Beispiel den Typ und den Wert der probe_timeout-Erweiterungseigenschaft ab und verwendet dann awk, um nur den Wert in der PROBE_TIMEOUT-Shell-Variablen abzulegen:


probe_timeout_info=`scha_resource_get -O Extension -R $RESOURCE_NAME \
-G $RESOURCEGROUP_NAME Probe_timeout` 
PROBE_TIMEOUT=`echo $probe_timeout_info | awk '{print $2}'`