Sun Cluster Entwicklerhandbuch Datendienste für Solaris OS

Verfahren für Ereigniszustellungen vom Server an den Client

Sobald im Cluster Ereignisse generiert werden, stellt der CRNP-Server diese allen Clients zu, die Ereignisse des entsprechenden Typs angefordert haben. Die Zustellung besteht im Senden einer SC_EVENT-Meldung an die Rückmeldeadresse des Clients. Jedes Ereignis wird über eine neue TCP-Verbindung zugestellt.

Unmittelbar nach der Client-Registrierung für einen Ereignistyp sendet der Server über eine SC_CALLBACK_REG-Meldung mit einer ADD_CLIENT-Meldung bzw. einer ADD_EVENT-Meldung dem Client das neueste Ereignis des entsprechenden Typs. Der Client kann so den aktuellen Zustand des Systems feststellen, von dem die nachfolgenden Ereignisse kommen.

Wenn der Server eine TCP-Verbindung mit dem Client herstellt, sendet er genau eine SC_EVENT-Meldung über die Verbindung. Daraufhin gibt der Server eine Vollduplex-Beendigung aus.

Der Client führt zum Beispiel folgende Aktionen aus:

  1. Abwarten einer vom Server hergestellten TCP-Verbindung,

  2. Akzeptieren der eingehenden Verbindung vom Server,

  3. Abwarten einer SC_EVENT-Meldung,

  4. Lesen der SC_EVENT-Meldung,

  5. Erhalten einer Anzeige, dass der Server die Verbindung beendet hat (Lesen von 0 Bytes vom Socket),

  6. Beenden der Verbindung.

Wenn sich alle Clients registriert haben, müssen sie jederzeit ihre Rückmeldeadressen (IP-Adresse und Port-Nummer) abhören, um eine eingehende Verbindung für die Ereigniszustellung abzuwarten.

Wenn der Server keinen Kontakt mit dem Client aufnehmen kann, um ein Ereignis zuzustellen, versucht der Server eine vom Benutzer definierte Anzahl von Malen innerhalb eines definierten Zeitintervalls erneut, das Ereignis zuzustellen. Wenn alle Versuche fehlschlagen, wird der Client aus der Client-Liste des Servers entfernt. Der Client muss sich dann erneut registrieren, indem er eine weitere SC_CALLBACK_REG-Meldung mit einer ADD_CLIENT-Meldung sendet. Erst dann kann er weitere Ereignisse erhalten.

Garantie der Ereigniszustellung

Innerhalb des Clusters besteht eine Gesamtreihenfolge für die Ereignisgenerierung, die in der Reihenfolge der Zustellung an jeden Client eingehalten wird. Wenn also Ereignis A im Cluster vor Ereignis B generiert wird, erhält der Client X das Ereignis A vor dem Ereignis B. Diese Gesamtreihenfolge der Ereigniszustellung an alle Clients wird jedoch nicht eingehalten. Das heißt, dass Client Y beide Ereignisse A und B erhalten kann, bevor Client X das Ereignis A erhält. Dadurch wird sichergestellt, dass langsame Clients nicht die Zustellung an alle Clients aufhalten.

Alle Ereignisse, die der Server zustellt (mit Ausnahme des ersten Ereignisses für eine Unterklasse und von Ereignissen, die auf Serverfehler folgen), sind eine Reaktion auf die tatsächlichen Ereignisse, die der Cluster generiert, es sei denn, beim Server tritt ein Fehler auf, durch den er im Cluster generierte Ereignisse nicht erfasst. In diesem Fall generiert der Server ein Ereignis für jeden Ereignistyp, das den aktuellen Zustand des Systems für diesen Typ darstellt. Jedes Ereignis wird an Clients gesendet, die Interesse an diesem Ereignistyp registriert haben.

Die Ereigniszustellung folgt der “Mindestens einmal”-Semantik. Das heißt, dass der Server das Ereignis mehr als einmal an einen Client senden kann. Dies muss in Fällen zugelassen sein, in denen der Server vorübergehend heruntergefahren wird und nach erneutem Herauffahren nicht feststellen kann, ob der Client die neuesten Informationen erhalten hat.

Inhalt einer SC_EVENT-Meldung

Die SC_EVENT-Meldung enthält die eigentliche Meldung, die im Cluster generiert wird, übertragen in das SC_EVENT-XML-Meldungsformat. Die folgende Tabelle beschreibt die vom CRNP zugestellten Ereignistypen, einschließlich der Namens- und Wertepaare, Herausgeber und Hersteller.

Klasse und Unterklasse  

Herausgeber und Hersteller 

Namens- und Wertepaare 

Anmerkungen 

EC_Cluster

ESC_cluster_membership

Herausgeber: rgm 

Hersteller: SUNW  

Name: node_list

Werttyp: Zeichenketten-Array  

Name: state_list

Werttyp: Zeichenketten-Array 

Die Positionen der Array-Elemente für state_list sind mit denjenigen der node_list synchronisiert. Das heißt, dass der Zustand für den im node_list-Array zuerst aufgelisteten Knoten der erste Zustand im state_list-Array ist.

Die state_list enthält nur in ASCII dargestellte Ziffern. Jede Ziffer stellt die aktuelle Zusammensetzungsnummer für diesen Knoten im Cluster dar. Wenn die Nummer die gleiche wie die in einer vorhergehenden Meldung erhaltene Nummer ist, hat sich die Beziehung des Knotens zum Cluster nicht geändert (gelöscht, beigetreten bzw. erneut beigetreten). Wenn die Zusammensetzungsnummer –1 ist, so ist der Knoten kein Cluster-Mitglied. Wenn die Zusammensetzungsnummer keine negative Zahl ist, handelt es sich beim Knoten um ein Cluster-Mitglied.

Zusätzliche Namen, die mit ev_ beginnen, und deren zugeordnete Werte können vorhanden sein, sind aber nicht für die Verwendung durch den Client vorgesehen.

EC_Cluster

ESC_cluster_rg_state

Herausgeber: rgm 

Hersteller: SUNW  

Name: rg_name

Werttyp: Zeichenkette  

Name: node_list

Werttyp: Zeichenketten-Array  

Name: state_list

Werttyp: Zeichenketten-Array 

Die Positionen der Array-Elemente für state_list sind mit denjenigen der node_list synchronisiert. Das heißt, dass der Zustand für den im node_list-Array zuerst aufgelisteten Knoten der erste Zustand im state_list-Array ist.

Die state_list enthält Zeichenkettendarstellungen des Zustands der Ressourcengruppe. Gültige Werte sind Werte, die mit den Befehlen scha_cmds(1HA) abgerufen werden können.

Zusätzliche Namen, die mit ev_ beginnen, und deren zugeordnete Werte können vorhanden sein, sind aber nicht für die Verwendung durch den Client vorgesehen.

EC_Cluster

ESC_cluster_r_state

Herausgeber: rgm 

Hersteller: SUNW  

Drei erforderlich, wie folgt:  

Name: r_name

Werttyp: Zeichenkette 

Name: node_list

Werttyp: Zeichenketten-Array 

Name: state_list

Werttyp: Zeichenketten-Array 

Die Positionen der Array-Elemente für state_list sind mit denjenigen der node_list synchronisiert. Das heißt, dass der Zustand für den im node_list-Array zuerst aufgelisteten Knoten der erste Zustand im state_list-Array ist.

Die state_list enthält Zeichenkettendarstellungen des Zustands der Ressource. Gültige Werte sind Werte, die mit den Befehlen scha_cmds(1HA) abgerufen werden können.

Zusätzliche Namen, die mit ev_ beginnen, und deren zugeordnete Werte können vorhanden sein, sind aber nicht für die Verwendung durch den Client vorgesehen.