kubectl
-Befehlszeilentools haben.
Übersicht
Sie aktivieren die Hochverfügbarkeit in Ihrem Datenbankcluster, indem Sie den AlloyDB Omni Kubernetes-Operator so konfigurieren, dass Stand-by-Replikate Ihrer primären Datenbankinstanz erstellt werden. Der AlloyDB Omni-Operator konfiguriert Ihren Datenbankcluster so, dass die Daten auf diesem Replikat kontinuierlich aktualisiert werden und alle Datenänderungen in Ihrer primären Instanz übernommen werden.
Hochverfügbarkeit aktivieren
Bevor Sie die Hochverfügbarkeit für Ihren Datenbankcluster aktivieren, muss Ihr Kubernetes-Cluster Folgendes haben:
Speicherplatz für zwei vollständige Kopien Ihrer Daten
Rechenressourcen für zwei parallel ausgeführte Datenbankinstanzen
So aktivieren Sie HA:
Ändern Sie das Manifest des Datenbankclusters so, dass es unter dem Abschnitt
spec
einen Abschnittavailability
enthält. In diesem Abschnitt wird der ParameternumberOfStandbys
verwendet, um die Anzahl der hinzuzufügenden Stand-by-Instanzen anzugeben.spec: availability: numberOfStandbys: NUMBER_OF_STANDBYS
Ersetzen Sie
NUMBER_OF_STANDBYS
durch die Anzahl der Stand-by-Instanzen, die Sie hinzufügen möchten. Der Höchstwert ist5
. Wenn Sie sich nicht sicher sind, wie viele Stand-bys Sie benötigen, beginnen Sie mit dem Wert1
oder2
.Wenden Sie das Manifest noch einmal an.
Hochverfügbarkeit deaktivieren
So deaktivieren Sie HA:
Setzen Sie
numberOfStandbys
im Manifest des Clusters auf0
:spec: availability: numberOfStandbys: 0
Wenden Sie das Manifest noch einmal an.
HA in einem Datenbankcluster prüfen
Wenn Sie den Status der Hochverfügbarkeit für einen Datenbankcluster prüfen möchten, sehen Sie sich den HAReady
-Status an. Wenn der Status von HAReady
True
ist, ist HA aktiviert und funktioniert im Cluster. Wenn der Wert False
ist, ist die Funktion aktiviert, aber noch nicht einsatzbereit, da sie gerade eingerichtet wird.
Führen Sie den folgenden Befehl aus, um den HAReady
-Status über die kubectl
-Befehlszeile zu prüfen:
kubectl get dbcluster.alloydbomni.dbadmin.goog DB_CLUSTER_NAME -o jsonpath={.status.conditions[?(@.type == \'HAReady\')]} -n NAMESPACE
Ersetzen Sie Folgendes:
DB_CLUSTER_NAME
: Der Name des Datenbankclusters.NAMESPACE
: Der Namespace des Datenbankclusters.
Failover auf eine Stand-by-Instanz ausführen
Wenn Ihre primäre Instanz für einen konfigurierbaren Zeitraum nicht verfügbar ist, führt der AlloyDB Omni-Operator automatisch ein Failover von der primären Datenbankinstanz zur Stand-by-Instanz durch. Die folgenden Parameter bestimmen, wann ein automatisches Failover gestartet wird:
Die Zeit zwischen den Systemdiagnosen (Standardwert: 30 Sekunden).
Die Anzahl der aufeinanderfolgenden fehlgeschlagenen Systemdiagnosen (Standardwert ist 3).
Ein automatisches Failover wird nach der angegebenen Anzahl aufeinanderfolgender fehlgeschlagener Systemdiagnosen mit der angegebenen Zeit zwischen den einzelnen fehlgeschlagenen Systemdiagnosen gestartet. Wenn die Standardwerte beibehalten werden, erfolgt ein automatisches Failover nach drei aufeinanderfolgenden fehlgeschlagenen Systemdiagnosen, die jeweils 30 Sekunden auseinanderliegen.
Ein manuelles Failover ist eine gute Option, wenn nach einem unerwarteten Fehler eine schnelle Wiederherstellung sowie eine geringe Ausfallzeit gewünscht sind.
Der AlloyDB Omni-Operator unterstützt sowohl automatische als auch manuelle Failover. Das automatische Failover ist standardmäßig aktiviert.
Ein Failover führt zu der folgenden Ereignisabfolge:
Der AlloyDB Omni-Operator nimmt die primäre Datenbankinstanz offline.
Der AlloyDB Omni-Operator stuft das Stand-by-Replikat zur neuen primären Datenbankinstanz hoch.
Der AlloyDB Omni-Operator löscht die vorherige primäre Datenbankinstanz.
Der AlloyDB Omni-Operator erstellt ein neues Stand-by-Replikat.
Automatischen Failover deaktivieren
Automatische Failover sind in Datenbankclustern standardmäßig aktiviert.
So deaktivieren Sie das automatische Failover:
Setzen Sie
enableAutoFailover
im Manifest des Clusters auffalse
:spec: availability: enableAutoFailover: false
Einstellungen für den automatischen Failover-Trigger anpassen
Mit den Einstellungen können Sie automatische Failover für jeden Datenbankcluster anpassen.
Der AlloyDB Omni-Operator führt regelmäßige Systemdiagnosen für die primäre Datenbankinstanz sowie für alle Stand-by-Replikate durch. Die Standardhäufigkeit für Health Checks beträgt 30
Sekunden. Wenn eine Instanz den Grenzwert für den automatischen Failover erreicht, löst der AlloyDB Omni-Operator einen automatischen Failover aus.
Der Grenzwert ist die Anzahl der aufeinanderfolgenden Fehler bei der Systemdiagnose, bevor ein Failover ausgelöst wird. Wenn Sie den Zeitraum für die Systemdiagnose oder den Grenzwert ändern möchten, legen Sie die Felder healthcheckPeriodSeconds
und autoFailoverTriggerThreshold
im Manifest des Clusters auf Ganzzahlwerte fest:
spec:
availability:
healthcheckPeriodSeconds: HEALTHCHECK_PERIOD
autoFailoverTriggerThreshold: AUTOFAILOVER_TRIGGER_THRESHOLD
Ersetzen Sie Folgendes:
HEALTHCHECK_PERIOD
: Die Anzahl der Sekunden als Ganzzahlwert, die zwischen den einzelnen Systemdiagnosen gewartet werden soll. Der Standardwert ist30
. Der Mindestwert ist1
und der Höchstwert ist86400
(entspricht einem Tag).AUTOFAILOVER_TRIGGER_THRESHOLD
: Ein Ganzzahlwert für die Anzahl der aufeinanderfolgenden Fehler bei der Systemdiagnose, bevor ein Failover ausgelöst wird. Der Standardwert ist3
. Der Mindestwert beträgt0
. Es gibt keinen Höchstwert. Wenn dieses Feld auf0
festgelegt ist, wird stattdessen der Standardwert3
verwendet.
Manuelles Failover auslösen
Um ein manuelles Failover auszulösen, erstellen und wenden Sie ein Manifest für eine neue Failover-Ressource an:
apiVersion: alloydbomni.dbadmin.goog/v1
kind: Failover
metadata:
name: FAILOVER_NAME
namespace: NAMESPACE
spec:
dbclusterRef: DB_CLUSTER_NAME
Ersetzen Sie Folgendes:
FAILOVER_NAME
: Ein Name für diese Ressource, z. B.failover-1
.NAMESPACE
: Der Namespace für diese Failover-Ressource. Er muss mit dem Namespace des Datenbankclusters übereinstimmen, auf den sie angewendet wird.DB_CLUSTER_NAME
: Der Name des Datenbankclusters, für den ein Failover durchgeführt werden soll.
Führen Sie zur Überwachung des Failovers den folgenden Befehl aus:
kubectl get failover FAILOVER_NAME -o jsonpath={.status.state} -n NAMESPACE
Ersetzen Sie Folgendes:
FAILOVER_NAME
: Der Name, den Sie der Failover-Ressource beim Erstellen zugewiesen haben.NAMESPACE
: Der Namespace des Datenbankclusters.
Der Befehl gibt Success
zurück, nachdem die neue primäre Datenbankinstanz einsatzbereit ist. Informationen zum Überwachen des Status der neuen Stand-by-Instanz finden Sie im nächsten Abschnitt.
Switchover zur Stand-by-Instanz durchführen
Ein Switchover wird durchgeführt, wenn Sie Ihre Einrichtung für die Notfallwiederherstellung oder andere geplante Aktivitäten testen möchten, bei denen die Rollen der primären Datenbank und des Stand-by-Replikats getauscht werden müssen.
Nach Abschluss des Switchovers werden die Richtung der Replikation und die Rollen der primären Datenbankinstanz sowie des Stand-by-Replikats umgekehrt. Mit Switchovers haben Sie mehr Kontrolle über das Testen Ihrer Notfallwiederherstellungseinrichtung ohne Datenverlust.
Der AlloyDB Omni-Operator unterstützt manuelles Switchover. Ein Switchover führt zu der folgenden Ereignisabfolge:
Der AlloyDB Omni-Operator nimmt die primäre Datenbankinstanz offline.
Der AlloyDB Omni-Operator stuft das Stand-by-Replikat zur neuen primären Datenbankinstanz hoch.
Der AlloyDB Omni-Operator ändert die vorherige primäre Datenbankinstanz in ein Stand-by-Replikat.
Switchover durchführen
Führen Sie vor Beginn eines Switchovers die folgenden Schritte aus:
Prüfen Sie, ob sowohl die primäre Datenbankinstanz als auch das Stand-by-Replikat fehlerfrei sind. Weitere Informationen finden Sie unter AlloyDB Omni verwalten und überwachen.
Prüfen Sie, ob der aktuelle HA-Status
HAReady
lautet. Weitere Informationen finden Sie unter HA in einem Datenbankcluster prüfen.
Um ein Switchover durchzuführen, erstellen und wenden Sie ein Manifest für eine neue Switchover-Ressource an:
apiVersion: alloydbomni.dbadmin.goog/v1
kind: Switchover
metadata:
name: SWITCHOVER_NAME
spec:
dbclusterRef: DB_CLUSTER_NAME
newPrimary: STANDBY_REPLICA_NAME
Ersetzen Sie Folgendes:
SWITCHOVER_NAME
: Ein Name für diese Switchover-Ressource, z. B.switchover-1
.DB_CLUSTER_NAME
: Der Name der primären Datenbankinstanz, auf die sich der Switchover-Vorgang bezieht.STANDBY_REPLICA_NAME
: Der Name der Datenbankinstanz, die Sie zur neuen primären Instanz hochstufen möchten.Führen Sie den folgenden Befehl aus, um den Namen des Stand-by-Replikats zu ermitteln:
kubectl get instances.alloydbomni.internal.dbadmin.goog
Stand-by-Instanz automatisch reparieren
Wenn eine Stand-by-Instanz nicht mehr verfügbar ist, behebt der AlloyDB Omni-Operator das Problem, indem er das alte Stand-by-Replikat löscht und ein neues Stand-by-Replikat an dessen Stelle erstellt. Die Standardzeit zum Auslösen einer automatischen Reparatur beträgt 90 Sekunden.
Durch die automatische Reparatur des Datenbankclusters wird eine fehlerfreie, kontinuierliche Replikation der primären Datenbank ermöglicht.
Automatisches Reparieren der Instanz deaktivieren
Standardmäßig ist die automatische Reparatur einer Stand-by-Instanz in Datenbankclustern aktiviert.
So deaktivieren Sie automatische Reparaturen:
Legen Sie im Manifest des Clusters
enableAutoHeal
auffalse
fest:spec: availability: enableAutoHeal: false
Triggereinstellungen für die automatische Reparatur anpassen
Für jeden Datenbankcluster können Sie Einstellungen verwenden, um automatische Reparaturen anzupassen.
Der AlloyDB Omni-Operator führt regelmäßig Systemdiagnosen durch, die Sie konfigurieren können. Weitere Informationen finden Sie unter Einstellungen für den automatischen Failover-Trigger anpassen. Wenn ein Stand-by-Replikat den Grenzwert für die automatische Reparatur erreicht, löst der AlloyDB Omni-Operator eine automatische Reparatur aus.
Der Grenzwert ist die Anzahl der aufeinanderfolgenden Fehler bei der Systemdiagnose, bevor eine Reparatur ausgelöst wird. Wenn Sie den Grenzwert ändern möchten, legen Sie autoHealTriggerThreshold
im Manifest des Clusters fest:
spec:
availability:
autoHealTriggerThreshold: AUTOHEAL_TRIGGER_THRESHOLD
Ersetzen Sie Folgendes:
AUTOHEAL_TRIGGER_THRESHOLD
: Ein Ganzzahlwert für die Anzahl der aufeinanderfolgenden Fehler bei der Systemdiagnose, bevor eine Reparatur ausgelöst wird. Der Standardwert ist5
. Der Mindestwert ist2
, da bei Systemdiagnosen im Stand-by-Modus vorübergehende, einmalige Fehler auftreten können.
Fehlerbehebung bei der Instanzreparatur
Wenn Sie eine große Anzahl von Datenbankclustern in einem einzelnen Kubernetes-Cluster verwenden oder wenn Sie unterprovisionierte Datenbankcluster haben, kann die automatische Reparatur zu einer Nichtverfügbarkeit des AlloyDB Omni-Operators oder der Datenbankcluster führen. Wenn Sie einen Fehler erhalten, der mit HealthCheckProber: health check for instance failed
beginnt und sich auf eine Zeitüberschreitung oder einen Verbindungsfehler bezieht, versuchen Sie es mit den folgenden empfohlenen Korrekturen:
Reduzieren Sie die Anzahl der Datenbankcluster, die Sie in Ihrem Kubernetes-Cluster verwalten.
Erhöhen Sie den Grenzwert für
healthcheckPeriodSeconds
, damit Systemdiagnosen seltener erfolgen. Weitere Informationen finden Sie unter Einstellungen für den automatischen Failover-Trigger anpassen.Erhöhen Sie den Wert von
autoHealTriggerThreshold
, damit die automatische Reparatur seltener erfolgt. Weitere Informationen finden Sie unter Triggereinstellungen für die automatische Reparatur anpassen.Deaktivieren Sie die automatische Reparatur für Datenbankcluster. Weitere Informationen finden Sie unter Automatische Reparatur der Instanz deaktivieren.
Erhöhen Sie das CPU-Limit, das Arbeitsspeicherlimit oder beides für den AlloyDB Omni-Operator. Weitere Informationen finden Sie unter Automatische Speicherverwaltung und Speicher-Heap-Nutzung des AlloyDB Omni-Operators analysieren.
Erhöhen Sie die Ressourcenlimits für die AlloyDB Omni-Datenbankcluster. Weitere Informationen finden Sie unter Größe Ihres Kubernetes-basierten Datenbankclusters ändern.
Im Folgenden finden Sie Beispiele für Fehler, die durch eine übermäßige automatische Korrektur verursacht werden können. In diesen Beispielen werden Umgebungsdetails ausgelassen, die Ihnen helfen, die Fehlerquelle zu identifizieren, z. B. der Name eines Clusters oder eine IP-Adresse.
HealthCheckProber: health check for instance failed" err="DBSE0005: DBDaemon Client Error. secure dbdaemon connection failed: context deadline exceeded...
HealthCheckProber: health check for instance failed" err="rpc error: code = Code(10303) desc = DBSE0303: Healthcheck: Health check table query failed. dbdaemon/healthCheck: read healthcheck table: timeout...
HealthCheckProber: health check for instance failed" err="rpc error: code = Code(12415) desc = DBSE2415: Postgres: failed to connect to database. dbdaemon/healthCheck: failed to connect...
Stand-by-Replikat als schreibgeschützte Instanz verwenden
So verwenden Sie ein Stand-by-Replikat als schreibgeschützte Instanz:
Legen Sie
enableStandbyAsReadReplica
im Manifest des Datenbankclusters auftrue
fest:spec: availability: enableStandbyAsReadReplica: true
Wenden Sie das Manifest noch einmal an.
Prüfen Sie, ob der schreibgeschützte Endpunkt im Feld
status
desDBCluster
-Objekts angegeben ist:kubectl describe dbcluster -n NAMESPACE DB_CLUSTER_NAME
Die folgende Beispielantwort enthält den Endpunkt der schreibgeschützten Instanz:
Status: [...] Primary: [...] Endpoints: Name: Read-Write Value: 10.128.0.81:5432 Name: Read-Only Value: 10.128.0.82:5432