In diesem Dokument wird beschrieben, wie Sie einen hochverfügbaren, multiregionalen Cloud Run-Dienst mit automatisierten Failover- und Failback-Funktionen konfigurieren und bereitstellen.
Der Cloud Run-Dienstzustand zeigt den aggregierten Zustand Ihres Dienstes in jeder Region mithilfe von serverlosen Netzwerk-Endpunktgruppen (NEGs) an.
Wenn Sie öffentlichen (externen) Traffic weiterleiten möchten, konfigurieren Sie Service Health mit einem globalen externen Application Load Balancer.
Wenn Sie privaten (internen) Traffic weiterleiten möchten, konfigurieren Sie Service Health mit einem regionenübergreifenden internen Application Load Balancer.
Funktionsweise
Beim automatischen Failover werden eingehende Anfragen von einem globalen externen Application Load Balancer oder einem regionenübergreifenden internen Application Load Balancer über regionale serverlose NEGs an Ihre Cloud Run-Dienste weitergeleitet. Einzelne Containerinstanzen führen Bereitschaftsprüfungen aus, die von Cloud Run aggregiert werden, um den allgemeinen Systemzustand jedes regionalen Dienstes zu ermitteln.
Ein Cloud Run-Dienst in einer Region ist fehlerfrei und empfängt Traffic, wenn mindestens 60% seiner Instanzen die Bereitschaftsprüfungen bestehen. Wenn eine Region fehlerhaft wird, leitet der Load Balancer den Traffic automatisch an eine fehlerfreie Region weiter. Sobald sich die fehlerhafte Region erholt hat, stellt der Load Balancer den Traffic dorthin schrittweise wieder her.
Beschränkungen
Für den Cloud Run-Dienstzustand gelten die folgenden Einschränkungen:
- Sie müssen mindestens eine Mindestinstanz auf Dienst- oder Überarbeitungsebene pro Region konfigurieren, um den Zustand zu berechnen. Sie können auch den Messwert Anzahl der Containerinstanzen in Cloud Monitoring verwenden, um die erforderlichen Mindestinstanzen für Ihre Regionen zu schätzen.
- Für Failover sind mindestens zwei Dienste aus verschiedenen Regionen erforderlich. Andernfalls wird die Fehlermeldung
no healthy upstreamangezeigt, wenn ein Dienst fehlschlägt. - Sie können keine URL-Maske oder Tags in serverlosen NEGs konfigurieren.
- Wenn ein Cloud Run-Dienst gelöscht wird, meldet Cloud Run dem Load Balancer keinen fehlerhaften Status.
- Beim Starten einer neuen Instanz wird die erste Bereitschaftsprüfung nicht berücksichtigt. Daher kann eine Anfrage kurzzeitig an einen neu gestarteten Dienst weitergeleitet werden, bevor dieser fehlerhaft wird.
- Der Zustand des Cloud Run-Dienstes wird für alle Instanzen berechnet.
Versionen ohne Prüfungen und neu gestartete Instanzen, die ihre erste Bereitschaftsprüfung noch nicht abgeschlossen haben, werden als unbekannt behandelt. Während einer Umstellung des gesamten Traffics zwischen Überarbeitungen kann Service Health kurzzeitig
UNKNOWNmelden, während neue Instanzen gestartet werden und ihre erste Bereitschaftsprüfung abschließen. Der Load Balancer behandelt unbekannte Instanzen als fehlerfrei. - Die Berechnung des Dienstzustands kann zu ungenauen Ergebnissen führen, wenn Instanzen schnell abstürzen.
Best Practices
Sie können eine Kombination aus Bereitschaftsprüfungen, Aufteilung des Traffics und Mindestanzahl von Instanzen verwenden, um sichere, schrittweise Roll-outs durchzuführen. So können Sie den Zustand einer neuen Version in einer einzelnen „Canary“-Region prüfen, bevor Sie sie hochstufen. Dadurch wird sichergestellt, dass der Load Balancer Traffic nur an fehlerfreie regionale Backends sendet.
Wenn Sie Prüfungen für Ihre eigene Anwendung konfigurieren, fügen Sie Ihrem Dienstcode einen HTTP/1-Endpunkt (den Cloud Run-Standard, nicht HTTP/2) hinzu, um auf die Prüfung zu reagieren. Der Endpunktname (z. B. /startup, /health oder /are_you_ready) muss mit dem path in der Prüfungskonfiguration übereinstimmen. HTTP-Systemdiagnose-Endpunkte sind extern zugänglich und folgen den gleichen Prinzipien wie alle anderen extern zugänglichen HTTP-Dienstendpunkte.
Empfohlener Einführungsprozess
Sie können eine Dienstüberarbeitung für einen vorhandenen Cloud Run-Dienst bereitstellen, der keine Bereitschaftsprüfung oder Cloud Run Service Health verwendet. Führen Sie diesen Vorgang für jede Region einzeln aus, um eine neue Überarbeitung sicher bereitzustellen:
Stellen Sie die neue Version in einer einzelnen „Canary“-Region mit einer konfigurierten Bereitschaftsprüfung bereit.
Senden Sie einen kleinen Teil des Traffics (z. B. 1%) an die neue Version.
Verwenden Sie eine Mindestanzahl von Instanzen ungleich null auf Dienstebene und nicht auf Überarbeitungsebene.
Prüfen Sie den Messwert für die Bereitschaftsprüfung (
run.googleapis.com/container/instance_count_with_readiness), um sicherzustellen, dass neue Instanzen fehlerfrei sind.Erhöhen Sie den Traffic-Prozentsatz für die neue Version schrittweise. Überwachen Sie während der Hochskalierung den regionalen Cloud Run-Dienstzustand (
run.googleapis.com/service_health_count), der vom Load Balancer verwendet wird. Der Cloud Run-Dienst meldet den Service HealthUNKNOWN, bis genügend Traffic an die neue Version weitergeleitet wird.Sobald die Version 100% des Traffics empfängt und der regionale Cloud Run-Dienst stabil und fehlerfrei ist, wiederholen Sie diesen Vorgang für alle anderen Regionen.
Für Dienste, die bereits Cloud Run Service Health verwenden, können Sie einen zweistufigen Roll-out parallel in mehreren Regionen ausführen, um UNKNOWN-Meldungen zu vermeiden:
Leiten Sie einen Teil des Traffics an die neue Version weiter. Warten Sie, bis neue Instanzen gestartet sind und die Bereitschaftsprüfungen bestehen.
Leiten Sie 100% des Traffics an die neue Version weiter.
Anleitung: Automatisches Failover konfigurieren
In dieser Anleitung erfahren Sie, wie Sie eine Go-Beispielanwendung in zwei Regionen bereitstellen, einen globalen externen Application Load Balancer mit serverlosen NEGs einrichten und ein automatisiertes Failover testen.
In dieser Anleitung wird Folgendes beschrieben:
- Beispielanwendung vorbereiten
- Cloud Run-Dienste in zwei Regionen mit Bereitschaftsprüfungen bereitstellen
- Globalen externen Application Load Balancer einrichten
- Dienste über die serverlose NEG hinzufügen
- Failover testen
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.
- Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie einfach ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Aktivieren Sie die APIs für Artifact Registry, Cloud Build, Cloud Run Admin API, Network Services API und Compute Engine, falls sie noch nicht aktiviert sind.
Erforderliche Rollen zum Aktivieren von APIs
Zum Aktivieren von APIs benötigen Sie die Berechtigung
serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Inhaberrolle (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollen- Installieren und initialisieren Sie die gcloud CLI.
- Aktualisieren Sie die Komponenten:
gcloud components update
- Legen Sie die in dieser Anleitung verwendeten Konfigurationsvariablen fest:
Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID in Google Cloud .PROJECT_ID= gcloud config set core/project PROJECT_ID PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)") SERVICE=health-example REGION_A=us-west1 REGION_B=europe-west1
Erforderliche Rollen festlegen
Wenn Sie die Bereitstellung aus der Quelle mit Build durchführen möchten, müssen Sie oder Ihr Administrator dem Cloud Build-Dienstkonto die folgenden IAM-Rollen zuweisen.
Klicken, um die erforderlichen Rollen für das Cloud Build-Dienstkonto aufzurufen
Cloud Build verwendet automatisch das Compute Engine-Standarddienstkonto als Cloud Build-Standarddienstkonto, um Ihren Quellcode und Ihre Cloud Run-Ressource zu erstellen, sofern Sie dieses Verhalten nicht überschreiben. Damit Cloud Build Ihre Quellen erstellen kann, bitten Sie Ihren Administrator, dem Compute Engine-Standarddienstkonto in Ihrem Projekt die Rolle Cloud Run Builder (roles/run.builder) zuzuweisen:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/run.builder
Ersetzen Sie PROJECT_NUMBER durch Ihre Google Cloud-Projektnummer und PROJECT_ID durch Ihre Google Cloud-Projekt-ID. Eine detaillierte Anleitung zum Ermitteln der Projekt-ID und der Projektnummer finden Sie unter Projekte erstellen und verwalten.
Es dauert einige Minuten, bis die Zuweisung der Rolle „Cloud Run-Builder“ für das Compute Engine-Standarddienstkonto übertragen wurde.
Bitten Sie Ihren Administrator, der Dienstidentität die Rolle Storage-Administrator (roles/storage.admin) zuzuweisen, um die Berechtigungen zu erhalten, die Ihre Dienstidentität benötigt, um auf die Datei und den Cloud Storage-Bucket zuzugreifen.
Weitere Informationen zu Cloud Storage-Rollen und -Berechtigungen finden Sie unter IAM für Cloud Storage.
Eine Liste der IAM-Rollen und -Berechtigungen im Zusammenhang mit Cloud Run finden Sie unter IAM-Rollen für Cloud Run und IAM-Berechtigungen für Cloud Run. Wenn Ihr Cloud Run-Dienst mitGoogle Cloud -APIs wie Cloud-Clientbibliotheken verknüpft ist, lesen Sie die Konfigurationsanleitung für Dienstidentitäten. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Bereitstellungsberechtigungen und Zugriff verwalten.
Beispielanwendung vorbereiten
So rufen Sie das gewünschte Codebeispiel ab:
Klonen Sie das Beispiel-Repository auf Ihren lokalen Computer:
git clone https://github.com/GoogleCloudPlatform/golang-samplesWechseln Sie in das Verzeichnis, das den Cloud Run-Beispielcode enthält:
cd golang-samples/run/service-health
Cloud Run-Dienst in zwei Regionen mit Bereitschaftsprüfungen bereitstellen
Für Failover sind mindestens zwei Dienste aus verschiedenen Regionen erforderlich. Führen Sie die folgenden Befehle aus, um Ihre Dienste aus dem Quellcode in zwei verschiedenen Regionen mit Bereitschaftsprüfungen bereitzustellen. Wenn Sie Terraform verwenden möchten, lesen Sie den Abschnitt Multiregionalen Dienst bereitstellen und fügen Sie die Konfiguration der Bereitschaftsprüfung hinzu.
Stellen Sie den Dienst
health-exampleinus-west1undeurope-west1aus dem Quellverzeichnis bereit. Sie benötigen mindestens eine Instanz, um Service Health mit Bereitschaftsprüfungen zu konfigurieren:gcloud run deploy $SERVICE \ --source=. \ --regions=$REGION_A,$REGION_B \ --min=10 \ --readiness-probe httpGet.path="/are_you_ready"Beantworten Sie die Aufforderungen, die erforderlichen APIs zu installieren, indem Sie nach Aufforderung
yantworten. Dies ist nur einmal für ein Projekt erforderlich. Antworten Sie auf andere Aufforderungen, indem Sie die Plattform und Region angeben, sofern Sie diese nicht wie im Abschnitt Vorbereitung beschrieben eingerichtet haben.
Globalen externen Application Load Balancer einrichten
So richten Sie einen globalen externen Application Load Balancer ein, um Traffic zwischen us-west1 und europe-west1 weiterzuleiten: Wenn Sie Ihren Load Balancer lieber mit Terraform bereitstellen möchten, lesen Sie den Abschnitt Globalen externen Application Load Balancer erstellen.
Erstellen Sie einen Backend-Dienst.
gcloud compute backend-services create $SERVICE-bs \ --load-balancing-scheme=EXTERNAL_MANAGED \ --globalRichten Sie eine globale statische externe IP-Adresse ein, um den Load Balancer zu erreichen:
gcloud compute addresses create $SERVICE-ip \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --globalErstellen Sie eine URL-Zuordnung, um eingehende Anfragen an den Backend-Dienst weiterzuleiten:
gcloud compute url-maps create $SERVICE-lb \ --default-service $SERVICE-bsErstellen Sie einen Ziel-HTTP-Proxy, um Anfragen an Ihre URL-Zuordnung weiterzuleiten:
gcloud compute target-http-proxies create $SERVICE-hp \ --url-map=$SERVICE-lbErstellen Sie eine Weiterleitungsregel, um eingehende Anfragen an den Proxy weiterzuleiten:
gcloud compute forwarding-rules create $SERVICE-fr \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=$SERVICE-ip \ --target-http-proxy=$SERVICE-hp \ --global \ --ports=80
Dienste über eine serverlose NEG hinzufügen
So fügen Sie die Dienste, die Sie in us-west1 und europe-west1 bereitgestellt haben, mithilfe der serverlosen NEG hinzu: Wenn Sie Ihre serverlosen NEGs lieber mit Terraform bereitstellen möchten, finden Sie weitere Informationen unter Regionale Netzwerk-Endpunktgruppen konfigurieren.
Erstellen Sie eine serverlose Netzwerk-Endpunktgruppe (NEG) für Ihren Cloud Run-Dienst in
us-west1undeurope-west1:gcloud compute network-endpoint-groups create $SERVICE-neg-$REGION_A \ --region $REGION_A \ --network-endpoint-type=serverless \ --cloud-run-service=$SERVICEgcloud compute network-endpoint-groups create $SERVICE-neg-$REGION_B \ --region $REGION_B \ --network-endpoint-type=serverless \ --cloud-run-service=$SERVICEFügen Sie die serverlose NEG als Backend zu den Backend-Diensten in
us-west1undeurope-west1hinzu:gcloud compute backend-services add-backend $SERVICE-bs \ --global \ --network-endpoint-group=$SERVICE-neg-$REGION_A \ --network-endpoint-group-region=$REGION_Agcloud compute backend-services add-backend $SERVICE-bs \ --global \ --network-endpoint-group=$SERVICE-neg-$REGION_B \ --network-endpoint-group-region=$REGION_B
Weitere Konfigurationsoptionen finden Sie unter Globalen externen Application Load Balancer mit Cloud Run einrichten.
Regionalen Systemzustand melden
Führen Sie die folgenden Schritte aus, um die regionale Cloud Run Service Health zu aggregieren und einen fehlerfreien oder fehlerhaften Status an den Load Balancer zu melden:
Stellen Sie eine Cloud Run-Dienstrevision in mehreren Regionen mit einer oder mehreren Mindestinstanzen bereit. Führen Sie den folgenden Befehl aus, um die Bereitschaftsprüfung zu verwenden, die Sie im vorherigen Schritt konfiguriert haben:
gcloud run deploy
SERVICE_NAME\ --regions=REGION_A,REGION_B\ --min=MIN_INSTANCESErsetzen Sie Folgendes:
- SERVICE_NAME ist der Name des Diensts.
- REGION_A, REGION_B: verschiedene Regionen für Ihre Dienstrevision. Legen Sie beispielsweise REGION_A auf
us-central1und REGION_B aufeurope-west1fest. - MIN_INSTANCES: die Anzahl von Containerinstanzen, die einsatzbereit gehalten werden und zum Empfangen von Anfragen bereit sein sollen. Sie müssen den Mindestwert auf 1 oder mehr festlegen.
Konfigurieren Sie eine gRPC- oder HTTP-Bereitschaftsprüfung, die auf jeder Containerinstanz eingerichtet ist.
Konfigurieren Sie einen globalen externen Application Load Balancer oder einen regionenübergreifenden internen Application Load Balancer, um Traffic von fehlerhaften Regionen wegzuleiten.
Richten Sie serverlose NEGs für jeden Cloud Run-Dienst in jeder Region ein.
Konfigurieren Sie einen Backend-Dienst, um eine Verbindung zu serverlosen NEGs herzustellen.
Beispiel-Cloud Run-Anwendung mit Bereitschaftsprüfungen in zwei Regionen bereitstellen
Failover testen und prüfen
So testen Sie das Failover, um die Zuverlässigkeit und Ausfallsicherheit Ihrer Cloud Run-Dienste zu gewährleisten:
Führen Sie den folgenden Befehl aus, um die IP-Adresse des Load Balancers abzurufen:
LBIP=$(gcloud compute addresses describe $SERVICE-ip --global --format='value(address)')Optional: Senden Sie eine Anfrage an Ihren Load Balancer, wenn Ihre Dienste eine Authentifizierung erfordern:
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $LBIPRufen Sie den Wert der LBIP-Variablen mit dem Befehl
echo $LBIPab. Dadurch wird die IP-Adresse des Load Balancers ausgegeben. Beispiel:11.22.33.44.Wenn Sie einen Failover testen möchten, rufen Sie die URL
http://LOAD_BALANCER_IPauf, wobei LOAD_BALANCER_IP der Wert ist, den Sie im vorherigen Schritt erhalten haben. Klicken Sie im Bereich Bereitstellungsregionen auf den Schalter für Ihre Region. Dadurch werden die fehlerfreie Region und die Instanz, die Traffic verarbeitet, festgelegt:
Systemdiagnosen überwachen
Nachdem Sie Cloud Run Service Health eingerichtet haben, erfassen serverlose NEGs den Cloud Monitoring-Messwert für den Dienstzustand. Sie können den Systemzustand der vorhandenen regionalen Dienste aufrufen.
Wenn ein Dienst in einer Region fehlerhaft ist, leitet der Load Balancer den Traffic von der fehlerhaften Region in eine fehlerfreie Region um. Der Traffic wird wiederhergestellt, sobald die Region wieder fehlerfrei ist.
Authentifizierte Pub/Sub-Push-Abos mit multiregionaler Bereitstellung verwenden
Ein Pub/Sub-Dienst sendet standardmäßig Nachrichten an Push-Endpunkte in derselben Google Cloud -Region, in der der Pub/Sub-Dienst die Nachrichten speichert. Eine Problemumgehung für dieses Verhalten finden Sie unter Authentifiziertes Pub/Sub-Push-Abo mit einer multiregionalen Cloud Run-Bereitstellung verwenden.
Alternative: Manuelles Failover konfigurieren
Wenn Sie den Traffic manuell so konfigurieren müssen, dass er ohne Prüfungen auf eine fehlerfreie Region umgeleitet wird, ändern Sie die URL-Zuordnung des globalen externen Application Load Balancers.
Wenn Sie die URL-Zuordnung des globalen externen Application Load Balancers aktualisieren möchten, entfernen Sie die NEG mit dem Flag
--globalaus dem Backend-Dienst:gcloud compute backend-services remove-backend
BACKEND_NAME\ --network-endpoint-group=NEG_NAME\ --network-endpoint-group-region=REGION\ --globalErsetzen Sie Folgendes:
BACKEND_NAMEist der Name des Backend-Dienstes.NEG_NAME: Der Name der Netzwerk-Endpunktgruppenressource, z. B.myservice-neg-uscentral1.REGION: Die Region, in der die NEG erstellt wurde und aus der Sie Ihren Dienst entfernen möchten. Beispiel:us-central1,asia-east1
Rufen Sie https://
<domain-name>auf, um zu prüfen, ob eine fehlerfreie Region jetzt Traffic verarbeitet.
Löschen Sie alle Ressourcen, die Sie mit dieser Anleitung bereitgestellt haben, um zusätzliche Kosten für Ihr Google Cloud -Konto zu vermeiden.
Projekt löschen
Wenn Sie ein neues Projekt für diese Anleitung erstellt haben, löschen Sie das Projekt. Wenn Sie ein vorhandenes Projekt verwendet haben und es beibehalten möchten, ohne die Änderungen in dieser Anleitung hinzuzufügen, löschen Sie die für die Anleitung erstellten Ressourcen.
Am einfachsten vermeiden Sie weitere Kosten, wenn Sie das zum Ausführen der Anleitung erstellte Projekt löschen.
So löschen Sie das Projekt:
- 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.
Anleitungsressourcen löschen
Löschen Sie den Cloud Run-Dienst, den Sie in dieser Anleitung bereitgestellt haben. Für Cloud Run-Dienste fallen erst Kosten an, wenn sie Anfragen empfangen.
Führen Sie den folgenden Befehl aus, um den Cloud Run-Dienst zu löschen:
gcloud run services delete SERVICE-NAME
Ersetzen Sie SERVICE-NAME durch den Namen Ihres Dienstes.
Sie können Cloud Run-Dienste auch über die Google Cloud Console löschen.
Entfernen Sie die Konfiguration der Standardregion
gcloud, die Sie während der Einrichtung für die Anleitung hinzugefügt haben:gcloud config unset run/regionEntfernen Sie die Projektkonfiguration:
gcloud config unset project
Nächste Schritte
- Weitere Informationen zum Konfigurieren von Systemdiagnosen für Cloud Run-Dienste
- Die App im Detail: Globalen externen Application Load Balancer mit Cloud Run einrichten
- Sehen Sie sich multiregionale Konfigurationen in anderen Produkten wie Spanner Multi-Region und Cloud Storage-Standorte an.