Warum etcd-Backups kritisch sind
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.
Speichern von etcd-Backups im S3-Bucket
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.
AWS CLI einrichten
Installieren und konfigurieren Sie die AWS CLI anhand dieser Anleitung
Ein S3 Bucket erstellen
Erstellen Sie einen Bucket zum Speichern Ihrer Backups. Sie können dies über die AWS Management Console oder die CLI tun
Backups auf S3 hochladen
Nachdem Sie mit etcdctl ein Backup erstellt haben, laden Sie es in den Bucket hoch:
Automatisieren Sie den Prozess
Verwenden Sie einen Cron-Job oder ein Skript, um regelmäßige Backups und Uploads auf S3 zu automatisieren.

So erstellen Sie ein etcd-Backup
Quelle einstellen
Laden Sie die Umgebungsvariablen für etcd:
* Quelle /etc/etcd.env
Endpunkte für etcd-Backup extrahieren
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 von etcd
Ü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
Schnappschuss erstellen
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
Erläuterung des Befehls:
- -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
Snapshot auf S3 hochladen
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
Wiederherstellungsverfahren Kopieren des Snapshots aus S3
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
Quelle einstellen
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')
Wiederherstellung von etcd aus dem heruntergeladenen Snapshot
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"
Starten Sie den etcd-Dienst
Nachdem der Snapshot wiederhergestellt wurde, starten Sie den etcd-Dienst neu, um die Änderungen zu übernehmen:
systemctl start etcd
Überprüfen Sie den Status des etcd-Clusters, wenn Sie dies wünschen
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.
Schlussfolgerung
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.
Best Practices für Sicherung und Wiederherstellung
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.