kubectl
.
Panoramica
Per abilitare l'alta disponibilità nel cluster di database, configura l'operatore AlloyDB Omni Kubernetes in modo che crei repliche in standby dell'istanza di database principale. L'operatore AlloyDB Omni configura il cluster di database in modo da aggiornare continuamente i dati su questa replica e corrisponde a tutte le modifiche ai dati nell'istanza principale.
Abilita alta disponibilità
Prima di abilitare l'alta disponibilità nel cluster di database, assicurati che il cluster Kubernetes disponga di quanto segue:
Spazio di archiviazione per due copie complete dei tuoi dati
Risorse di computing per due istanze di database in esecuzione in parallelo
Per attivare l'alta disponibilità:
Modifica il file manifest del cluster di database in modo da includere una sezione
availability
nella sezionespec
. Questa sezione utilizza il parametronumberOfStandbys
per specificare il numero di standby da aggiungere.spec: availability: numberOfStandbys: NUMBER_OF_STANDBYS
Sostituisci
NUMBER_OF_STANDBYS
con il numero di standby che vuoi aggiungere. Il valore massimo è5
. Se non sai con certezza il numero di stand-by di cui hai bisogno, inizia impostando il valore su1
o2
.Applica di nuovo il manifest.
Disabilita HA
Per disattivare l'HA:
Imposta
numberOfStandbys
su0
nel manifest del cluster:spec: availability: numberOfStandbys: 0
Applica di nuovo il manifest.
Verificare l'alta disponibilità su un cluster di database
Per controllare lo stato dell'alta disponibilità su un cluster di database, controlla il relativo stato HAReady
. Se
lo stato di HAReady
è True
, allora l'alta disponibilità è abilitata e funziona sul
cluster. Se è False
, è abilitato ma non pronto perché è in fase di configurazione.
Per controllare lo stato di 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 NAMESPACE
Sostituisci quanto segue:
DB_CLUSTER_NAME
: il nome del cluster di database.NAMESPACE
: lo spazio dei nomi del cluster di database.
Eseguire 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 che intercorre 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à non riusciti consecutivi, con il tempo specificato tra ogni controllo di integrità non riuscito. Se vengono mantenuti i valori predefiniti, si verifica un failover automatico dopo tre errori consecutivi del controllo di integrità, ciascuno a distanza di 30 secondi.
L'esecuzione di un failover manuale è una buona opzione quando vuoi eseguire rapidamente il ripristino da un errore imprevisto e ridurre al minimo i tempi di inattività.
L'operatore AlloyDB Omni supporta il failover automatico e manuale. Il failover automatico è abilitato per impostazione predefinita.
Il failover comporta la seguente sequenza di eventi:
L'operatore AlloyDB Omni mette offline l'istanza del database principale.
L'operatore AlloyDB Omni promuove la replica di standby a nuova istanza di database principale.
L'operatore AlloyDB Omni elimina l'istanza del database primario precedente.
L'operatore AlloyDB Omni crea una nuova replica di standby.
Disattivare il failover automatico
I failover automatici sono abilitati per impostazione predefinita nei cluster di database.
Per disattivare il failover automatico:
Imposta
enableAutoFailover
sufalse
nel manifest del cluster:spec: availability: enableAutoFailover: false
Modificare le impostazioni del trigger di failover automatico
Puoi utilizzare le impostazioni per regolare 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à dell'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 un controllo di integrità e l'altro. Il valore predefinito è30
. Il valore minimo è1
e 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
.
Attivare 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 di 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 di cui eseguire il failover.
Per monitorare il failover, esegui questo comando:
kubectl get failover FAILOVER_NAME -o jsonpath={.status.state} -n NAMESPACE
Sostituisci 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 del database primario è pronta
per l'uso. Per monitorare lo stato della nuova istanza di standby, consulta la sezione successiva.
Failover a un'istanza in standby
Il cambio di ruolo viene eseguito quando vuoi testare la configurazione di ripristino di emergenza o qualsiasi altra attività pianificata che richieda di invertire i ruoli del database principale e della replica di standby.
Al termine dello switchover, la direzione della replica e i ruoli dell'istanza del database principale e della replica di standby vengono invertiti. Utilizza i cambi di ruolo per avere un maggiore controllo sul test della configurazione di ripristino di emergenza senza perdita di dati.
L'operatore AlloyDB Omni supporta il failover manuale. Un cambio comporta la seguente sequenza di eventi:
L'operatore AlloyDB Omni mette offline l'istanza del database principale.
L'operatore AlloyDB Omni promuove la replica di standby a nuova istanza di database principale.
L'operatore AlloyDB Omni trasforma l'istanza del database principale precedente in una replica di standby.
Eseguire un cambio
Prima di iniziare un cambio, segui questi passaggi:
Verifica che sia l'istanza di database primaria sia la replica in standby siano in uno stato integro. Per ulteriori informazioni, vedi Gestire e monitorare AlloyDB Omni.
Verifica che lo stato HA attuale sia
HAReady
. Per saperne di più, vedi Verificare l'alta disponibilità su un cluster di database.
Per eseguire un failover, crea e applica un manifest per una nuova risorsa di failover:
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 failover, ad esempioswitchover-1
.DB_CLUSTER_NAME
: il nome dell'istanza del database primario a cui si applica l'operazione di switchover.STANDBY_REPLICA_NAME
: il nome dell'istanza del database che vuoi promuovere come nuova istanza primaria.Per identificare il nome della replica di standby, esegui questo comando:
kubectl get instances.alloydbomni.internal.dbadmin.goog
Riparare automaticamente un'istanza di standby
Se un'istanza di standby non è più disponibile, l'operatore AlloyDB Omni ripristina l'istanza eliminando la vecchia replica di standby e creando una nuova replica di standby che la sostituisce. Il tempo predefinito per attivare una riparazione automatica è di 90 secondi.
La riparazione automatica del cluster di database contribuisce a mantenere una replica integra e continua del database primario.
Disattivare la riparazione automatica dell'istanza
Per impostazione predefinita, la riparazione automatica di un'istanza di standby è abilitata nei cluster di database.
Per disattivare le riparazioni automatiche:
Nel manifest del cluster, imposta
enableAutoHeal
sufalse
:spec: availability: enableAutoHeal: false
Modificare le impostazioni del trigger di riparazione automatica
Per ogni cluster di database, puoi utilizzare le impostazioni per regolare le riparazioni automatiche.
L'operatore AlloyDB Omni esegue controlli di integrità regolari che puoi configurare. Per ulteriori informazioni, vedi Modificare le impostazioni di attivazione del failover automatico. Se una replica di standby raggiunge la soglia di attivazione della riparazione automatica, l'operatore AlloyDB Omni attiva una riparazione automatica.
Il valore di soglia è il numero di errori consecutivi per il controllo di integrità
prima che venga attivata una riparazione. Per modificare il valore della 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 attivata una riparazione. Il valore predefinito è5
. Il valore minimo è2
a causa di possibili errori temporanei e una tantum nei controlli di integrità in standby.
Risolvere i problemi relativi alla riparazione delle istanze
Se utilizzi un numero elevato di cluster di database in un singolo cluster Kubernetes o se disponi di cluster di database con provisioning insufficiente, la riparazione automatica potrebbe causare l'indisponibilità 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 tuo cluster Kubernetes.
Aumenta il valore della soglia
healthcheckPeriodSeconds
in modo che i controlli di integrità vengano eseguiti meno spesso. Per ulteriori informazioni, vedi Modificare le impostazioni di attivazione del failover automatico.Aumenta il valore di
autoHealTriggerThreshold
in modo che la riparazione automatica si verifichi meno frequentemente. Per ulteriori informazioni, vedi Modificare le impostazioni del trigger di riparazione automatica.Disattiva la riparazione automatica sui cluster di database. Per ulteriori informazioni, vedi Disattivare la riparazione automatica dell'istanza.
Aumenta il limite di CPU, il limite di memoria o entrambi per l'operatore AlloyDB Omni. Per ulteriori informazioni, 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 una correzione automatica eccessiva. Questi esempi omettono i dettagli dell'ambiente che ti aiutano a identificare l'origine dell'errore, ad esempio 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...
Utilizzare la replica di standby come istanza di sola lettura
Per utilizzare una replica di standby come istanza di sola lettura, completa i seguenti passaggi:
Imposta
enableStandbyAsReadReplica
sutrue
nel manifest del cluster di database:spec: availability: enableStandbyAsReadReplica: true
Applica di nuovo il manifest.
Verifica che l'endpoint di sola lettura sia riportato nel campo
status
dell'oggettoDBCluster
:kubectl describe dbcluster -n NAMESPACE DB_CLUSTER_NAME
La 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