Fehlerhafte H2-Cluster-Knoten erkennen und wiederherstellen

9

Nachdem ich den H2-Entwicklerführer gelesen habe, verstehe ich immer noch nicht, wie ich herausfinden kann, welche Clusterknoten ausgefallen sind und welche Datenbank bei einem vorübergehenden Netzwerkausfall wiederhergestellt werden muss.

Betrachten wir das folgende Szenario:

  • H2-Cluster begann mit N aktiven Knoten (ist es tatsächlich wahr, dass H2 N & gt; 2 unterstützen kann, d.h. mehr als 2 Clusterknoten?)
  • (viele DB Updates, liest ...)
  • Die Netzwerkverbindung mit einem (oder mehreren) Clusterknoten wird abgebaut und der Knoten wird für den Rest des Clusters unsichtbar.
  • (viele DB-Updates, liest ...)
  • Netzwerkverbindung mit zuvor getrennten Knoten, die wiederhergestellt wurden
  • Es wurde entdeckt, dass der Cluster-Knoten wahrscheinlich fehlte (soweit ich sehen kann, reagiert SELECT VALUE FROM INFORMATION_SCHEMA.SETTINGS WHERE NAME='CLUSTER' mit einer leeren Zeichenfolge, wenn ein Knoten im Cluster ausfällt)

Nach diesem Punkt ist es unklar, wie man herausfinden kann, welche Knoten ausgefallen sind? Offensichtlich kann ich einige grundlegende Prüfungen durchführen, wie zum Beispiel die DB-Größe vergleichen, aber es ist unzuverlässig.

  1. Was ist die empfohlene Vorgehensweise, um herauszufinden, welcher Knoten im Cluster fehlte, insbesondere Wenn obige Abfrage mit einer leeren Zeichenfolge antwortet?

  2. Eine weitere Frage - Warum unterstützt urlTarget nicht mehrere Parameter? Wie soll ich CreateCluster-Tool verwenden, wenn mehrere Knoten im Cluster fehlgeschlagen sind und ich mehrere wiederherstellen möchte?

  3. Ich verstehe auch nicht, wie CreateCluster funktioniert, wenn ich den Cluster stoppen muss und ich nicht wirklich irgendwelche Knoten wiederherstellen will? Was mir nicht klar ist, ist, was ich an das CreateCluster-Tool übergeben muss, wenn ich die Datenbank nicht wirklich kopieren muss.

Alex 24.06.2016, 04:58
quelle

1 Antwort

1

Das ist teilweise richtig SELECT VALUE FROM INFORMATION_SCHEMA.SETTINGS WHERE NAME='CLUSTER' , gibt eine leere Zeichenfolge zurück, wenn im Standardmodus abgefragt wird.

Sie können die Liste der Server jedoch auch mit Connection.getClientInfo() abrufen, aber es ist ein zweistufiger Prozess. Paraphrasiert von h2database.com :

Die Liste der von getClientInfo() zurückgegebenen Eigenschaften enthält eine numServers -Eigenschaft, die die Anzahl der Server in der Verbindungsliste zurückgibt. getClientInfo() hat auch die Eigenschaften server0..serverN, wobei N die Anzahl der Server ist - 1. Um den zweiten Server aus der Liste zu holen, verwenden Sie getClientInfo ('server1').

  

Hinweis: Die serverX-Eigenschaft gibt nur IP-Adressen und Ports zurück und nicht   Hostnamen.

Und bevor Sie eine einfache Replikation sagen, ist das die Standardoperation, aber Sie können komplexere Dinge tun, die außerhalb des Bereichs Ihrer Frage in geclusterten H2 liegen.

Hier ist das Zitat für das, worüber Sie sprechen:

  

Clustering kann nur im Servermodus verwendet werden (der eingebettete Modus unterstützt kein Clustering). Der Cluster kann mithilfe des CreateCluster-Tools neu erstellt werden, ohne den verbleibenden Server anzuhalten. Anwendungen, die noch verbunden sind, werden automatisch getrennt, beim Anhängen wird jedoch AUTO_RECONNECT = TRUE wiederhergestellt.

Also, wenn der Cluster aufhört, ist auto_reconnect nicht aktiviert, und Sie bleiben bei der grundlegenden Abfrage, Sie stecken fest und es ist schwierig Informationen zu finden. Während die meisten Leute Ihnen sagen, dass Sie die API und / oder das Handbuch durchsehen müssen, haben sie sich nicht so durchgeschaut, mein Mitgefühl.

Ich finde es viel nützlicher, die Fehlercodes zu verfolgen, weil Sie eine wirklich gute Vorstellung davon bekommen, was Sie tun können, wenn Sie sehen, wie der Fehler geplant ist ... hier geht's .

    
J-Boss 08.07.2016, 00:24
quelle

Tags und Links