Gestire l'alta disponibilità in Kubernetes

Seleziona una versione della documentazione:

Questa pagina mostra come abilitare e testare l'alta affidabilità (HA) nel cluster di database AlloyDB Omni basato su Kubernetes. Per eseguire le attività documentate qui, è necessaria una conoscenza di base dell'applicazione dei file manifest di Kubernetes e dell'utilizzo dello strumento a riga di comando kubectl.

Panoramica

Puoi abilitare l'alta disponibilità nel cluster di database chiedendo all'operatore AlloyDB Omni Kubernetes di creare repliche di 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, in modo che corrispondano a tutte le modifiche apportate ai dati nell'istanza principale.

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à:

  1. Modifica il manifest del cluster di database in modo da includere una sezione availability nella sezione spec. Questa sezione definisce il numero di standby che vuoi aggiungere impostando il parametro numberOfStandbys.

    spec:
      availability:
        numberOfStandbys: NUMBER_OF_STANDBYS
    

    Sostituisci NUMBER_OF_STANDBYS con il numero di standby che vuoi aggiungere. Il valore massimo è 5. Se stai configurando l'alta disponibilità e non sai quanti standby ti servono, inizia impostando il valore su 1 o 2.

  2. Applica di nuovo il manifest.

Disabilita alta disponibilità

Per disabilitare l'alta disponibilità:

  1. Imposta numberOfStandbys su 0 nel manifest del cluster:

    spec:
      availability:
        numberOfStandbys: 0
    
  2. Applica di nuovo il manifest.

Verifica l'alta disponibilità in un cluster di database

Per visualizzare lo stato attuale dell'alta disponibilità di un cluster di database, controlla la condizione HAReady dello stato del cluster. Se questo valore ha status impostato su True, l'alta disponibilità è configurata e funziona nel cluster di database.

Per controllare questo valore nella riga di comando, 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.

Esegui il failover a 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. Il tempo predefinito per attivare il failover automatico è di 90 secondi.

I failover sono una buona opzione quando vuoi ripristinare rapidamente un errore imprevisto e ridurre al minimo i tempi di inattività, anche se ciò significa potenzialmente perdere una piccola quantità di dati, se il database principale non è disponibile prima che il backup sia completamente aggiornato.

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:

  1. L'operatore AlloyDB Omni porta offline l'istanza di database principale.

  2. L'operatore AlloyDB Omni promuove la replica di standby a nuova istanza di database principale.

  3. L'operatore AlloyDB Omni elimina l'istanza di database principale precedente.

  4. 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 un failover:

  1. Imposta enableAutoFailover su false nel manifest del cluster:

    spec:
      availability:
        enableAutoFailover: false
    

Regola le impostazioni di attivazione del 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 ogni 30 secondi. Se un'istanza ha raggiunto la soglia di attivazione del failover automatico, l'operatore AlloyDB Omni attiva un failover automatico.

Il valore predefinito per la soglia di attivazione del failover automatico è 3. Il valore della soglia è il numero di errori consecutivi per il controllo di integrità prima che venga attivato un failover. Per modificare il valore della soglia, imposta autoFailoverTriggerThreshold su un valore intero nel manifest del cluster:

```yaml
spec:
  availability:
    autoFailoverTriggerThreshold: TRIGGER_THRESHOLD
```

Sostituisci quanto segue:

  • 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.

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 esempio failover-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 di cui eseguire il failover.

Per monitorare il failover, esegui il comando seguente:

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 di database principale è pronta per l'uso. Per monitorare lo stato della nuova istanza di standby, consulta la sezione successiva.

Esegui il cambio a un'istanza di standby

Il cambio viene eseguito quando vuoi testare la configurazione di ripristino di emergenza o altre attività pianificate che richiedono di scambiare i ruoli del database principale e della replica di standby.

Al termine del cambio, i ruoli dell'istanza di database principale e della replica di standby vengono invertiti insieme alla direzione della replica. Devi optare per i cambi se vuoi un maggiore controllo sul processo di test della configurazione di ripristino di emergenza senza perdita di dati.

L'operatore AlloyDB Omni supporta il cambio manuale.

Il cambio comporta la seguente sequenza di eventi:

  1. L'operatore AlloyDB Omni porta offline l'istanza di database principale.

  2. L'operatore AlloyDB Omni promuove la replica di standby a nuova istanza di database principale.

  3. L'operatore AlloyDB Omni passa l'istanza di database principale precedente a una replica di standby.

Esegui un cambio

Prima di eseguire un cambio:

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 esempio switchover-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 come nuova istanza principale.

    Per identificare il nome della replica di standby, esegui il comando seguente: posix-terminal kubectl get instances.alloydbomni.internal.dbadmin.goog

Utilizza la replica di standby come istanza di sola lettura

Per utilizzare una replica di standby come istanza di sola lettura:

  1. Modifica il manifest del cluster di database in modo da impostare il parametro enableStandbyAsReadReplica su true.

    spec:
      availability:
        enableStandbyAsReadReplica: true
    
  2. Applica di nuovo il manifest.

  3. Verifica che l'endpoint di sola lettura sia riportato nel campo status dell'oggetto DBCluster:

    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