Zum Inhalt springen

Datenbeschädigung

Datenbeschädigung und Recovery in etcd

etcd verfügt über eine integrierte automatische Erkennung von Datenbeschädigungen, damit die Zustände der Mitglieder nicht voneinander abweichen.

Hinweis

In etcd 3.7 die nachfolgenden Funktionsschalter und Optionen für Zeitintervalle verwenden. Die früheren experimentellen Optionen zur Prüfung auf Datenbeschädigungen wurden entfernt; siehe Konfigurationsoptionen .

Erkennung von Datenbeschädigungen aktivieren

Datenbeschädigungen lassen sich mit folgenden Prüfungen erkennen:

  • Anfangsprüfung, aktiviert mit der Option --feature-gates=InitialCorruptCheck=true.
  • Regelmäßige Prüfung folgender Hashwerte:
    • Hashwert der kompaktierten Revision, aktiviert mit der Option --feature-gates=CompactHashCheck=true.
    • Hashwert der neuesten Revision, aktiviert mit der Option --corrupt-check-time.

Die Anfangsprüfung erfolgt während der Initialisierung des etcd-Mitglieds. Das Mitglied vergleicht seinen persistenten Zustand mit dem der anderen Mitglieder und beendet sich bei einer Abweichung.

Beide regelmäßigen Prüfungen werden in einem bereits laufenden Cluster vom Leader ausgeführt. Der Leader vergleicht seinen persistenten Zustand mit dem der anderen Mitglieder und löst bei einer Abweichung einen CORRUPT ALARM aus. Beide Prüfungen dienen demselben Zweck. Es lohnt sich jedoch, beide zu aktivieren, um Leistung und Erkennungszeit gegeneinander abzuwägen.

  • Prüfung des Hashwerts der kompaktierten Revision – erfordert regelmäßige Kompaktierung, verursacht minimale Leistungseinbußen und kommt mit langsamen Followern zurecht.
  • Prüfung des Hashwerts der neuesten Revision – verursacht hohe Leistungseinbußen und kommt weder mit langsamen Followern noch mit häufigen Kompaktierungen zurecht.

Hashwert der kompaktierten Revision prüfen

Bei Aktivierung mit der Option --feature-gates=CompactHashCheck=true wird die Prüfung einmal pro Minute ausgeführt. Dies lässt sich mit der Option --compact-hash-check-time in folgendem Format anpassen: 1m – jede Minute, 1h – jede Stunde. Diese Prüfung erweitert die Kompaktierung um die Berechnung einer Prüfsumme, die zwischen Clustermitgliedern verglichen werden kann. Sie erfordert keinen zusätzlichen Datenbankscan und ist dadurch sehr kostengünstig, setzt aber eine regelmäßige Kompaktierung im Cluster voraus.

Hashwert der neuesten Revision prüfen

Die Aktivierung erfolgt mit der Option --corrupt-check-time; dabei muss ein Ausführungsintervall in folgendem Format angegeben werden: 1m – jede Minute, 1h – jede Stunde. Wegen der hohen Leistungseinbußen wird ein Intervall von einigen Stunden empfohlen. Für die Prüfung muss der gesamte etcd-Inhalt bei der angegebenen Revision gescannt werden, um eine Prüfsumme zu berechnen.

Ein Mitglied mit beschädigten Daten wiederherstellen

Es gibt drei Möglichkeiten, ein Mitglied mit beschädigten Daten wiederherzustellen:

  • Persistenten Zustand des Mitglieds löschen
  • Mitglied ersetzen
  • Gesamten Cluster wiederherstellen

Nach der Wiederherstellung des Mitglieds kann der CORRUPT ALARM aufgehoben werden.

Persistenten Zustand des Mitglieds löschen

Der Zustand eines Mitglieds lässt sich wie folgt löschen:

  1. Die etcd-Instanz stoppen.
  2. Ein Backup des etcd-Datenverzeichnisses erstellen.
  3. Das Unterverzeichnis snap aus dem etcd-Datenverzeichnis verschieben.
  4. etcd mit --initial-cluster-state=existing und den in --initial-cluster aufgeführten Clustermitgliedern starten.

Das etcd-Mitglied sollte daraufhin einen aktuellen Snapshot vom Leader herunterladen.

Mitglied ersetzen

Ein Mitglied lässt sich wie folgt ersetzen:

  1. Die etcd-Instanz stoppen.
  2. Ein Backup des etcd-Datenverzeichnisses erstellen.
  3. Das Datenverzeichnis entfernen.
  4. Das Mitglied durch Ausführen von etcdctl member remove aus dem Cluster entfernen.
  5. Es durch Ausführen von etcdctl member add wieder hinzufügen
  6. etcd mit --initial-cluster-state=existing und den in --initial-cluster aufgeführten Clustermitgliedern starten.

Gesamten Cluster wiederherstellen

Der Cluster lässt sich wiederherstellen, indem ein Snapshot des aktuellen Leaders gespeichert und auf allen Mitgliedern wiederhergestellt wird. etcdctl snapshot save gegen den Leader ausführen und dem Verfahren zur Wiederherstellung eines Clusters folgen.