Gestire l'alta disponibilità in Kubernetes

Questa pagina mostra come attivare e testare l'alta disponibilità (HA) sul tuo cluster di database AlloyDB Omni basato su Kubernetes. L'esecuzione delle attività descritte qui richiede conoscenze di base sull'applicazione dei file manifest di Kubernetes e sull'utilizzo dello strumento a riga di comando kubectl.

Panoramica

Puoi attivare l'HA 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 del database in modo da aggiornare continuamente i dati su questa replica, abbinando tutte le modifiche ai dati dell'istanza principale.

Abilita alta disponibilità

Prima di attivare l'HA sul cluster di database, assicurati che il cluster Kubernetes abbia quanto segue:

  • Spazio di archiviazione per due copie complete dei tuoi dati
  • Risorse di calcolo per due istanze di database in esecuzione in parallelo

Per attivare l'HA:

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

    spec:
      availability:
        numberOfStandbys: NUMBER_OF_STANDBYS
    

    Sostituisci NUMBER_OF_STANDBYS con il numero di utenti in standby da aggiungere. Il valore massimo è 5. Se stai configurando HA e hai dubbi sul numero di standby necessari, inizia impostando il valore su 1 o 2.

  2. Applica di nuovo il manifest.

Disattivare l'alta disponibilità

Per disattivare l'HA:

  1. Imposta numberOfStandbys su 0 nel manifest del cluster:

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

Verificare l'HA su un cluster di database

Per visualizzare lo stato attuale dell'HA di un cluster di database, controlla la condizione HAReady dell'apposito stato. Se questo valore ha un status impostato su True, l'HA è configurato e funziona nel cluster di database.

Per controllare questo valore nella riga di comando, esegui il seguente comando:

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 su un'istanza in standby

Se l'istanza principale non è disponibile per più di 90 secondi, Operator di AlloyDB Omni esegue automaticamente il failover dall'istanza del database principale all'istanza di standby.

I failover sono una buona opzione se vuoi recuperare rapidamente da un guasto imprevisto e ridurre al minimo il tempo di inattività, anche se ciò significa potenzialmente perdere una piccola quantità di dati se il database principale diventa non disponibile prima che il backup sia completamente aggiornato.

L'operatore AlloyDB Omni supporta il failover sia automatico che manuale. Il failover automatico è abilitato per impostazione predefinita.

Il failover genera la seguente sequenza di eventi:

  1. L'operatore AlloyDB Omni mette offline l'istanza del database principale.

  2. L'operatore AlloyDB Omni esegue la promozione della replica di standby come nuova istanza del 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.

Disattivare il failover automatico

I failover automatici sono abilitati per impostazione predefinita nei cluster di database.

Per disattivare un failover:

  1. Imposta enableAutoFailover su false nel manifest del cluster:

    spec:
      availability:
        enableAutoFailover: false
    
  2. Applica di nuovo il manifest.

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 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 da eseguire in caso di errore.

Per monitorare il failover, esegui il seguente comando:

kubectl get failover FAILOVER_NAME -o jsonpath={.status.state} -n NAMESPACE

Sostituisci quanto segue:

  • FAILOVER_NAME: il nome assegnato alla risorsa di failover al momento della sua creazione.

  • NAMESPACE: lo spazio dei nomi del cluster di database.

Il comando restituisce Success quando la nuova istanza del database principale è pronta per l'uso. Per monitorare lo stato della nuova istanza di standby, consulta la sezione successiva.

Passaggio a un'istanza in standby

Il passaggio viene eseguito quando vuoi testare la configurazione del ripristino di emergenza o qualsiasi altra attività pianificata che richieda di cambiare i ruoli del database principale e della replica di standby.

Al termine dello switchover, i ruoli dell'istanza del database principale e della replica di standby vengono invertiti, così come la direzione della replica. Devi optare per i passaggi se vuoi un maggiore controllo sulla procedura di test della configurazione del ripristino di emergenza senza perdita di dati.

L'operatore AlloyDB Omni supporta il passaggio manuale.

Il passaggio comporta la seguente sequenza di eventi:

  1. L'operatore AlloyDB Omni mette offline l'istanza del database principale.

  2. L'operatore AlloyDB Omni esegue la promozione della replica di standby come nuova istanza del database principale.

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

Eseguire uno switchover

Prima di eseguire il passaggio, assicurati di quanto segue:

Per eseguire uno switchover, crea e applica un manifest per una nuova risorsa di switchover:

apiVersion: alloydbomni.dbadmin.goog/v1
kind: Switchover
metadata:
    name: SWITCHOVER_NAME
spec:
     dbclusterRef: DB_CLUSTER_NAME
     NewPrimary: STANBDY_REPLICA_NAME

Sostituisci quanto segue:

  • SWITCHOVER_NAME: un nome per questa risorsa di passaggio, ad esempio switchover-1.

  • DB_CLUSTER_NAME: il nome dell'istanza di database principale a cui si applica l'operazione di switchover.

  • STANBDY_REPLICA_NAME: il nome dell'istanza del database che vuoi promuovere come nuova principale.

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

Utilizzare 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 per 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

    L'esempio di risposta seguente 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