In dieser Anleitung erfahren Sie, wie Sie die Infrastruktur des Autoscaling-Tools einrichten. für Spanner mithilfe einer verteilten Bereitstellungstopologie. In der in dieser Anleitung vorgestellten Bereitstellungsoption befinden sich alle Komponenten von Autoscaling in einem einzigen Projekt, mit Ausnahme von Cloud Scheduler, dem Forwarder-Thema und der entsprechenden Funktion.
Dieses Tutorial richtet sich an IT-, Betriebs- und Site Reliability Engineering. Teams, die den operativen Aufwand reduzieren und die Kosten ihrer ihre Spanner-Bereitstellungen durchführen. Dieses Dokument ist Teil der folgenden Reihe:
- Autoscaling-Spanner
- Projektspezifisches oder zentralisiertes Autoscaling-Tool für Spanner bereitstellen
- Verteiltes Autoscaling-Tool für Spanner bereitstellen (dieses Dokument)
Die Topologie für verteilte Bereitstellungen vereint die folgenden Vorteile projektspezifischer und zentralisierter Bereitstellungen:
- Teams, die Inhaber der Spanner-Instanzen sind, werden Anwendungsteams genannt und verwalten Autoscaling-Konfigurationsparameter für ihre Instanzen mit eigenen Cloud Scheduler-Jobs.
- Abgesehen von den Konfigurationsparametern verwaltet ein zentrales Team den Rest der Autoscaling-Infrastruktur und minimiert den Verwaltungsaufwand.
Architektur
Das folgende Diagramm zeigt die Autoscaling-Architektur in einer verteilten Bereitstellungstopologie:
Für eine Erläuterung der Autoscaling-Komponenten und der einzelnen nummerierten Schritte im Ereignisfluss finden Sie unter Autoscaling von Spanner.
Forwarder-Funktion
Cloud Scheduler kann nur Nachrichten zu Themen im selben Projekt veröffentlichen. In dieser Anleitung wird für die verteilte Topologie eine Zwischenkomponente namens Forwarder-Funktion verwendet.
Die Forwarder-Funktion übernimmt Nachrichten, die von Cloud Scheduler in Pub/Sub veröffentlicht wurden, überprüft ihre JSON-Syntax und leitet sie an das Poller-Pub/Sub-Thema weiter. Das Thema kann zu einem separaten Projekt für Cloud Scheduler gehören.
Das folgende Diagramm zeigt die Komponenten, die für den Weiterleitungsmechanismus verwendet werden:
Wie im vorherigen Diagramm gezeigt, befinden sich die Spanner-Instanzen in Projekten Anwendung 1 und Anwendung 2 benannt:
- Cloud Scheduler ist dasselbe Projekt wie Spanner Instanzen.
(2a) Cloud Scheduler veröffentlicht seine Nachrichten im Forwarder-Thema in den Projekten "Anwendung 1" und "Anwendung 2".
(2b) Die Forwarder-Funktion liest Nachrichten aus dem Forwarder-Thema.
(2c) Die Forwarder-Funktion leitet Nachrichten an das Abfragethema im Autoscaling-Projekt weiter.
Die Poller-Funktion liest die Nachrichten aus dem Abfragethema und Der Prozess wird fortgesetzt, wie unter Autoscaling von Spanner beschrieben.
Lernziele
- Autoscaling mit einem verteilten Bereitstellungsmodell bereitstellen
- Importieren Sie vorhandene Spanner-Instanzen in den Terraform-Zustand.
- Autoscaling konfigurieren.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Wenn Sie den Anweisungen in dieser Anleitung folgen, sollten die Kosten für den Betrieb von Autoscaling-Komponenten gleich null oder nahe null sein. Diese Schätzung enthält jedoch nicht die Kosten für die Spanner- Instanzen. Beispiel für die Berechnung der Kosten von Spanner-Instanzen Siehe Autoscaling von Spanner.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Hinweise
In einer Topologie für verteilte Bereitstellungen richten Sie neben einem Autoscaling-Projekt ein zweites Projekt ein, das in dieser Anleitung als Anwendungsprojekt bezeichnet wird. Das Anwendungsprojekt enthält die Anwendungsressourcen, einschließlich Spanner. Sie richten die Abrechnung und APIs für diese beiden Projekte in dieser Anleitung separat ein.
-
In the Google Cloud console, activate Cloud Shell.
Klonen Sie in Cloud Shell das folgende Repository:
git clone https://github.com/cloudspannerecosystem/autoscaler
Exportieren Sie Variablen für die Arbeitsverzeichnisse:
export AUTOSCALER_DIR="$(pwd)/autoscaler/terraform/cloud-functions/distributed/autoscaler-project" export APP_DIR="$(pwd)/autoscaler/terraform/cloud-functions/distributed/app-project"
Autoscaling-Projekt vorbereiten
In diesem Abschnitt bereiten Sie die Bereitstellung des Projekts vor, das die gesamte zentralisierte Autoscaling-Infrastruktur enthält, mit Ausnahme von Cloud Scheduler.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Make sure that billing is enabled for your Google Cloud project.
Enable the Identity and Access Management (IAM), Resource Manager, App Engine Admin, Firestore, Spanner, Pub/Sub, Cloud Run functions, and Cloud Build APIs.
Legen Sie in Cloud Shell Umgebungsvariablen mit der ID Ihres Autoscaling-Projekts fest:
export AUTO_SCALER_PROJECT_ID=INSERT_YOUR_PROJECT_ID gcloud config set project "${AUTO_SCALER_PROJECT_ID}"
Legen Sie die Region und Zone fest. und App Engine-Standort (für Firestore) für die Autoscaling-Infrastruktur:
export AUTO_SCALER_REGION=us-central1 export AUTO_SCALER_ZONE=us-central1-c export AUTO_SCALER_APP_ENGINE_LOCATION=us-central
Dienstkonto erstellen:
gcloud iam service-accounts create terraformer --display-name "Terraform service account"
Terraform verwendet dieses Konto, um alle Ressourcen in der Infrastruktur zu erstellen.
Weisen Sie dem Dienstkonto die Rolle "Projektinhaber" zu:
gcloud projects add-iam-policy-binding "${AUTO_SCALER_PROJECT_ID}" \ --member "serviceAccount:terraformer@${AUTO_SCALER_PROJECT_ID}.iam.gserviceaccount.com" \ --role roles/owner
Erstellen Sie eine DienstkontoSchlüsseldatei:
gcloud iam service-accounts keys create \ --iam-account "terraformer@${AUTO_SCALER_PROJECT_ID}.iam.gserviceaccount.com" "${AUTOSCALER_DIR}/key.json"
Wenn Ihr Projekt kein Firestore-Element hat erstellen Sie eine:
gcloud app create --region="${AUTO_SCALER_APP_ENGINE_LOCATION}" gcloud alpha firestore databases create --region="${AUTO_SCALER_APP_ENGINE_LOCATION}"
Autoscaling bereitstellen
In diesem Abschnitt stellen Sie die Komponenten, aus denen Autoscaling besteht, mithilfe von Terraform-Dateien in den folgenden Verzeichnissen bereit:
Verzeichnis | Verzeichnisinhalt |
---|---|
terraform/ |
Top-Level-Konfiguration, die alle Bereitstellungsoptionen und die wiederverwendbaren Module enthält. |
|
Konfiguration für das Projekt, in dem sich das Autoscaling befindet Delegiert das Autoscaling-Modul. |
terraform/modules/autoscaler-functions |
Konfiguration der Cloud Run-Funktionen für Poller und Scaler sowie Pub/Sub-Themen. |
Legen Sie in Cloud Shell die Projekt-ID, die Region, die Zone und den App Engine-Standort in den entsprechenden Terraform-Umgebungsvariablen fest:
export TF_VAR_project_id="${AUTO_SCALER_PROJECT_ID}" export TF_VAR_region="${AUTO_SCALER_REGION}" export TF_VAR_zone="${AUTO_SCALER_ZONE}" export TF_VAR_location="${AUTO_SCALER_APP_ENGINE_LOCATION}"
Ändern Sie das Verzeichnis in das Terraform-Verzeichnis scaler-project und initialisieren Sie es:
cd "${AUTOSCALER_DIR}" terraform init
Erstellen Sie die Autoscaling-Infrastruktur:
terraform apply -parallelism=2
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
Anwendungsprojekt vorbereiten
In diesem Abschnitt bereiten Sie im Projekt, das die Spanner-Instanzen enthält, die Bereitstellung des Themas und der Funktion von Cloud Scheduler und Forwarder ein.
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Make sure that billing is enabled for your Google Cloud project.
Enable the Identity and Access Management, Resource Manager, App Engine Admin, Firestore, Spanner, Pub/Sub, Cloud Run functions, and Cloud Build APIs.
Legen Sie in Cloud Shell die Umgebungsvariablen mit der ID des Anwendungsprojekts fest:
export APP_PROJECT_ID=INSERT_YOUR_APP_PROJECT_ID gcloud config set project "${APP_PROJECT_ID}"
Legen Sie die Region und Zone fest. und App Engine-Standort für das Anwendungsprojekt:
export APP_REGION=us-central1 export APP_ZONE=us-central1-c export APP_APP_ENGINE_LOCATION=us-central
Dienstkonto erstellen damit Terraform die Ressourcen in Ihrer Infrastruktur erstellen kann:
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 "${APP_PROJECT_ID}" \ --member "serviceAccount:terraformer@${APP_PROJECT_ID}.iam.gserviceaccount.com" \ --role roles/owner
Erstellen Sie eine DienstkontoSchlüsseldatei:
gcloud iam service-accounts keys create \ --iam-account "terraformer@${APP_PROJECT_ID}.iam.gserviceaccount.com" "${APP_DIR}/key.json"
Erstellen Sie eine Anwendung, um Cloud Scheduler zu aktivieren:
gcloud app create --region="${APP_APP_ENGINE_LOCATION}"
Sie müssen keine Firestore-Datenbank erstellen, da der Status im Autoscaling-Projekt gespeichert wird.
Infrastruktur des Anwendungsprojekts bereitstellen
Die Terraform-Komponenten des Anwendungsprojekts befinden sich in den folgenden Verzeichnissen:
terraform/
: Top-Level-Konfiguration, die alle Bereitstellungsoptionen und die wiederverwendbaren Module enthältterraform/distributed/app-project/
: Konfiguration für die Anwendungsprojekt, in dem sich Spanner befindet. Verwendet die folgenden Module:terraform/modules/scheduler/
: Konfiguration von Cloud Scheduler zum Auslösen von Abfragenterraform/modules/spanner/
: Konfiguration der Spanner-Datenbankterraform/modules/forwarder/
: Konfiguration der Forwarder Cloud Run-Funktionen
In diesem Abschnitt stellen Sie mithilfe der Terraform-Dateien die Komponenten des Anwendungsprojekts bereit.
Legen Sie in Cloud Shell die Projekt-ID, Region, Zone und den App Engine-Standort in den entsprechenden Terraform-Umgebungsvariablen fest:
export TF_VAR_project_id="${APP_PROJECT_ID}" export TF_VAR_region="${APP_REGION}" export TF_VAR_zone="${APP_ZONE}" export TF_VAR_location="${APP_APP_ENGINE_LOCATION}"
Legen Sie die Projekt-ID fest, unter der der Autoscaling-Status gespeichert wird:
export TF_VAR_state_project_id="${AUTO_SCALER_PROJECT_ID}"
Der Autoscaling-Status enthält die Zeitstempel für die Skalierungsereignisse, die für jede Instanz ausgelöst wurden.
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
.Wenn Sie keine neue Spanner-Instanz erstellen möchten, da Sie bereits eine Instanz haben, die Autoscaling überwachen soll, legen Sie den Namen Ihrer Instanz in der folgenden Variable fest:
export TF_VAR_spanner_name=INSERT_YOUR_SPANNER_INSTANCE_NAME
Weitere Informationen zur Einrichtung von Terraform zum Verwalten Ihrer Spanner-Instanz finden Sie unter Spanner-Instanzen importieren.
Wechseln Sie in das Verzeichnis
Terraform
app-project und initialisieren Sie es:cd "${APP_DIR}" terraform init
Erstellen Sie die Infrastruktur im Anwendungsprojekt:
terraform import module.scheduler.google_app_engine_application.app "${APP_PROJECT_ID}" terraform apply -parallelism=2
Prüfen Sie, ob die Liste der von Terraform zu erstellenden Ressourcen korrekt ist. Geben Sie dann
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
Forwarder-Cloud Run-Funktionen zum Veröffentlichen im Poller-Thema autorisieren
Wechseln Sie in Cloud Shell wieder zum Autoscaling-Terraform-Projektverzeichnis und überprüfen Sie, ob die Terraform-Variablen richtig festgelegt sind:
cd "${AUTOSCALER_DIR}" export TF_VAR_project_id="${AUTO_SCALER_PROJECT_ID}" export TF_VAR_region="${AUTO_SCALER_REGION}" export TF_VAR_zone="${AUTO_SCALER_ZONE}" export TF_VAR_location="${AUTO_SCALER_APP_ENGINE_LOCATION}"
Legen Sie die Terraform-Variablen für Ihre Forwarder-Dienstkonten fest. Aktualisieren Sie Ihre Dienstkonten und fügen Sie sie nach Bedarf hinzu:
export TF_VAR_forwarder_sa_emails='["serviceAccount:forwarder-sa@'"${APP_PROJECT_ID}"'.iam.gserviceaccount.com"]' terraform apply -parallelism=2
Prüfen Sie, ob die Liste der von Terraform zu erstellenden Ressourcen korrekt ist. Geben Sie dann
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.
Deployment prüfen
Wenn die Infrastruktur für das Autoscaling bereit ist, können Sie ihre Parameter konfigurieren. Weitere Informationen finden Sie unter Autoscaling konfigurieren.
Da Sie in dieser Anleitung ein verteiltes Deployment erstellen, haben Logs die folgenden Attribute:
- Logs aus den Funktionen Poller und Scaler werden in der Log-Explorer für das Autoscaling-Projekt.
- Logs zu Syntaxfehlern in der JSON-Konfiguration der Cloud Scheduler-Nutzlast werden im Log-Explorer für jedes Anwendungsprojekt angezeigt. Dadurch kann das für eine bestimmte Spanner-Instanz zuständige Team seine Konfigurationsprobleme unabhängig beheben.
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
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Nächste Schritte
- Autoscaling-Architektur
- Weitere Informationen zur Bereitstellung von Autoscaling im projektspezifischen oder zentralisierten Modus
- Weitere Informationen zu Spanner empfohlene Grenzwerte
- Weitere Informationen zu Spanner CPU-Auslastungsmesswerte und Latenzmesswerte.
- Weitere Informationen zu Spanner Best Practices für das Schemadesign.
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center