Blog

Ultimative Anleitung: Sichern und Wiederherstellen eines beschädigten etcd-Dienstes mit S3

30.01.2025
Lesezeit: 5 Minuten.
Zuletzt aktualisiert: 30.01.2025

Inhaltsübersicht

In modernen verteilten Systemen spielt etcd eine entscheidende Rolle als zuverlässiger und schneller Key-Value-Speicher, der als Rückgrat für die Speicherung wichtiger Konfigurations- und Statusdaten dient. Von Kubernetes bis hin zu anderen groß angelegten Systemen fungiert etcd oft als "Herz", das den reibungslosen Betrieb von Clustern gewährleistet.

Doch was passiert, wenn diese wichtige Datenbank gefährdet, gelöscht oder beschädigt wird? Ein Datenverlust in etcd kann zu schwerwiegenden Unterbrechungen, zum Verlust des Status oder sogar zum vollständigen Ausfall des Dienstes führen. Aus diesem Grund sind eine ordnungsgemäße Backup-Verwaltung und -Wiederherstellung für Administratoren und Techniker gleichermaßen wichtig.

Um sicherzustellen, dass Ihre etcd-Backups sicher und zugänglich sind, ist die Speicherung in einem S3-Bucket eine zuverlässige Option. S3 bietet Haltbarkeit, Verfügbarkeit und die Möglichkeit, Backup-Uploads zu automatisieren.

Installieren und konfigurieren Sie die AWS CLI anhand dieser Anleitung

Erstellen Sie einen Bucket zum Speichern Ihrer Backups. Sie können dies über die AWS Management Console oder die CLI tun

Nachdem Sie mit etcdctl ein Backup erstellt haben, laden Sie es in den Bucket hoch:

Verwenden Sie einen Cron-Job oder ein Skript, um regelmäßige Backups und Uploads auf S3 zu automatisieren.

Speichern von etcd-Backups im S3-Bucket

Laden Sie die Umgebungsvariablen für etcd:

* Quelle /etc/etcd.env

Extrahieren der Endpunkte des etcd-Clusters

ETCD_ENDPOINTS_FOR_BACKUP=$(ETCDCTL_API=3 etcdctl member list --endpoints $ETCDCTL_ENDPOINTS --cacert $ETCD_TRUSTED_CA_FILE --cert $ETCD_CERT_FILE --key $ETCD_KEY_FILE | cut -d, -f5 | sed -e 's/ //g' | paste -sd ',')

echo "Member list is $ETCD_ENDPOINTS_FOR_BACKUP"

Überprüfen Sie den Status der etcd-Endpunkte

ETCDCTL_API=3 etcdctl endpoint status --endpoints $ETCD_ENDPOINTS_FOR_BACKUP --cacert $ETCD_TRUSTED_CA_FILE --cert $ETCD_CERT_FILE --key $ETCD_KEY_FILE

Um einen Snapshot der etcd-Datenbank zu erstellen, verwenden Sie den folgenden Befehl:

ETCDCTL_API=3 etcdctl --endpoints="$ETCDCTL_ENDPOINTS" \

        --cacert="$ETCD_TRUSTED_CA_FILE" \

        --cert="$ETCD_CERT_FILE" \

        --key="$ETCD_KEY_FILE" \

        snapshot save $BACKUP_DIR/$PREFIX-$TIMESTAMP.db
  • -endpoints="$ETCD_ENDPOINTS": Gibt die Endpunkte des etcd-Clusters an
  • -cacert="$ETCD_TRUSTED_CA_FILE": Pfad zum vertrauenswürdigen CA-Zertifikat für die sichere Kommunikation
  • -cert="$ETCD_CERT_FILE": Pfad zum Client-Zertifikat
  • -key="$ETCD_KEY_FILE": Pfad zum privaten Schlüssel des Kunden
  • Schnappschuss speichern: Speichert den aktuellen Zustand der etcd-Datenbank als Snapshot
  • $BACKUP_DIR/$PREFIX-$TIMESTAMP.db: Gibt den Speicherort und das Benennungsformat für die Snapshot-Datei an

Wenn Ihre Umgebungsvariablen wie folgt gesetzt sind:

BACKUP_DIR=/var/backups/etcd
PREFIX=etcd-backup
TIMESTAMP=$(date +%Y%m%d%H%M%S) 

Der Schnappschuss wird als gespeichert:

/var/backups/etcd/etcd-backup-20250115123045.db

Nachdem Sie den Snapshot erstellt haben, laden Sie ihn in den S3-Bucket hoch:

aws s3 cp /$BACKUP_DIR/$PREFIX-$TIMESTAMP.db s3://$S3_BUCKET/$ETCD_PREFIX_ENV/$ETCD_PREFIX_ENV_FOR_SNAPSHOTS/$PREFIX-$TIMESTAMP.db

Zur Wiederherstellung aus S3 laden Sie den Snapshot auf den lokalen Server herunter

aws s3 cp --profile etcd-backup-restore-s3 s3://$ETCD_S3_BUCKET/$ETCD_PREFIX_ENV/$ETCD_PREFIX_ENV_FOR_SNAPSHOTS/$ETCD_SNAPSHOT etcd-snapshot.db

Laden Sie die Umgebungsvariablen für etcd:

* Quelle /etc/etcd.env

Zusätzliche Überlegungen zur Wiederherstellung

Bei der Wiederherstellung von etcd sollten auch die folgenden Schritte berücksichtigt werden:

Stoppen Sie den etcd-Dienst
Bevor Sie den Snapshot wiederherstellen, müssen Sie unbedingt den etcd-Dienst stoppen, um Konflikte während des Wiederherstellungsprozesses zu vermeiden.

systemctl stop etcd

Umbenennen des bestehenden Datenverzeichnisses
Es empfiehlt sich, das bestehende etcd-Datenverzeichnis vor der Wiederherstellung umzubenennen, um eine mögliche Datenbeschädigung zu vermeiden.

mv /var/lib/etcd /var/lib/etcd.copy_$(Datum +'%Y-%m-%d_%H-%M-%S')

Sobald die alten Daten sicher umbenannt sind, stellen Sie den Snapshot im etcd-Datenverzeichnis wieder her:

ETCDCTL_API=3 etcdctl \

            --data-dir="/var/lib/etcd" \

            snapshot restore --skip-hash-check=true "$ETCD_SNAPSHOT" \

            --name="$ETCD_NAME" \

            --initial-cluster="$ETCD_INITIAL_CLUSTER" \

            --initial-advertise-peer-urls="$ETCD_INITIAL_ADVERTISE_PEER_URLS" \

            --initial-cluster-token="$ETCD_INITIAL_CLUSTER_TOKEN"

Nachdem der Snapshot wiederhergestellt wurde, starten Sie den etcd-Dienst neu, um die Änderungen zu übernehmen:

systemctl start etcd

Wenn Sie möchten, können Sie den Status des etcd-Clusters nach der Wiederherstellung überprüfen:

etcdctl endpoint status --write-out=table \ 

--endpoints "$ETCDCTL_ENDPOINTS" \ 

--cacert="$ETCD_TRUSTED_CA_FILE" \

  --cert="$ETCD_CERT_FILE" \ 

--key="$ETCD_KEY_FILE"

Der etcd-Führer sollte einer sein. 

Wenn Sie diese Schritte befolgen, können Sie Ihren etcd-Dienst erfolgreich sichern und wiederherstellen und so die Sicherheit und Verfügbarkeit Ihrer wichtigen Daten gewährleisten. Regelmäßige Backups und ein zuverlässiges Wiederherstellungsverfahren sind der Schlüssel zur Aufrechterhaltung der Stabilität Ihrer verteilten Systeme.

Zur weiteren Automatisierung können Sie Kubernetes-Jobs verwenden, um Ihre etcd-Backups zu planen und zu verwalten. Mit diesem Ansatz können Sie den Sicherungsprozess innerhalb Ihrer Kubernetes-Umgebung automatisieren und sicherstellen, dass die Sicherungen regelmäßig und ohne manuelle Eingriffe durchgeführt werden.

Für den Wiederherstellungsprozess können Sie Ansible-Rollen nutzen, um das Wiederherstellungsverfahren zu rationalisieren und zu automatisieren. Mit Ansible können Sie eine Reihe von Aufgaben für die Wiederherstellung von etcd aus einem Snapshot definieren, wodurch der Prozess effizienter und über verschiedene Umgebungen hinweg wiederholbar wird.

Durch die Automatisierung der Sicherungs- und Wiederherstellungsvorgänge verringern Sie das Risiko menschlicher Fehler und gewährleisten einen zuverlässigeren und konsistenteren Ansatz für die Verwaltung Ihres etcd-Dienstes.Regelmäßiges Testen von Backup und Wiederherstellung: Es ist wichtig, dass Sie Ihre Sicherungs- und Wiederherstellungsprozesse regelmäßig testen, um sicherzustellen, dass sie in einem tatsächlichen Disaster Recovery-Szenario wie erwartet funktionieren. Durch die Durchführung regelmäßiger Tests können Sie potenzielle Probleme erkennen, bevor sie kritisch werden.

Eine Antwort hinterlassen

Mehr Beiträge

Kontakt aufnehmen
ITGix bietet Ihnen fachkundige Beratung und maßgeschneiderte DevOps-Services, um Ihr Unternehmenswachstum zu beschleunigen.
Newsletter für
Technik-Experten
Schließen Sie sich 12.000+ Geschäftsführern und Ingenieuren an, die Blogs, e-Books und Fallstudien Fallstudien über neue Technologie erhalten.