Auf dieser Seite wird beschrieben, wie Sie Sicherungen für Cassandra ohne Cloud Storage planen. Bei dieser Methode werden Sicherungen auf einem von Ihnen angegebenen Remoteserver und nicht in einem Cloud Storage-Bucket gespeichert. Apigee verwendet SSH, um mit dem Remote-Server zu kommunizieren.
Sie müssen die Sicherungen als cron-Jobs planen. Nachdem ein Sicherungszeitplan auf Ihren Hybrid-Cluster angewendet wurde, wird regelmäßig ein Kubernetes-Sicherungsjob gemäß dem Zeitplan in der Laufzeitebene ausgeführt. Der Job löst auf jedem Cassandra-Knoten in Ihrem Hybridcluster ein Sicherungsskript aus, das alle Daten auf dem Knoten erfasst, eine (komprimierte) Archivdatei der Daten erstellt und das Archiv an den in der Datei overrides.yaml angegeben Server sendet.
Die folgenden Schritte enthalten gängige Beispiele für die Ausführung bestimmter Aufgaben, z. B. das Erstellen eines SSH-Schlüsselpaars. Verwenden Sie die für Ihre Installation geeigneten Methoden.
Der Vorgang besteht aus folgenden Teilen:
Server und SSH einrichten
- Geben Sie einen Linux- oder Unix-Server für Ihre Sicherungen an. Dieser Server muss über SSH von Ihrer Apigee Hybrid-Laufzeitebene erreichbar sein. Es muss genügend Speicherplatz für die Sicherungen haben.
- Richten Sie einen SSH-Server auf dem Server ein bzw. prüfen Sie, ob ein sicherer SSH-Server konfiguriert ist.
- Erstellen Sie ein SSH-Schlüsselpaar und speichern Sie die Datei mit dem privaten Schlüssel in einem Pfad, auf den von der Hybrid-Laufzeitebene aus zugegriffen werden kann. Sie müssen ein leeres Passwort für Ihr Schlüsselpaar verwenden. Andernfalls schlägt die Sicherung fehl. Beispiel:
ssh-keygen -t rsa -b 4096 -C exampleuser@example.comEnter file in which to save the key (/Users/exampleuser/.ssh/id_rsa): $APIGEE_HOME/hybrid-files/certs/ssh_key Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in ssh_key Your public key has been saved in ssh_key.pub The key fingerprint is: SHA256:DWKo334XMZcZYLOLrd/8HNpjTERPJJ0mc11UYmrPvSA exampleuser@example.com The key's randomart image is: +---[RSA 4096]----+ | +. ++X| | . . o.=.*+| | . o . . o==o | | . . . =oo+o...| | . S +E oo .| | . . .. . o .| | . . . . o.. | | . ...o ++. | | .. .. +o+. | +----[SHA256]-----+Dabei ist exampleuser@example.com ein String. Jeder String, der im Befehl
ssh-keygenauf-Cfolgt, wird zu einem Kommentar, der im neu erstellten Schlüsselsshenthalten ist. Der Eingabestring kann ein beliebiger String sein. Wenn Sie einen Kontonamen im Format exampleuser@example.com verwenden, können Sie schnell feststellen, welches Konto mit dem Schlüssel verknüpft wird. - Erstellen Sie auf dem Sicherungsserver ein Nutzerkonto mit dem Namen
apigee. Achten Sie darauf, dass der neueapigee-Nutzer ein Basisverzeichnis unter/homehat. - Erstellen Sie auf dem Sicherungsserver das Verzeichnis
.sshim neuen Verzeichnis/home/apigee. - Kopieren Sie den öffentlichen Schlüssel (im vorherigen Beispiel
ssh_key.pub) in eine Datei mit dem Namenauthorized_keysim neuen Verzeichnis/home/apigee/.ssh. Beispiel:cd /home/apigee
mkdir .sshcd .sshvi authorized_keys - Erstellen Sie auf dem Sicherungsserver ein Sicherungsverzeichnis im Verzeichnis
/home/apigee/. Das Sicherungsverzeichnis kann ein beliebiges Verzeichnis sein, solange der NutzerapigeeZugriff darauf hat. Beispiel:cd /home/apigee
mkdir cassandra-backup - Testen Sie die Verbindung. Sie müssen sicherstellen, dass Ihre Cassandra-Pods über SSH eine Verbindung zu Ihrem Sicherungsserver herstellen können:
- Melden Sie sich in der Shell des Cassandra-Pods an. Beispiel:
kubectl exec -it -n APIGEE_NAMESPACE APIGEE_CASSANDRA_POD -- /bin/bash
Dabei ist APIGEE_CASSANDRA_POD der Name eines Cassandra-Pods. Ändern Sie dies in den Namen des Pods, von dem Sie eine Verbindung herstellen möchten.
- Stellen Sie per SSH eine Verbindung zu Ihrem Sicherungsserver her. Verwenden Sie dazu den privaten SSH-Schlüssel, der den Cassandra-Pod und die IP-Adresse des Servers bereitgestellt hat:
ssh -i /var/secrets/keys/key apigee@BACKUP_SERVER_IP
- Melden Sie sich in der Shell des Cassandra-Pods an. Beispiel:
Zeitplan und Ziel für Sicherung festlegen
Zeitplan und Ziel für Sicherungen werden in der Datei overrides.yaml festgelegt.
- Fügen Sie der Datei
overrides.yamlFolgendes hinzu:Parameter
cassandra: backup: enabled: true keyFile: "PATH_TO_PRIVATE_KEY_FILE" server: "BACKUP_SERVER_IP" storageDirectory: "/home/apigee/BACKUP_DIRECTORY" cloudProvider: "HYBRID" # required verbatim "HYBRID" (all caps) schedule: "SCHEDULE"
Beispiel-Helm
cassandra: backup: enabled: true keyFile: "private.key"# path relative to apigee-datastore path server: "34.56.78.90" storageDirectory: "/home/apigee/cassbackup" cloudProvider: "HYBRID" schedule: "0 2 * * *"
Beispiel
apigeectlcassandra: backup: enabled: true keyFile: "home/exampleuser/apigee-hybrid/hybrid-files/service-accounts/private.key" server: "34.56.78.90" storageDirectory: "/home/apigee/cassbackup" cloudProvider: "HYBRID" schedule: "0 2 * * *"
Wobei:
Attribut Beschreibung backup:enabledDie Sicherung ist standardmäßig deaktiviert. Sie müssen dieses Attribut auf truefestlegen.backup:keyFilePATH_TO_PRIVATE_KEY_FILE
Der Pfad in Ihrem lokalen Dateisystem zur privaten SSH-Schlüsseldatei, die Sie in dem Schritt, in dem Sie das SSH-Schlüsselpaar erstellt haben, mit
ssh_keybenannt haben.backup:serverBACKUP_SERVER_IP
Die IP-Adresse des Sicherungsservers.
backup:storageDirectoryBACKUP_DIRECTORY
Der Name des Sicherungsverzeichnisses auf dem Sicherungsserver. Dies muss ein Verzeichnis innerhalb
home/apigee(das Sicherungsverzeichnis heißtcassandra_backupin dem Schritt, in dem Sie das Sicherungsverzeichnis erstellt haben) sein.backup:cloudProviderHYBRIDLegen Sie für eine Remote-Serversicherung das Attribut
HYBRIDfest.backup:scheduleSCHEDULE
Die Zeit, zu der das Backup startet, angegeben in der Standard-Crontab-Syntax. Die Zeiten sind in der lokalen Zeitzone des Kubernetes-Clusters angegeben. Standard:
0 2 * * * - Wenden Sie die Sicherungskonfiguration auf den Speicherbereich Ihres Clusters an:
Helm
helm upgrade datastore apigee-datastore/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE.yaml
apigeectl$APIGEECTL_HOME/apigeectl apply -f OVERRIDES_FILE.yaml --datastore
Dabei ist OVERRIDES_FILE der Pfad zu der Überschreibungsdatei, die Sie gerade bearbeitet haben.
- Überprüfen Sie den Sicherungsjob. Beispiel:
kubectl get cronjob -n apigee
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE apigee-cassandra-backup 33 * * * * False 0 <none> 94s
Manuelle Sicherung starten
Sicherungsjobs werden automatisch gemäß dem Cron-Zeitplan ausgelöst, der in der Datei overrides.yaml unter cassandra.backup.schedule festgelegt ist. Sie können einen Sicherungsjob aber auch manuell mit dem folgenden Befehl starten:
kubectl create job -n APIGEE_NAMESPACE --from=cronjob/apigee-cassandra-backup MANUAL_BACKUP_JOB_NAME
Dabei ist MANUAL_BACKUP_JOB_NAME der Name eines zu erstellenden manuellen Sicherungsjobs.
Fehlerbehebung
-
Testen Sie die Verbindung von einem Cassandra-Pod aus. Sie müssen sicherstellen, dass Ihre Cassandra-Pods über SSH eine Verbindung zu Ihrem Sicherungsserver herstellen können:
-
Melden Sie sich in der Shell des Cassandra-Pods an. Beispiel:
kubectl exec -it -n APIGEE_NAMESPACE APIGEE_CASSANDRA_POD -- /bin/bash
Dabei ist APIGEE_CASSANDRA_POD der Name eines Cassandra-Pods. Ändern Sie dies in den Namen des Pods, von dem Sie eine Verbindung herstellen möchten.
-
Stellen Sie per SSH eine Verbindung zu Ihrem Sicherungsserver her. Verwenden Sie dazu den privaten SSH-Schlüssel, der den Cassandra-Pod und die IP-Adresse des Servers bereitgestellt hat:
ssh -i /var/secrets/keys/key apigee@BACKUP_SERVER_IP
-
Melden Sie sich in der Shell des Cassandra-Pods an. Beispiel:
- Wenn Sie vom Cassandra-Pod aus nicht auf Ihren Remote-Server zugreifen können, prüfen Sie noch einmal Ihre SSH-Konfiguration auf dem Remote-Server und ob das Upgrade des Datenspeichers erfolgreich war.
-
Sie können prüfen, ob Cassandra den richtigen privaten Schlüssel verwendet, indem Sie den folgenden Befehl ausführen, während Sie in Ihrem Cassandra-Pod angemeldet sind, und die Ausgabe mit dem von Ihnen erstellten privaten Schlüssel vergleichen:
cat /var/secrets/keys/key