Blog
So richten Sie eine regionale Ausfallsicherung für Google Cloud Serverless NEGs ein

In diesem Blog möchten wir Ihnen zeigen, wie Sie ein hochverfügbares, regionales Failover-Setup einrichten, wenn Sie serverlose Netzwerk-Endpunktgruppen (NEGs) verwenden. Traditionell verlassen sich Netzwerkendpunktgruppen auf gRPC-Zustandsprüfungen, um festzustellen, ob ein Backend verfügbar und bereit ist, Datenverkehr zu empfangen. Diese Zustandsprüfungen werden jedoch für serverlose Netzwerkendpunktgruppen nicht unterstützt. Ohne Gesundheitsprüfungen wird der Datenverkehr an Backends in verfügbaren Regionen gesendet und verworfen, wenn das Backend ungesund ist. Wie könnten wir also stattdessen den Datenverkehr von einem ungesunden NEG umleiten?
Um dieses Problem zu lösen, wurde von Google die Ausreißererkennung eingeführt. Die Ausreißererkennung funktioniert durch die Analyse von HTTP-Antworten und den Rauswurf von ungesunden Backends, wenn bestimmte Schwellenwerte erreicht werden. Diese Funktion ist bei globalen Backend-Diensten mit serverlosen NEGs verfügbar.
Sehen wir uns an, wie wir dies in unserem Backend-Dienst Terraform Ressource aktivieren können:
resource "google_compute_backend_service" "backend" {
...
outlier_detection = {
base_ejection_time = "30s"
consecutive_errors = 5
}
}
Mit der obigen Konfiguration wirft der Backend-Service ein Backend aus, wenn es mit fünf aufeinanderfolgenden 5xx HTTP-Fehlercodes antwortet. Nach dem Rauswurf erhält das Backend 30 Sekunden lang keinen Datenverkehr, bevor es erneut getestet wird.
Schauen wir uns nun ein vollständiges Beispiel an:
locals {
locations = toset(["europe-west1", "europe-west4"])
}
resource "google_compute_global_address" "ip" {
name = "service-ip"
}
resource "google_compute_region_network_endpoint_group" "neg" {
for_each = toset(local.locations)
name = "neg-${each.key}"
network_endpoint_type = "SERVERLESS"
region = each.key
cloud_run {
service = google_cloud_run_service.service[each.key].name
}
}
resource "google_compute_backend_service" "backend" {
name = "backend"
protocol = "HTTP"
dynamic "backend" {
for_each = local.locations
content {
group = google_compute_region_network_endpoint_group.neg[backend.key].id
}
}
outlier_detection = {
base_ejection_time = "30s"
consecutive_errors = 5
}
}
resource "google_compute_url_map" "url_map" {
name = "url-map"
default_service = google_compute_backend_service.backend.id
}
resource "google_compute_target_http_proxy" "http_proxy" {
name = "http-proxy"
url_map = google_compute_url_map.url_map.id
}
resource "google_compute_global_forwarding_rule" "frontend" {
name = "frontend"
target = google_compute_target_http_proxy.http_proxy.id
port_range = "80"
ip_address = google_compute_global_address.ip.address
}
Fazit
Wenn Serverless NEGs keine Unterstützung für Gesundheitsprüfungen bieten, sollten Sie bei Serverless NEGs Backend-Diensten immer eine Ausreißererkennung angeben, um die Verfügbarkeit bei regionalen Ausfällen sicherzustellen. Die Ausreißererkennung wirft ungesunde Backends aus und verhindert, dass Datenverkehr an Dienste in nicht verfügbaren Regionen gesendet wird.
Foto von Kevin Schmid auf Unsplash
Verfasst von

Daniël Rieske
Contact



