Sun Cluster Entwicklerhandbuch Datendienste für Solaris OS

Bereitstellen gemeinsamer Funktionalität für alle Methoden

In diesem Abschnitt wird die Funktionalität beschrieben, 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 Methodenskript des Beispieldatendienstes identifiziert den Befehlsinterpreter wie folgt:

#!/bin/ksh

Alle Methodenskripts der Beispielanwendung exportieren den Pfad der Sun Cluster-Binärdateien und -Bibliotheken, anstatt sich auf die PATH-Einstellungen des Benutzers zu verlassen.

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

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

Deklarieren der VariablenPMF_TAG und SYSLOG_TAG

Alle Methodenskripts mit Ausnahme von Validate verwenden pmfadm, um den Datendienst oder den Monitor zu starten oder zu stoppen und den Namen der Ressource zu übergeben. Jedes Skript definiert eine Variable, PMF_TAG, die an pmfadm übergeben werden kann, um entweder den Datendienst oder den Monitor zu identifizieren.

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

Alle Methoden definieren SYSLOG_TAG auf dieselbe Weise, wie im folgenden Beispielcode dargestellt. Die dns_probe-, dns_svc_start -, dns_svc_stop- und dns_monitor_check-Methoden definieren PMF_TAG wie folgt (die Verwendung von pmfadm und logger stammt von der Methode dns_svc_stop).

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

PMF_TAG=$RESOURCE_NAME.named

SYSLOG_TAG=$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME

   # Send a SIGTERM signal to the data service and wait for 80% of the
   # total timeout value.
   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 dns_monitor_start-, dns_monitor_stop- und dns_update-Methoden definieren PMF_TAG wie folgt (die Verwendung von pmfadm stammt von der Methode dns_monitor_stop):

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

PMF_TAG=$RESOURCE_NAME.monitor
SYSLOG_TAG=$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME
...
# See if the monitor is running, and if so, kill it. 
if pmfadm -q $PMF_TAG.monitor; then
   pmfadm -s $PMF_TAG.monitor KILL

Analysieren der Funktionsargumente

RGM führt alle Rückmeldemethoden mit Ausnahme von Validate wie folgt aus:

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. In der RTR-Datei des Beispieldatendienstes sind das Basisverzeichnis und die Methodennamen wie folgt angegeben:

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

Alle Argumente für Rückmeldemethoden werden wie folgt als Flag-Werte übergeben: Das Argument -R gibt den Namen der Ressourceninstanz an. Das Argument -T gibt den Ressourcentyp an. Das Argument -G gibt die Gruppe an, 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, die Eigenschaftswerte der Ressource und Ressourcengruppe, für die sie aufgerufen wird. Weitere Informationen finden Sie im Abschnitt Bearbeiten von Eigenschaftsaktualisierungen.


Jede Rückmeldemethode benötigt eine Funktion zum Analysieren der Argumente, mit denen die Funktion übergeben wird. 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 Beispiel wird die parse_args()-Funktion dargestellt, die für die Rückmeldemethoden in der Beispielanwendung verwendet wird.

#########################################################################
# Parse program arguments.
#
function parse_args # [args ...]
{
      typeset opt

      while getopts 'R:G:T:' opt
      do
             case "$opt" in
             R)
                  # Name of the DNS resource.
                  RESOURCE_NAME=$OPTARG
                  ;;
             G)
                  # Name of the resource group in which the resource is
                  # configured.
                  RESOURCEGROUP_NAME=$OPTARG
                  ;;
             T)
                  # Name of the resource type.
                  RESOURCETYPE_NAME=$OPTARG
                  ;;
             *)
                  logger -p ${SYSLOG_FACILITY}.err \
                  -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME] \
                  "ERROR: Option $OPTARG unknown"
                  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. Deshalb enthält diese Methode eine Analysefunktion, die mit derjenigen identisch ist, die von den anderen Rückmeldemethoden verwendet wird.


Die Analysefunktion wird in MAIN wie folgt aufgerufen:

parse_args “$@”

Generieren von Fehlermeldungen

Rückmeldemethoden sollten die syslog()-Funktion für die Ausgabe von Fehlermeldungen an Endbenutzer verwenden. Alle Rückmeldemethoden im Beispieldatendienst verwenden den Befehl scha_cluster_get zum Abrufen der Nummer der syslog()-Funktion, die für das Cluster-Protokoll verwendet wird, wie folgt:

SYSLOG_FACILITY=`scha_cluster_get -O SYSLOG_FACILITY`

Der Wert wird in einer Shell-Variablen, SYSLOG_FACILITY, gespeichert und kann als Option des logger-Befehls verwendet werden, um Meldungen im Cluster-Protokoll aufzuzeichnen. So ruft z.B. die Start-Methode des Beispieldatendienstes die syslog()-Funktion ab und protokolliert eine Meldung, dass der Datendienst gestartet wurde, wie folgt:

SYSLOG_FACILITY=`scha_cluster_get -O SYSLOG_FACILITY`
...
if [ $? -eq 0 ]; then
   logger -p ${SYSLOG_FACILITY}.err \
         -t [$SYSLOG_TAG] \
         "${ARGV0} HA-DNS successfully started"
fi

Weitere Informationen finden Sie in der Online-Dokumentation zu 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 sowohl systemdefinierte Eigenschaften als auch Erweiterungseigenschaften zur Verfügung. Systemdefinierte Eigenschaften sind vordefiniert. Die Erweiterungseigenschaften definieren Sie in der RTR-Datei.

Wenn Sie scha_resource_get() verwenden, um den Wert einer systemdefinierten Eigenschaft abzurufen, geben Sie den Namen der Eigenschaft mit der Option -O an. Der Befehl gibt nur den Wert der Eigenschaft zurück. Zum Beispiel muss die Monitor_start-Methode des Beispieldatendienstes das Testprogramm finden, damit es ausgeführt werden kann. Das Testprogramm befindet sich im Basisverzeichnis des Datendienstes, auf das mit der Eigenschaft RT_basedir verwiesen wird. Die Monitor_start-Methode ruft den Wert von RT_basedir ab und fügt ihn wie folgt in die RT_BASEDIR-Variable ein:

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

Für die Erweiterungseigenschaften müssen Sie die Option -O verwenden, um anzugeben, dass die Eigenschaft eine Erweiterungseigenschaft ist. Sie müssen auch den Namen der Eigenschaft als letztes Argument angeben. Im Falle von Erweiterungseigenschaften gibt der Befehl sowohl den Typ als auch den Wert der Eigenschaft zurück. Beim Beispieldatendienst ruft z.B. das Testprogramm den Typ und den Wert der Probe_timeout-Erweiterungseigenschaft ab und verwendet den awk-Befehl wie folgt, um den Wert lediglich in die PROBE_TIMEOUT-Shell-Variable einzufügen:

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}'`