In dieser Anleitung wird gezeigt, wie Sie die Infrastruktur des Autoscaling-Tools für Cloud Spanner einrichten. In dieser Anleitung werden zwei Möglichkeiten gezeigt, wie Sie die Infrastruktur gemäß Ihren Anforderungen einrichten können:
- Eine projektspezifische Bereitstellungstopologie. Diese Topologie wird für unabhängige Teams empfohlen, die ihre eigene Autoscaling-Konfiguration und -Infrastruktur verwalten möchten. Eine projektspezifische Bereitstellungstopologie ist auch ein guter Ausgangspunkt zum Testen der Funktionen des Autoscalings.
- Eine zentralisierte Bereitstellungstopologie. Diese Topologie wird für Teams empfohlen, die die Konfiguration und Infrastruktur einer oder mehrerer Spanner-Instanzen verwalten und gleichzeitig die Komponenten und die Konfiguration für Autoscaling an einem zentralen Ort aufbewahren. In der zentralisierten Topologie richten Sie zusätzlich zu einem Autoscaling-Projekt ein zweites Projekt ein, das in dieser Anleitung als Anwendungsprojekt bezeichnet wird. Das Anwendungsprojekt enthält die Anwendungsressourcen, einschließlich Cloud Spanner. Sie richten die Abrechnung und APIs für diese beiden Projekte in dieser Anleitung separat ein.
Dieses Dokument ist Teil der folgenden Reihe:
- Cloud Spanner automatisch skalieren
- Projektspezifisches oder zentralisiertes Autoscaling-Tool für Cloud Spanner bereitstellen (dieses Dokument)
- Verteiltes Autoscaling-Tool für Cloud Spanner bereitstellen
Diese Reihe richtet sich an IT-, Betriebs- und Site Reliability Engineering-Teams (SRE), die den operativen Aufwand reduzieren und die Kosten der Cloud Spanner-Bereitstellungen optimieren möchten.
Lernziele
- Stellen Sie Autoscaling mithilfe einer projektspezifischen oder zentralisierten Bereitstellungstopologie bereit.
- Vorhandene Cloud Spanner-Instanzen in den Terraform-Status importieren.
- Autoscaling konfigurieren.
Kosten
In dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Die Kosten für den Betrieb von Autoscaling-Komponenten bei der Implementierung dieser Anleitung sollten gleich null oder nahe null sein. Diese Schätzung enthält jedoch nicht die Kosten für die Cloud Spanner-Instanzen. Ein Beispiel für die Berechnung der Kosten für Cloud Spanner-Instanzen finden Sie unter Cloud Spanner-Autoscaling.
Nach Abschluss dieser Anleitung können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Hinweis
-
Aktivieren Sie Cloud Shell in der Google Cloud Console.
Klonen Sie in Cloud Shell das folgende GitHub-Repository:
git clone https://github.com/cloudspannerecosystem/autoscaler
Exportieren Sie Variablen für die Arbeitsverzeichnisse, in denen sich die Terraform-Konfigurationsdateien für jede Topologie befinden:
export AUTOSCALER_DIR="$(pwd)/autoscaler/terraform/cloud-functions/per-project"
Autoscaling-Projekt vorbereiten
In diesem Abschnitt bereiten Sie Ihr Autoscaling-Projekt für die Bereitstellung vor.
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.
Identity and Access Management (IAM), Resource Manager, App Engine Admin, Firestore, Cloud Spanner, Pub/Sub, Cloud Functions, Cloud Build, and Cloud Scheduler APIs aktivieren.
Legen Sie in Cloud Shell Umgebungsvariablen mit der ID Ihres Autoscaling-Projekts fest:
export PROJECT_ID=INSERT_YOUR_PROJECT_ID gcloud config set project "${PROJECT_ID}"
Legen Sie die Region und Zone und den App Engine-Standort fest (für Cloud Scheduler und Firestore für Autoscaling-Infrastruktur):
export REGION=us-central1 export ZONE=us-central1-c export APP_ENGINE_LOCATION=us-central
Erstellen Sie ein Dienstkonto für Terraform, um alle Ressourcen in Ihrer Infrastruktur zu erstellen:
gcloud iam service-accounts create terraformer --display-name "Terraform service account"
Weisen Sie dem Dienstkonto die Rolle "Projektinhaber" (
roles/owner
) zu:gcloud projects add-iam-policy-binding "${PROJECT_ID}" \ --member "serviceAccount:terraformer@${PROJECT_ID}.iam.gserviceaccount.com" \ --role roles/owner
Erstellen Sie eine Dienstkonto-Schlüsseldatei:
gcloud iam service-accounts keys create \ --iam-account "terraformer@${PROJECT_ID}.iam.gserviceaccount.com" "${AUTOSCALER_DIR}/key.json"
Wenn Ihr Projekt noch keine Firestore-Instanz hat, erstellen Sie eine:
gcloud app create --region="${APP_ENGINE_LOCATION}" gcloud alpha firestore databases create --region="${APP_ENGINE_LOCATION}"
Anwendungsprojekt vorbereiten
Wenn Sie Autoscaling im projektspezifischen Modus bereitstellen, können Sie mit dem Abschnitt Autoscaling bereitstellen fortfahren.
In der zentralisierten Bereitstellungstopologie befinden sich alle Komponenten des Autoscalings im selben Projekt. Die Spanner-Instanzen können sich in verschiedenen Projekten befinden.
In diesem Abschnitt konfigurieren Sie das Anwendungsprojekt, in dem sich Ihre Spanner-Instanz befindet. Die Spanner-Instanz stellt eine oder mehrere bestimmte Anwendungen bereit. In dieser Anleitung wird davon ausgegangen, dass die Teams, die für diese Anwendungen zuständig sind, sich von dem für die Autoscaling-Infrastruktur und -Konfiguration zuständigen Team unterscheiden.
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.
Spanner API aktivieren.
Legen Sie in Cloud Shell die Umgebungsvariablen fest:
export APP_PROJECT_ID=INSERT_YOUR_APP_PROJECT_ID
Ersetzen Sie INSERT_YOUR_APP_PROJECT_ID durch die ID des Anwendungsprojekts.
Weisen Sie dem erstellten Dienstkonto
terraformer
die Inhaberrolle (roles/owner
) im Anwendungsprojekt zu:gcloud projects add-iam-policy-binding "${APP_PROJECT_ID}" \ --member "serviceAccount:terraformer@${PROJECT_ID}.iam.gserviceaccount.com" \ --role roles/owner
Wenn Sie dem Dienstkonto diese Rolle zuweisen, kann es Ressourcen erstellen.
Legen Sie die Anwendungsprojekt-ID in der entsprechenden Terraform-Umgebungsvariable fest:
export TF_VAR_app_project_id="${APP_PROJECT_ID}"
Autoscaling bereitstellen
In diesem Abschnitt stellen Sie die Komponenten für das Autoscaling mithilfe von vorkonfigurierten Terraform-Modulen bereit. Die Terraform-Dateien, die diese Module definieren, befinden sich in den folgenden Verzeichnissen:
Verzeichnis | Verzeichnisinhalt |
---|---|
terraform/ |
Top-Level-Konfiguration, die alle Bereitstellungsoptionen und die wiederverwendbaren Module enthält. |
terraform/cloud-functions/per-project/ |
Anleitung für die projektspezifische Bereitstellungsoption. |
terraform/modules/autoscaler-functions/ |
Konfiguration der Poller- und Scaler-Cloud Functions-Funktionen und Pub/Sub-Themen |
terraform/modules/scheduler/ |
Konfiguration von Cloud Scheduler zum Auslösen von Abfragen. |
terraform/modules/spanner/ |
Konfiguration der Cloud Spanner-Datenbank |
terraform/cloud-functions/centralized/ |
Anleitung für die zentralisierte Bereitstellungsoption. |
Legen Sie in Cloud Shell die Projekt-ID, die Region und die Zone in den entsprechenden Terraform-Umgebungsvariablen fest:
export TF_VAR_project_id="${PROJECT_ID}" export TF_VAR_region="${REGION}" export TF_VAR_zone="${ZONE}"
In diesem Schritt richten Sie eine vorhandene Instanz ein, die das Autoscaling überwachen soll, oder Sie erstellen eine neue Instanz und richten eine ein.
Wenn Sie bereits eine Spanner-Instanz haben, legen Sie den Namen der Instanz in der folgenden Variable fest:
export TF_VAR_spanner_name=INSERT_YOUR_SPANNER_INSTANCE_NAME
Wenn Sie eine neue Spanner-Instanz zum Testen von Autoscaling erstellen möchten, legen Sie die folgende Variable fest:
export TF_VAR_terraform_spanner=true
Die von Terraform erstellte Spanner-Instanz heißt
autoscale-test
.Weitere Informationen zum Einrichten von Terraform zum Verwalten Ihrer Spanner-Instanz finden Sie unter Spanner-Instanzen importieren.
Legen Sie als Arbeitsverzeichnis das projektspezifische Terraform-Verzeichnis fest:
cd "${AUTOSCALER_DIR}" terraform init
Mit diesem Befehl wird auch das projektspezifische Terraform-Verzeichnis initialisiert.
Importieren Sie die vorhandene App Engine-Anwendung in den Terraform-Status:
terraform import module.scheduler.google_app_engine_application.app "${PROJECT_ID}"
Erstellen Sie die Autoscaling-Infrastruktur:
terraform apply -parallelism=2
In der folgenden Meldung werden Sie aufgefordert, zu prüfen, ob die Liste der Ressourcen, die von Terraform erstellt werden sollen, korrekt ist:
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value:
Nachdem Sie die Ressourcen überprüft haben, geben Sie
yes
ein, wenn Sie dazu aufgefordert werden.Wenn Sie diesen Befehl in Cloud Shell ausführen, kann die folgende Fehlermeldung angezeigt werden:
"Error: cannot assign requested address"
Dies ist ein bekanntes Problem im Terraform-Google-Anbieter. Führen Sie in diesem Fall den folgenden Befehl aus:
terraform apply -parallelism=1.
.
Spanner-Instanzen importieren
Wenn Sie vorhandene Spanner-Instanzen haben, die für die Verwaltung durch Terraform importiert werden sollen, folgen Sie der Anleitung in diesem Abschnitt. Andernfalls fahren Sie mit Autoscaling konfigurieren fort.
Listen Sie Ihre Spanner-Instanzen in Cloud Shell auf:
gcloud spanner instances list
Legen Sie die folgende Variable mit dem Instanznamen fest, der automatisch skaliert werden soll:
SPANNER_INSTANCE_NAME=YOUR_SPANNER_INSTANCE_NAME
Erstellen Sie eine Terraform-Konfigurationsdatei mit einer leeren
google_spanner_instance
-Ressource:echo "resource \"google_spanner_instance\" \"${SPANNER_INSTANCE_NAME}\" {}" > "${SPANNER_INSTANCE_NAME}.tf"
Importieren Sie die Spanner-Instanz in den Terraform-Status:
terraform import "google_spanner_instance.${SPANNER_INSTANCE_NAME}" "${SPANNER_INSTANCE_NAME}"
Wenn der Import abgeschlossen ist, aktualisieren Sie die Terraform-Konfigurationsdatei für die Instanz mit dem tatsächlichen Instanzattribut:
terraform state show -no-color "google_spanner_instance.${SPANNER_INSTANCE_NAME}" \ | grep -vE "(id|num_nodes|state|timeouts).*(=|\{)" \ > "${SPANNER_INSTANCE_NAME}.tf"
Wenn weitere Spanner-Instanzen importiert werden sollen, wiederholen Sie den Importvorgang.
Autoscaling konfigurieren
Nach der Bereitstellung des Autoscalings konfigurieren Sie dessen Parameter.
Rufen Sie in der Google Cloud Console die Seite „Cloud Scheduler“ auf.
Klicken Sie auf das Kästchen neben dem Job
poll-main-instance-metrics
, der durch die Autoscaling-Bereitstellung erstellt wurde.Klicken Sie auf Bearbeiten.
Ändern Sie die im Nutzlastfeld angezeigten Parameter für das Autoscaling.
Das folgende Beispiel zeigt eine Nutzlast:
[ { "projectId": "my-spanner-project", "instanceId": "spanner1", "scalerPubSubTopic": "projects/my-spanner-project/topics/spanner-scaling", "units": "NODES", "minSize": 1, "maxSize": 3 },{ "projectId": "different-project", "instanceId": "another-spanner1", "scalerPubSubTopic": "projects/my-spanner-project/topics/spanner-scaling", "units": "PROCESSING_UNITS", "minSize": 500, "maxSize": 3000, "scalingMethod": "DIRECT" } ]
Die Nutzlast wird über ein JSON-Array definiert. Jedes Element im Array stellt eine Spanner-Instanz dar, die denselben Autoscaling-Jobzeitplan hat.
Weitere Informationen zu den Parametern und ihren Standardwerten finden Sie unter
README
für die Poller-Komponente.Klicken Sie auf Aktualisieren, um die Änderungen zu speichern.
Das Autoscaling ist jetzt konfiguriert und bereit, mit dem Monitoring und der Skalierung Ihrer Instanzen beim nächsten geplanten Job zu beginnen.
Wenn die JSON-Nutzlast Syntaxfehler enthält, können Sie diese in der Google Cloud Console auf der Seite Log-Explorer als Logeinträge der Funktion
tf-poller-function
prüfen.Das folgende Beispiel zeigt einen möglichen Fehler:
SyntaxError: Unexpected token errortext in JSON at position 15 JSON.parse
Um Syntaxfehler zu vermeiden, sollten Sie einen Editor verwenden, mit dem JSON neu formatiert und validiert werden kann.
Autoscaling überwachen
In diesem Schritt richten Sie das Monitoring für die Cloud Functions-Funktionen Poller und Scaler ein.
Öffnen Sie in der Google Cloud Console die Seite Logs-Explorer.
Klicken Sie auf Abfragevorschau und geben Sie den folgenden Filter in Query Builder ein:
resource.type="cloud_function" resource.labels.function_name=~"tf-.*-function"
Klicken Sie auf Abfrage ausführen.
Unter "Abfrageergebnisse" können Sie alle Nachrichten aus Autoscaling-Funktionen anzeigen. Da der Poller alle 2 Minuten ausgeführt wird, müssen Sie die Abfrage möglicherweise noch einmal ausführen, um die Lognachrichten zu erhalten.
Wenn Sie nur Nachrichten von Scaler-Cloud Functions-Funktionen sehen möchten, klicken Sie auf das Feld Abfragevorschau und ersetzen Sie den vorherigen Filter im Textfeld Query Builder durch Folgendes:
resource.type="cloud_function" resource.labels.function_name="tf-scaler-function"
Klicken Sie auf Abfrage ausführen.
Unter Abfrageergebnisse sehen Sie aufgrund des Filters, der auf die Textnutzlast angewendet wird, nur die Nachrichten aus der Scaler-Funktion, die sich auf Skalierungsvorschläge und -entscheidungen beziehen.
Mit einer Filterabfrage oder ähnlichen Filtern können Sie logbasierte Messwerte erstellen. Diese Messwerte sind nützlich für Funktionen, z. B. zum Erfassen der Häufigkeit von Autoscaling-Ereignissen oder in Cloud Monitoring-Diagrammen und Benachrichtigungsrichtlinien.
Autoscaling testen
In diesem Abschnitt prüfen Sie die Funktion des Autoscalings, indem Sie die Mindestinstanzgröße ändern und die Logs überwachen.
Wenn Sie das Autoscaling mit einer Testdatenbank bereitstellen, wird das Autoscaling so konfiguriert, dass NODES
als Einheit für die Rechenkapazität verwendet wird. Sie können prüfen, ob das Tool funktioniert, indem Sie die Einstellung für die Mindestgröße (minSize
) in 2 ändern. Wenn das Tool wie erwartet ausgeführt wird, skaliert die Cloud Spanner-Instanz auf zwei Knoten. Wenn Sie für diese Anleitung eine vorhandene Datenbank verwendet haben, sehen Sie möglicherweise andere Werte.
Rufen Sie in der Google Cloud Console die Seite Cloud Scheduler auf.
Klicken Sie auf das Kästchen neben dem Job
poll-main-instance-metrics
, der durch die Autoscaling-Bereitstellung erstellt wurde.Klicken Sie auf Bearbeiten.
Ändern Sie im Feld Jobnutzlast den Wert von
minSize
von1
in2
:"minSize": 2
Klicken Sie auf Aktualisieren, um die Änderungen zu speichern.
Rufen Sie die Seite Log-Explorer auf.
Klicken Sie auf Abfragevorschau und geben Sie den folgenden Filter in Query Builder ein:
resource.type="cloud_function" resource.labels.function_name="tf-scaler-function"
Klicken Sie auf Abfrage ausführen.
Klicken Sie auf Zu jetzt springen, bis die folgende Lognachricht angezeigt wird:
Scaling spanner instance to 2 NODES
Wechseln Sie in der Google Cloud Console zur Seite der Cloud Spanner-Konsole, um zu prüfen, ob Cloud Spanner auf 2 Knoten hochskaliert wurde.
Klicken Sie auf die Instanz
autoscale-test
.Prüfen Sie im Überblick, ob die Anzahl der Knoten jetzt auf 2 eingestellt ist. Dieser Schnelltest zeigt ein horizontal skaliertes Ereignis durch Ändern der Autoscaling-Parameter. Sie können einen Lasttest mit einem Tool wie YCSB ausführen, um Autoscaling zu simulieren, das basierend auf der Nutzung ein Skalierungsereignis auslöst.
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Projekt löschen
- Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.
Nächste Schritte
- Autoscaling-Architektur
- Autoscaling im verteilten Modus bereitstellen
- Empfohlene Schwellenwerte für Cloud Spanner
- CPU-Auslastungsmesswerten und Latenzmesswerten in Cloud Spanner
- Best Practices für Schemadesign in Cloud Spanner
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center