Mantenere un deployment di Spanner Omni

Questo documento spiega come gestire un deployment di Spanner Omni. La manutenzione di un deployment di Spanner Omni include controlli di integrità di routine, ritiro degli elementi non integri e sostituzione dei nodi server o dei dischi difettosi per garantire la stabilità e la coerenza del cluster. La gestione dello stato del database protegge i tuoi database da interruzioni non pianificate e mantiene la ridondanza del gruppo di consenso Paxos sottostante.

L'esecuzione della manutenzione ti aiuta a:

  • Garantire l'alta affidabilità: esegui il provisioning di nuovo delle macchine virtuali (VM) o dei pod non integri per mantenere la ridondanza del server di database. In questo modo, le tue applicazioni continueranno a funzionare in caso di guasto hardware.

  • Proteggi la sicurezza e l'integrità dei dati: dismetti i nodi con dischi difettosi per impedire che gli errori di archiviazione si diffondano ad altre parti del database. In questo modo, i server disconnessi non registrano aggiornamenti in conflitto.

Prima di iniziare

Prima di eseguire la manutenzione del deployment Kubernetes, devi fare quanto segue:

Sostituire un server

Potrebbe essere necessario sostituire un server nel deployment per risolvere problemi di sistema o di archiviazione.

Sostituire un server radice

Per sostituire un server radice, seleziona la scheda relativa al tuo ambiente:

Kubernetes

Per sostituire un server radice in un deployment Kubernetes, segui questi passaggi. Sebbene l'aggiunta di più server radice a un deployment Kubernetes esistente non sia supportata, puoi sostituire i server radice esistenti per risolvere eventuali errori irrecuperabili che si verificano.

  1. Elimina il server che vuoi sostituire:

    spanner deployment servers delete SERVER_ENDPOINT --zone=ZONE
    

    Sostituisci quanto segue:

    • SERVER_ENDPOINT: l'endpoint del pod del server da eliminare, nel formato SERVER.pod.NAMESPACE:PORT, ad esempio spanner-a-1.pod.spanner-ns:15000. Per trovare gli endpoint del server nel deployment, elenca i server di deployment eseguendo spanner deployment servers list --zone=ZONE.
    • ZONE: la zona contenente il server, ad esempio us-central1-a.

    Questo passaggio potrebbe richiedere alcuni minuti, a seconda del volume di dati sul server. Spanner Omni sposta i dati da questo server ad altri server nel deployment. Assicurati che l'eliminazione del server sia completata prima di procedere al passaggio successivo.

    Per monitorare l'avanzamento dell'eliminazione, controlla lo stato del server:

    spanner deployment servers describe SERVER_ENDPOINT --zone=ZONE
    

    Attendi che il comando restituisca un errore NOT_FOUND o indichi che il server non è più registrato.

  2. Elimina la richiesta di volume permanente (PVC) per il pod che ospita il server:

    kubectl delete pvc DATA_VOLUME_NAME -n NAMESPACE
    

    Sostituisci quanto segue:

    • DATA_VOLUME_NAME: il nome del volume di dati, ad esempio data-volume-spanner-a-1. Per trovare il nome del volume di dati, elenca i PVC nel tuo spazio dei nomi eseguendo kubectl get pvc -n NAMESPACE.
    • NAMESPACE: lo spazio dei nomi del deployment, ad esempio spanner-ns.
  3. Elimina il pod:

    kubectl delete pod POD_NAME -n NAMESPACE
    

    Sostituisci POD_NAME con il nome del pod server da eliminare, ad esempio spanner-a-1.

    Kubernetes avvia automaticamente un nuovo server in un pod di sostituzione e collega un nuovo PVC.

  4. Aggiungi il nuovo server al deployment:

    spanner deployment servers create SERVER_ENDPOINT --zone=ZONE
    

    Verifica che gli argomenti corrispondano al nuovo endpoint pod e alla nuova zona, ad esempio utilizzando spanner-a-1.pod.spanner-ns:15000 come endpoint e us-central1-a come zona.

VM

Per sostituire un server radice in un deployment VM, segui questi passaggi:

  1. Elimina il server che vuoi sostituire:

    spanner deployment servers delete SERVER_ENDPOINT --zone=ZONE
    

    Sostituisci quanto segue:

    • SERVER_ENDPOINT: l'indirizzo IP o il nome host e la porta del server, ad esempio spanner-vm-1.example.com:15000. Per trovare gli endpoint del server, elenca i server di deployment eseguendo spanner deployment servers list --zone=ZONE.
    • ZONE: la zona contenente il server, ad esempio us-central1-a.

    Questo passaggio potrebbe richiedere alcuni minuti, a seconda del volume di dati sul server. Spanner Omni sposta i dati da questo server ad altri server nel deployment. Assicurati che l'eliminazione del server sia completata prima di procedere al passaggio successivo.

    Per monitorare l'avanzamento dell'eliminazione, controlla lo stato del server:

    spanner deployment servers describe SERVER_ENDPOINT --zone=ZONE
    

    Attendi che il comando restituisca un errore NOT_FOUND o indichi che il server non è più registrato.

  2. Esegui il provisioning del server con spazio di archiviazione pulito come spiegato in Crea un deployment per Spanner Omni sulle VM:

    spanner start \
      --root \
      --server-address=HOSTNAME \
      --zone=ZONE \
      --base-dir=BASE_DIR
    

    Sostituisci quanto segue:

    • HOSTNAME: l'FQDN o il nome host risolvibile della nuova VM, ad esempio spanner-vm-1.example.com.
    • ZONE: la zona di destinazione, ad esempio us-central1-a.
    • BASE_DIR: il percorso in cui sono archiviati i dati, ad esempio ./span-dir.
  3. Aggiungi il nuovo server al deployment:

    spanner deployment servers create SERVER_ENDPOINT --zone=ZONE
    

    Verifica che gli argomenti corrispondano ai parametri del nuovo server, ad esempio utilizzando spanner-vm-1.example.com:15000 come endpoint e us-central1-a come zona.

Sostituire un server non root

Per sostituire un server non root, seleziona la scheda relativa al tuo ambiente:

Kubernetes

Per sostituire un server non root in un deployment Kubernetes, segui questi passaggi:

  1. Elimina il server che vuoi sostituire:

    spanner deployment servers delete SERVER_ENDPOINT --zone=ZONE
    

    Sostituisci quanto segue:

    • SERVER_ENDPOINT: l'endpoint del pod del server da eliminare, nel formato SERVER.pod.NAMESPACE:PORT, ad esempio spanner-a-4.pod.spanner-ns:15000. Per trovare gli endpoint del server nel deployment, elenca i server di deployment eseguendo spanner deployment servers list --zone=ZONE.
    • ZONE: la zona contenente il server, ad esempio us-central1-a.

    Questo passaggio potrebbe richiedere alcuni minuti, a seconda del volume di dati sul server. Spanner Omni sposta i dati da questo server ad altri server nel deployment. Assicurati che l'eliminazione del server sia completata prima di procedere al passaggio successivo.

    Per monitorare l'avanzamento dell'eliminazione, controlla lo stato del server:

    spanner deployment servers describe SERVER_ENDPOINT --zone=ZONE
    

    Attendi che il comando restituisca un errore NOT_FOUND o indichi che il server non è più registrato.

  2. Elimina la richiesta di volume permanente (PVC) per il pod che ospita il server:

    kubectl delete pvc DATA_VOLUME_NAME -n NAMESPACE
    

    Sostituisci quanto segue:

    • DATA_VOLUME_NAME: il nome del volume di dati, ad esempio data-volume-spanner-a-4. Per trovare il nome del volume di dati, elenca i PVC nel tuo spazio dei nomi eseguendo kubectl get pvc -n NAMESPACE.
    • NAMESPACE: lo spazio dei nomi del deployment, ad esempio spanner-ns.
  3. Elimina il pod:

    kubectl delete pod POD_NAME -n NAMESPACE
    

    Sostituisci POD_NAME con il nome del pod server da eliminare, ad esempio spanner-a-4.

    Kubernetes avvia automaticamente un nuovo server in un pod di sostituzione e collega un nuovo PVC. Spanner Omni registra automaticamente il nuovo server non root nel deployment.

VM

Per sostituire un server non root in un deployment di VM, segui questi passaggi:

  1. Elimina il server che vuoi sostituire:

    spanner deployment servers delete SERVER_ENDPOINT --zone=ZONE
    

    Sostituisci quanto segue:

    • SERVER_ENDPOINT: l'indirizzo IP o il nome host e la porta del server, ad esempio spanner-vm-4.example.com:15000. Per trovare gli endpoint del server, elenca i server di deployment eseguendo spanner deployment servers list --zone=ZONE.
    • ZONE: la zona contenente il server, ad esempio us-central1-a.

    Questo passaggio potrebbe richiedere alcuni minuti, a seconda del volume di dati sul server. Spanner Omni sposta i dati da questo server ad altri server nel deployment. Assicurati che l'eliminazione del server sia completata prima di procedere al passaggio successivo.

    Per monitorare l'avanzamento dell'eliminazione, controlla lo stato del server:

    spanner deployment servers describe SERVER_ENDPOINT --zone=ZONE
    

    Attendi che il comando restituisca un errore NOT_FOUND o indichi che il server non è più registrato.

  2. Esegui il riprovisioning del server non root con spazio di archiviazione pulito come spiegato in Aggiungere server non root. Il server viene aggiunto automaticamente al deployment.

Passaggi successivi