Datacore Witness gegen Split-Brain Situationen

Datacore SANsymphony bietet Software defined Storage mit transparentem Spiegel im active-active Modus.

Seit Version SANsymphony 10 PSP7 unterstützt Datacore eine Witness Funktion.

Das Problem

Wenn beide Datacore Hosts sowohl Spiegelpfade, als auch LAN Verbindung verlieren, entsteht eine sogenannte Split-Brain Situation.

Beide Hosts DC1 und DC2 sind funktionsfähig und haben intakte Daten auf ihrem Datastore. Beide Hosts können Storage I/O von Servern (H1-H4) in ihrem Bereich bearbeiten. dadurch erfahren beide Hälften des Datenspeichers unterschiedliche Veränderungen, die nicht mehr in Einklang gebracht werden können.

Zur Wiederherstellung des Spiegels muss einer der beiden Köpfe zum Master erklärt werden. Alle Änderungen auf der anderen Seite müssen verworfen werden. Datenverlust !

Witness

Hier kommt der Witness ins Spiel.  Sobald ein Datacore Host seinen Spiegelpartner weder über den Mirror-Pfad, noch über LAN erreichen kann, versucht er Kontakt mit dem Witness aufzunehmen. Gelingt dies nicht, verweigert er alle I/O auf seinen Datastore.

Szenario 1 – ohne Witness

Im Folgenden ist ein Szenario dargestellt mit zwei Sites im active/active Betrieb. Hosts verwenden als bevorzugte Storage den lokalen DataCore Server, können aber im Fehlerfall auch gegen den remote Datastore arbeiten.

Durch eine Unterbrechung der Glasfaserverbindung werden der Inter-Switch-Link (ISL) im SAN, der Datacore Spiegel-Link (MIR) und die LAN-Verbindung gekappt. Beide Rechenzentren arbeiten autonom weiter und ändern Daten auf den Datastores.

Beide Hälften des Spiegels laufen auseinander und können nicht wieder durch ein Log-Recovery synchronisiert werden. Die einzige Möglichkeit besteht darin, sich für eine Seite zu entscheiden und ein Full-Recovery auf die andere Seite zu starten. Dies bedeutet Datenverlust für eine Seite.

Szenario 2 – mit Witness

Gleiches Szenario wie unter 1, jedoch in diesem Fall mit Witness (W) auf Seite von SDS1.

Nach Unterbrechung der Verbindung (Zeitpunkt x) erreicht SDS1 den Witness und präsentiert weiterhin LUNs an die Server. Prinzipiell an alle Server, jedoch kann er nur von Servern der Site 1 erreicht werden. SDS2 hat keinen Kontakt zum Spiegelpartner und keinen Kontakt zum Witness. Er stellt alle Zugriffe auf seine Datenspeicher ein.

Die Server auf Site 2 erleiden einen APD, aber die Daten auf der Storage bleiben im Zustand von Zeitpunkt x eingefroren. Nach Wiederherstellung des Spiegels kann Site 2 von Site 1 durch ein Log-recovery wieder synchronisiert werden.

Installation

Voraussetzung ist die Version SANsymphony 10 PSP7. Nach Installation des PSP7 muss eine Blindaktivierung ausgelöst werden. D.h. man aktiviert den Cluster, ohne einen Lizenzschlüssel einzutragen. Nach erfolgreicher Aktivierung ist das Witness-Feature auf der Lizenzseite zu sehen.

Die Installation des Witness erfolgt nur über Powershell CMDlets. Eine GUI gibt es (noch) nicht. Dazu öffnet man von einem der beiden Datacore Hosts eine PowerShell und verbindet sich mit dem Datacore Server. In meinem Beispiel heissen die beiden Datacore Server SDS1 und SDS2. Als Witness fungiert ein physischer Veeam-Backup-Proxy am Standort 1.

Dieser erste Schritt ist wichtig und war zu Anfang nicht dokumentiert.

Connect-DCSserver sds1

Nachdem die Connection steht, kann man den Witness definieren. Der Name ist frei wählbar. Der gewählte Witness muss auf Ping Anfragen antworten.

Add-DcsWitness -Name "witness 1" -Address "172.22.7.110"

Wir können nun prüfen, ob beide Hosts mit dem Witness Kontakt aufnehmen können.

Invoke-DcsWitnessContact

Das Cmdlet forder zur Eingabe des Witness-Namens auf (witness 1).

cmdlet Invoke-DcsWitnessContact at command pipeline position 1
Supply values for the following parameters:
Witness: witness 1

ServerId WitnessId ResponseStatus
-------- --------- --------------
7233CB41-D6A1-4730-B9DB... 79506f86bfa748779b71eb1... Success
1503818E-E8E2-4370-9130... 79506f86bfa748779b71eb1... Success

Beide Server können den Witness erreichen.

Wir können einen bestehenden Witness mit folgendem Befehl abfragen.

PS C:\Program Files\DataCore\SANsymphony> Get-DcsWitness
Alias : witness 1
IPAddress : 172.22.7.110
SequenceNumber : 97879
Id : 79506f86bfa748779b71eb12c1ad45b6
Caption : witness 1
ExtendedCaption :
Internal : False

Witness als Default für alle vDisks setzen

Der Witness ist zwar eingerichtet, aber man müsste nun selektiv den Witness für einzenlne vDisks definieren. In der Regel genügt es, den den Witness als Default für alle vDisks zu definieren.

Set-DcsServerGroupDefaultWitnessProperties -Address "172.22.7.110"

OurGroup : True
Alias : Server Group
Description :
State : Present
SmtpSettings : DataCore.Executive.SmtpServerSettings
LicenseSettings : DataCore.Executive.LicenseSettings
LicenseType : Regular
ContactData : DataCore.Executive.ContactData
StorageUsed : 49.82 TB
BulkStorageUsed : 0 B
MaxStorage : 100 TB
RecoverySpeed : 32
ExistingProductKeys : {, , , ...}
DataCoreStorageUsed : 0 B
SupportBundleRelayAddress :
MirrorTrunkMappingEnabled : False
SelfHealingDelay : 480
DefaultWitness : f33551cf965e4dc887abe750130db21a
DefaultWitnessOption : Automatic
WitnessAllowed : True
SequenceNumber : 103302
Id : 1f929299-c9f9-419c-a7e9-8c7c694102b5
Caption : Server Group
ExtendedCaption : Server Group
Internal : False

Fazit

Mit der Einführung der Witness-Rolle erfüllt DataCore letztendlich eine lange geforderte Möglichkeit, um Split-Brain Situationen zu vermeiden. Wir kennen die Verwendung eines Witness bereits aus anderen Hochverfügbarkeits-Szenarien, wie z.B. vSAN oder vCenter-HA.

 

 

 

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.