Sun Cluster Entwicklerhandbuch Datendienste für Solaris OS

Funktionsweise der Start-Methode

RGM führt die Start-Methode auf einem Cluster-Knoten aus, 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 an diesem Knoten.

Dieser Abschnitt beschreibt die Hauptteile der Start-Methode für die Beispielanwendung. In diesem Abschnitt werden keine Funktionen beschrieben, die allen Rückmeldemethoden gemeinsam sind, wie die parse_args()-Funktion. In diesem Abschnitt wird ebenfalls nicht beschrieben, wie die syslog()-Funktion verwendet wird. Die gemeinsamen Funktionen werden im Abschnitt Bereitstellen gemeinsamer Funktionalität für alle Methoden beschrieben.

Eine vollständige Auflistung der Start-Methode finden Sie im Abschnitt Auflistung des Start-Methodencodes.

Die Start-Methode

Bevor Sie versuchen, DNS zu starten, prüft die Start-Methode des Beispieldatendienstes, ob das Konfigurationsverzeichnis und die Konfigurationsdatei (named.conf) zugänglich und verfügbar sind. Die Informationen in der Datei named.conf sind für einen erfolgreichen Betrieb des DNS erforderlich.

Diese Rückmeldemethode verwendet PMF (pmfadm), um den DNS-Dämon (in.named) zu starten. Wenn der DNS abstürzt oder nicht gestartet werden kann, versucht PMF, den DNS-Dämon so häufig wie vorgeschrieben innerhalb eines angegebenen Intervalls zu starten. Die Anzahl der Wiederholversuche und das Intervall werden von den 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. Deshalb führt die Start-Methode einige Tests durch, die prüfen, ob auf das Verzeichnis und die Datei zugegriffen werden kann, bevor der Versuch unternommen wird, den DNS zu starten.

Die Confdir-Erweiterungseigenschaft stellt den Pfad zum Konfigurationsverzeichnis bereit. Die Eigenschaft selbst ist in der RTR-Datei definiert. Der Cluster-Administrator legt den tatsächlichen Ort jedoch bei der Konfiguration des Datendienstes fest.

Beim Beispieldatendienst ruft die Start-Methode den Ort 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. Mit dem Befehl awk wird lediglich der Wert abgerufen und in eine Shell-Variable, CONFIG_DIR , eingefügt.


# find the value of Confdir set by the cluster administrator at the time of
# adding the resource.
config_info=`scha_resource_get -O Extension -R $RESOURCE_NAME \
-G $RESOURCEGROUP_NAME Confdir`

# scha_resource_get returns the "type" as well as the "value" for the
# extension properties. Get only the value of the extension property 
CONFIG_DIR=`echo $config_info | awk '{print $2}'`

Die Start-Methode verwendet den Wert von CONFIG_DIR, um zu prüfen, ob auf das Verzeichnis zugegriffen werden kann. Ist dies nicht der Fall, protokolliert die Start-Methode eine Fehlermeldung und wird mit einem Fehlerstatus beendet. Weitere Informationen finden Sie unter Start-Beendigungsstatus.

# Check if $CONFIG_DIR is accessible.
if [ ! -d $CONFIG_DIR ]; then
   logger -p ${SYSLOG_FACILITY}.err \
         -t [$SYSLOG_TAG] \
         "${ARGV0} Directory $CONFIG_DIR is missing or not mounted"
   exit 1
fi

Vor dem Starten des Anwendungsdämons überprüft diese Methode abschließend, ob die named.conf-Datei vorhanden ist. Ist die Datei nicht vorhanden, protokolliert die Start-Methode eine Fehlermeldung und wird mit einem Fehlerstatus beendet.

# Change to the $CONFIG_DIR directory in case there are relative
# pathnames in the data files.
cd $CONFIG_DIR

# Check that the named.conf file is present in the $CONFIG_DIR directory
if [ ! -s named.conf ]; then
   logger -p ${SYSLOG_FACILITY}.err \
         -t [$SYSLOG_TAG] \
         "${ARGV0} File $CONFIG_DIR/named.conf is missing or empty"
   exit 1
fi

Starten der Anwendung

Bei dieser Methode wird Process Manager Facility (pmfadm) zum Starten der Anwendung verwendet. Mit dem Befehl pmfadm können Sie die Anzahl der Versuche festlegen, mit denen die Anwendung innerhalb eines bestimmten Zeitrahmens neu gestartet wird. Die RTR-Datei enthält zwei Eigenschaften: Retry_count legt die Anzahl der Versuche fest, die eine Anwendung neu gestartet wird, und Retry_interval den Zeitraum, innerhalb dessen die Versuche unternommen werden.

Die Start-Methode ruft die Werte von Retry_count und Retry_interval mithilfe der Funktion scha_resource_get () ab und speichert ihre Werte in den Shell-Variablen. Die Start -Methode übergibt diese Werte an pmfadm und verwendet dabei die Optionen - n und -t.

# Get the value for retry count from the RTR file.
RETRY_CNT=`scha_resource_get -O Retry_count -R $RESOURCE_NAME \
-G $RESOURCEGROUP_NAME`
# Get the value for retry interval from the RTR file. This value is in seconds
# and must be converted to minutes for passing to pmfadm. Note that the 
# conversion rounds up; for example, 50 seconds rounds up to 1 minute.
((RETRY_INTRVAL=`scha_resource_get -O Retry_interval -R $RESOURCE_NAME \
-G $RESOURCEGROUP_NAME` / 60))

# Start the in.named daemon under the control of PMF. Let it crash and restart
# up to $RETRY_COUNT times in a period of $RETRY_INTERVAL; if it crashes
# more often than that, PMF will cease trying to restart it.
# If there is a process already registered under the tag
# <$PMF_TAG>, then PMF sends out an alert message that the
# process is already running.
pmfadm -c $PMF_TAAG -n $RETRY_CNT -t $RETRY_INTRVAL \
    /usr/sbin/in.named -c named.conf

# Log a message indicating that HA-DNS has been started.
if [ $? -eq 0 ]; then
   logger -p ${SYSLOG_FACILITY}.err \
         -t [$SYSLOG_TAG] \
         "${ARGV0} HA-DNS successfully started"
fi
exit 0

Start-Beendigungsstatus

Eine Start-Methode sollte nicht mit Erfolg beendet werden, bis die zugrunde liegende Anwendung tatsächlich ausgeführt wird und verfügbar ist, insbesondere wenn andere Datendienste davon abhängig sind. Eine Methode, den Erfolg zu prüfen, besteht darin, die Anwendung zu testen, um sicherzustellen, dass sie ausgeführt wird, bevor Sie die Start-Methode beenden. Für eine komplexe Anwendung, wie z.B. eine Datenbank, müssen Sie den Wert für die Start_timeout-Eigenschaft in der RTR-Datei so hoch setzen, dass genügend Zeit zur Verfügung steht, dass die Anwendung nach einem Absturz gestartet und wiederhergestellt werden kann.


Hinweis –

Da die Anwendungsressource (DNS) des Beispieldatendienstes schnell startet, fordert der Beispieldatendienst keine Prüfung, ob sie ausgeführt wird, bevor sie erfolgreich 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 legt die Failover_mode-Eigenschaft nicht ausdrücklich fest, sodass diese Eigenschaft den Standardwert NONE aufweist (es sei denn, der Cluster-Administrator überschreibt den Standardwert und legt einen anderen Wert fest). In diesem Fall ist die einzige Aufgabe von RGM, den Zustand des Datendienstes einzustellen. Der Cluster-Administrator muss an demselben Knoten einen Neustart initiieren oder einen Failover an einen anderen Knoten durchführen.