kubectl.
Panoramica
Per abilitare l'alta disponibilità nel cluster di database, configura l'operatore AlloyDB Omni Kubernetes in modo che crei repliche di standby dell'istanza di database principale. L'operatore AlloyDB Omni configura il cluster di database in modo che aggiorni continuamente i dati su questa replica e corrisponda a tutte le modifiche dei dati nell'istanza principale.
Puoi anche abilitare l'alta disponibilità nel cluster di database abilitato per TDE. Per saperne di più sulla creazione di un cluster abilitato per TDE, vedi Creare un cluster abilitato per TDE.
Abilita alta disponibilità
Prima di abilitare l'alta disponibilità nel cluster di database, assicurati che il cluster Kubernetes abbia:
Spazio di archiviazione per due copie complete dei dati
Risorse di calcolo per due istanze di database in esecuzione in parallelo
Per abilitare l'alta disponibilità:
Modifica il manifest del cluster di database in modo da includere una sezione
availabilitynella sezionespec. Questa sezione utilizza il parametronumberOfStandbysper specificare il numero di standby da aggiungere.spec: availability: numberOfStandbys: NUMBER_OF_STANDBYSSostituisci
NUMBER_OF_STANDBYScon il numero di standby che vuoi aggiungere. Il valore massimo è5. Se non sai quanti standby ti servono, inizia impostando il valore su1o2.Applica di nuovo il manifest.
Disabilita alta disponibilità
Per disabilitare l'alta disponibilità:
Imposta
numberOfStandbyssu0nel manifest del cluster:spec: availability: numberOfStandbys: 0Applica di nuovo il manifest.
Verifica l'alta disponibilità in un cluster di database
Per controllare lo stato dell'alta disponibilità in un cluster di database, controlla lo stato HAReady. Se lo stato di HAReady è True, l'alta disponibilità è abilitata e funziona nel cluster. Se è False, è abilitata, ma non è pronta perché è in fase di configurazione.
Per controllare lo stato HAReady utilizzando la riga di comando kubectl, esegui il comando seguente:
kubectl get dbcluster.alloydbomni.dbadmin.goog DB_CLUSTER_NAME -o jsonpath={.status.conditions[?(@.type == \'HAReady\')]} -n NAMESPACESostituisci quanto segue:
DB_CLUSTER_NAME: il nome del cluster di database.NAMESPACE: lo spazio dei nomi del cluster di database.
Esegui il failover su un'istanza di standby
Se l'istanza principale non è disponibile per un periodo di tempo configurabile, l'operatore AlloyDB Omni esegue automaticamente il failover dall'istanza di database principale all'istanza di standby. I seguenti parametri determinano quando avviare un failover automatico:
Il tempo tra i controlli di integrità (il valore predefinito è 30 secondi)
Il numero di controlli di integrità consecutivi non riusciti (il valore predefinito è 3)
Un failover automatico viene avviato dopo che si è verificato il numero specificato di controlli di integrità consecutivi non riusciti, con il tempo specificato tra ogni controllo di integrità non riuscito. Se vengono mantenuti i valori predefiniti, si verifica un failover automatico dopo 3 controlli di integrità consecutivi non riusciti, ciascuno a 30 secondi di distanza.
L'esecuzione di un failover manuale è una buona opzione quando vuoi ripristinare rapidamente un errore imprevisto e ridurre al minimo i tempi di inattività.
L'operatore AlloyDB Omni supporta sia il failover automatico sia quello manuale. Il failover automatico è abilitato per impostazione predefinita.
Il failover comporta la seguente sequenza di eventi:
L'operatore AlloyDB Omni porta offline l'istanza di database principale.
L'operatore AlloyDB Omni promuove la replica di standby a nuova istanza di database principale.
L'operatore AlloyDB Omni elimina l'istanza di database principale precedente.
L'operatore AlloyDB Omni crea una nuova replica di standby.
Disabilita il failover automatico
I failover automatici sono abilitati per impostazione predefinita nei cluster di database.
Per disabilitare il failover automatico:
Imposta
enableAutoFailoversufalsenel manifest del cluster:spec: availability: enableAutoFailover: false
Modifica le impostazioni di attivazione del failover automatico
Puoi utilizzare le impostazioni per modificare i failover automatici per ogni cluster di database.
L'operatore AlloyDB Omni esegue controlli di integrità regolari sull'istanza di database principale e su tutte le repliche di standby. La frequenza predefinita per i controlli di integrità è di 30 secondi. Se un'istanza raggiunge la soglia di attivazione del failover automatico, l'operatore AlloyDB Omni attiva un failover automatico.
Il valore di soglia è il numero di errori consecutivi per il controllo di integrità prima che venga attivato un failover. Per modificare il periodo di controllo di integrità o il valore di soglia, imposta i campi healthcheckPeriodSeconds e autoFailoverTriggerThreshold su valori interi nel manifest del cluster:
spec:
availability:
healthcheckPeriodSeconds: HEALTHCHECK_PERIOD
autoFailoverTriggerThreshold: AUTOFAILOVER_TRIGGER_THRESHOLD
Sostituisci quanto segue:
HEALTHCHECK_PERIOD: un valore intero che indica il numero di secondi da attendere tra ogni controllo di integrità. Il valore predefinito è30. Il valore minimo è1e il valore massimo è86400(equivalente a un giorno).AUTOFAILOVER_TRIGGER_THRESHOLD: un valore intero per il numero di errori consecutivi per il controllo di integrità prima che venga attivato un failover. Il valore predefinito è3. Il valore minimo è0. Non esiste un valore massimo. Se questo campo è impostato su0, viene utilizzato il valore predefinito3.
Attiva un failover manuale
Per attivare un failover manuale, crea e applica un manifest per una nuova risorsa di failover:
apiVersion: alloydbomni.dbadmin.goog/v1
kind: Failover
metadata:
name: FAILOVER_NAME
namespace: NAMESPACE
spec:
dbclusterRef: DB_CLUSTER_NAME
Sostituisci quanto segue:
FAILOVER_NAME: un nome per questa risorsa, ad esempiofailover-1.NAMESPACE: lo spazio dei nomi per questa risorsa di failover, che deve corrispondere allo spazio dei nomi del cluster di database a cui si applica.DB_CLUSTER_NAME: il nome del cluster di database su cui eseguire il failover.
Per monitorare il failover, esegui il comando seguente:
kubectl get failover FAILOVER_NAME -o jsonpath={.status.state} -n NAMESPACESostituisci quanto segue:
FAILOVER_NAME: il nome che hai assegnato alla risorsa di failover quando l'hai creata.NAMESPACE: lo spazio dei nomi del cluster di database.
Il comando restituisce Success dopo che la nuova istanza di database principale è pronta per l'uso. Per monitorare lo stato della nuova istanza di standby, consulta la sezione successiva.
Esegui il cambio su un'istanza di standby
Il cambio viene eseguito quando vuoi testare la configurazione di ripristino di emergenza o altre attività pianificate che richiedono l'inversione dei ruoli del database principale e della replica di standby.
Al termine del cambio, la direzione della replica e i ruoli dell'istanza di database principale e della replica di standby vengono invertiti. Utilizza gli switchover per avere un maggiore controllo sul test della configurazione di ripristino di emergenza senza perdita di dati.
L'operatore AlloyDB Omni supporta il cambio manuale. Un cambio comporta la seguente sequenza di eventi:
L'operatore AlloyDB Omni porta offline l'istanza di database principale.
L'operatore AlloyDB Omni promuove la replica di standby a nuova istanza di database principale.
L'operatore AlloyDB Omni imposta l'istanza di database principale precedente come replica di standby.
Esegui un cambio
Prima di iniziare un cambio:
Verifica che sia l'istanza di database principale sia la replica di standby siano in stato integro. Per saperne di più, vedi Gestire e monitorare AlloyDB Omni.
Verifica che lo stato attuale dell'alta disponibilità sia
HAReady. Per saperne di più, vedi Verifica l'alta disponibilità in un cluster di database.
Per eseguire un cambio, crea e applica un manifest per una nuova risorsa di cambio:
apiVersion: alloydbomni.dbadmin.goog/v1
kind: Switchover
metadata:
name: SWITCHOVER_NAME
spec:
dbclusterRef: DB_CLUSTER_NAME
newPrimary: STANDBY_REPLICA_NAME
Sostituisci quanto segue:
SWITCHOVER_NAME: un nome per questa risorsa di cambio, ad esempioswitchover-1.DB_CLUSTER_NAME: il nome dell'istanza di database principale a cui si applica l'operazione di cambio.STANDBY_REPLICA_NAME: il nome dell'istanza di database che vuoi promuovere a nuova istanza principale.Per identificare il nome della replica di standby, esegui il comando seguente:
kubectl get instances.alloydbomni.internal.dbadmin.goog
Ripristina automaticamente un'istanza di standby
Se un'istanza di standby non è disponibile, l'operatore AlloyDB Omni la ripristina eliminando la vecchia replica di standby e creando una nuova replica di standby che la sostituisce. Il tempo predefinito per attivare un ripristino automatico è di 90 secondi.
Il ripristino automatico del cluster di database contribuisce a mantenere una replica continua e integra del database principale.
Disabilita il ripristino automatico dell'istanza
Per impostazione predefinita, il ripristino automatico di un'istanza di standby è abilitato nei cluster di database.
Per disabilitare i ripristini automatici:
Nel manifest del cluster, imposta
enableAutoHealsufalse:spec: availability: enableAutoHeal: false
Modifica le impostazioni di attivazione del ripristino automatico
Per ogni cluster di database, puoi utilizzare le impostazioni per modificare i ripristini automatici.
L'operatore AlloyDB Omni esegue controlli di integrità regolari che puoi configurare. Per saperne di più, vedi Modifica le impostazioni di attivazione del failover automatico. Se una replica di standby raggiunge la soglia di attivazione del ripristino automatico, l'operatore AlloyDB Omni attiva un ripristino automatico.
Il valore di soglia è il numero di errori consecutivi per il controllo di integrità prima che venga attivato un ripristino. Per modificare il valore di soglia, imposta autoHealTriggerThreshold nel manifest del cluster:
spec:
availability:
autoHealTriggerThreshold: AUTOHEAL_TRIGGER_THRESHOLD
Sostituisci quanto segue:
AUTOHEAL_TRIGGER_THRESHOLD: un valore intero per il numero di errori consecutivi per il controllo di integrità prima che venga attivato un ripristino. Il valore predefinito è5. Il valore minimo è2a causa di possibili errori temporanei e una tantum nei controlli di integrità di standby.
Risolvi i problemi relativi al ripristino dell'istanza
Se utilizzi un numero elevato di cluster di database in un singolo cluster Kubernetes o se hai cluster di database con provisioning insufficiente, il ripristino automatico potrebbe causare la mancata disponibilità dell'operatore AlloyDB Omni o dei cluster di database. Se ricevi un errore che inizia con HealthCheckProber: health check for instance failed e l'errore fa riferimento a un timeout o a un errore di connessione, prova le seguenti correzioni consigliate:
Riduci il numero di cluster di database che gestisci nel cluster Kubernetes.
Aumenta il valore di soglia
healthcheckPeriodSecondsin modo che i controlli di integrità vengano eseguiti meno frequentemente. Per saperne di più, vedi Modifica le impostazioni di attivazione del failover automatico.Aumenta il valore
autoHealTriggerThresholdin modo che il ripristino automatico venga eseguito meno frequentemente. Per saperne di più, vedi Modifica le impostazioni di attivazione del ripristino automatico.Disabilita il ripristino automatico nei cluster di database. Per saperne di più, vedi Disabilita il ripristino automatico dell'istanza.
Aumenta il limite della CPU, il limite di memoria o entrambi per l'operatore AlloyDB Omni. Per saperne di più, vedi Informazioni sulla gestione automatica della memoria e Analizzare l'utilizzo dell'heap di memoria dell'operatore AlloyDB Omni.
Aumenta i limiti delle risorse per i cluster di database AlloyDB Omni. Per saperne di più, vedi Ridimensionare il cluster di database basato su Kubernetes.
Di seguito sono riportati alcuni esempi di errori che potrebbero essere causati da un ripristino automatico eccessivo. Questi esempi omettono i dettagli dell'ambiente che ti aiutano a identificare l'origine dell'errore, come il nome di un cluster o un indirizzo IP.
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...
Utilizza la replica di standby come istanza di sola lettura
Per utilizzare una replica di standby come istanza di sola lettura:
Imposta
enableStandbyAsReadReplicasutruenel manifest del cluster di database:spec: availability: enableStandbyAsReadReplica: trueApplica di nuovo il manifest.
Verifica che l'endpoint di sola lettura sia riportato nel campo
statusdell'oggettoDBCluster:kubectl describe dbcluster -n NAMESPACE DB_CLUSTER_NAMELa seguente risposta di esempio mostra l'endpoint dell'istanza di sola lettura:
Status: [...] Primary: [...] Endpoints: Name: Read-Write Value: 10.128.0.81:5432 Name: Read-Only Value: 10.128.0.82:5432