Come eseguire il backup dei cluster operatore MySQL di Kubernetes

L'operatore MySQL di Oracle per Kubernetes è un modo conveniente per automatizzare il provisioning del database MySQL all'interno del tuo cluster. Una delle caratteristiche principali dell'operatore è il supporto di backup integrato che aumenta la tua resilienza. I backup copiano il tuo database su uno storage esterno in base a una pianificazione ricorrente.

Questo articolo ti guiderà nella configurazione dei backup su un servizio di object storage compatibile con Amazon S3. Vedrai anche come archiviare i backup nello storage Oracle Cloud Infrastructure (OCI) o nei volumi persistenti locali all'interno del tuo cluster.

Preparazione di un cluster di database< /h2>

Installa l'operatore MySQL nel tuo cluster Kubernetes e crea una semplice istanza di database a scopo di test. Copia lo YAML di seguito e salvalo in mysql.yaml:

apiVersion: v1 tipo: Segreti metadati: nome: mysql-root-user stringData: rootHost : "%" rootUser: "root" rootPassword: "P@$$w0rd"   apiVersion: mysql.oracle.com/v2 tipo: InnoDBCluster metadati: nome: mysql-clusterspec: secretName: mysql-root-user istanze : 3 tlsUseSelfSigned: true router : istanze: 1

Utilizza Kubectl per applicare il manifest:

$ kubectl apply – f mysql.yaml

Attendi qualche minuto mentre l'operatore MySQL effettua il provisioning dei tuoi Pod. Usa il comando get pods di Kubectl per controllare lo stato di avanzamento. Dovresti vedere quattro Pod in esecuzione: un'istanza del router MySQL e tre repliche del server MySQL.

$ kubectl get pods NOME PRONTO STATO RESTARTS AGE mysql-cluster-0 2/2 In esecuzione 0 2m mysql-cluster-1 2/2 In esecuzione 0 2m mysql-cluster-2 2/2 In esecuzione 0 2m mysql-cluster-router-6b68f9b5cb-wbqm5 1/1 In esecuzione 0 2m

Definizione di un programma di backup

L'operatore MySQL richiede due componenti per creare correttamente un backup:

  • Un programma di backup che definisce quando verrà eseguito il backup.
  • Un >profilo di backup che configura la posizione di archiviazione e le opzioni di esportazione MySQL.

Le pianificazioni ei profili vengono creati indipendentemente l'uno dall'altro. Ciò ti consente di eseguire più backup su pianificazioni diverse utilizzando lo stesso profilo.

Ogni pianificazione e profilo è associato a un cluster di database specifico. Vengono creati come risorse nidificate all'interno degli oggetti InnoDBCluster. Ogni database che crei con l'operatore MySQL necessita di una propria configurazione di backup.

Le pianificazioni di backup sono definite dal campo spec.backupSchedules del tuo database. Ciascun elemento richiede un campo di pianificazione che specifica quando eseguire il backup utilizzando un'espressione cron. Ecco un esempio che avvia un backup ogni ora:

apiVersion: mysql.oracle.com/v2 gentile: InnoDBCluster metadati: nome: mysql-cluster< strong class="co4"> specifica: secretName: mysql-root-user istanze: 3 tlsUseSelfSigned: true router: istanze: 1 backupSchedules: – nome : orario abilitato: true pianificazione: "0 * * * *" backupProfileName: backup orario

Il campo backupProfileName fa riferimento al profilo di backup da utilizzare. Lo creerai nel passaggio successivo.

Creazione di profili di backup

I profili sono definiti nel campo spec.backupProfiles. Ciascun profilo deve avere un nome e una proprietà dumpInstance che configura l'operazione di backup.

apiVersion: mysql.oracle. com/v2 gentile: InnoDBCluster metadati: nome: mysql-cluster specifiche: secretName: mysql-root-user istanze: 3 tlsUseSelfSigned: true router: istanze : 1 backupProgrammi:– name: ogni ora abilitato: true programma: "0 * * * *" backupProfileName: backup orario backupProfiles: – nome: backup orario dumpInstance: archiviazione: # …

L'archiviazione di backup è configurata in base al profilo nel campo dumpInstance.storage. Le proprietà che devi fornire dipendono dal tipo di spazio di archiviazione che stai utilizzando.

Archiviazione S3

L'operatore MySQL può caricare i tuoi backup direttamente su provider di storage di oggetti compatibili con S3. Per utilizzare questo metodo, devi creare un segreto Kubernetes che contenga un file di configurazione aws CLI con le tue credenziali.

Aggiungi il seguente contenuto a s3-secret.yaml:

apiVersion: v1 gentile: Segreto metadati: name: s3-secret stringData : credenziali: | [predefinito] aws_access_key_id = YOUR_S3_ACCESS_KEY aws_secret_access_key = YOUR_S3_SECRET_KEY

Sostituisci le tue chiavi di accesso e segrete S3, quindi usa Kubectl per creare il segreto:

$ kubectl apply -f s3-secret.yaml secret/s3-secret creato

Quindi aggiungi i seguenti campi alla sezione storage.s3 del tuo profilo di backup:

  • bucketName – Il nome del bucket S3 in cui caricare i backup.
  • prefisso– Impostalo per applicare un prefisso ai file caricati, come /my-app/mysql. Il prefisso ti consente di creare alberi di cartelle all'interno del tuo bucket.
  • endpoint – Impostalo sull'URL del tuo fornitore di servizi quando utilizzi spazio di archiviazione compatibile con S3 di terze parti. Puoi omettere questo campo se stai utilizzando Amazon S3.
  • config – Il nome del segreto contenente il file delle tue credenziali.
  • profilo– Il nome del profilo di configurazione da utilizzare nel file delle credenziali. Questo è stato impostato come predefinito nell'esempio sopra.

Ecco un esempio completo:

apiVersion: mysql.oracle.com/v2 tipo: InnoDBCluster metadati: nome: mysql-cluster spec: secretName: mysql-root-user istanze: 3 tlsUseSelfSigned: true router: istanze: 1 backupSchedules: – nome: ogni ora abilitato: true pianificazione: "0 * * * *" backupProfileName: backup orario backupProfiles: – nome: backup orario dumpInstance: archiviazione: s3:< strong class="co3"> bucketName: backupprefisso: /mysql config: s3-secret< strong class="co3"> profilo: impostazione predefinita

L'applicazione di questo manifest attiverà backup orari del database sul tuo account S3.

Archiviazione OCI

L'operatore supporta lo storage di oggetti Oracle Cloud Infrastructure (OCI) come alternativa a S3. È configurato in modo simile. Innanzitutto crea un segreto per le tue credenziali OCI:

apiVersion: v1 kind< /strong>: Segreti metadati: nome: oci-secret stringData: fingerprint: YOUR_OCI_FINGERPRINT passphrase: YOUR_OCI_PASSPHRASE privatekey: YOUR_OCI_RSA_PRIVATE_KEY regione: us-ashburn-1 tenancy: YOUR_OCI_TENANCY utente< strong class="sy2">: YOUR_OCI_USER

Quindi configura il profilo di backup con una stanza storage.ociObjectStorage:

apiVersion: mysql.oracle.com/v2 tipo: InnoDBCluster metadati: nome: mysql-cluster spec: secretName : mysql-root-user istanze: 3< strong class="co3"> tlsUseSelfSigned: truerouter: istanze: 1 backupSchedules: – nome: ogni ora abilitato: true pianificazione: "0 * * * *"< strong class="co3"> backupProfileName: backup orariobackupProfiles: – nome: backup orario dumpInstance: archiviazione: ociObjectStorage: bucketName: backup prefisso: /mysql credenziali: oci-segreto

Modifica i campi bucketName e prefix per impostare la posizione di caricamento nel tuo account OCI. Il campo delle credenziali deve fare riferimento al segreto che contiene le tue credenziali OCI.

Archiviazione volume Kubernetes

I volumi persistenti locali sono una terza opzione di archiviazione. Questo è meno affidabile in quanto i tuoi dati di backup risiedono ancora all'interno del tuo cluster Kubernetes. Tuttavia può essere utile per backup una tantum e scopi di test.

Prima crea un volume persistente e un'attestazione di accompagnamento:

apiVersion: v1 gentile: < /strong>Volume persistente metadati: nome: backup-pv spec: storageClassName: standard capacità >: archiviazione: 10Gi accessModes: – ReadWriteOnce hostPath: percorso: /tmp   apiVersion: v1 tipo: PersistentVolumeClaim metadati: nome: backup-pvc spec: storageClassName: standard accessModes: – ReadWriteOnce risorse: richieste: spazio di archiviazione: 10Gi

Questo manifest di esempio non è adatto per l'uso in produzione. Dovresti selezionare una classe di archiviazione e una modalità di montaggio del volume appropriate per la tua distribuzione Kubernetes.

Quindi configura il tuo profilo di backup per utilizzare il tuo volume persistente aggiungendo un campo storage.persistentVolumeClaim:

apiVersion: mysql.oracle.com/v2 tipo: InnoDBCluster metadati: nome: mysql-cluster specifica:secretName: mysql-root-user istanze: 3 tlsUseSelfSigned: true router: istanze : 1 backupSchedules: – nome: ogni ora abilitato: true pianificazione: "0 * * * *" backupProfileName: backup orario backupProfiles: – name: backup orario dumpInstance: archiviazione:< strong class="co4"> persistenteVolumeClaim:claimName: backup-pvc

L'attestazione di volume persistente creata in precedenza è referenziata dal campo claimName. L'operatore MySQL ora depositerà i dati di backup nel volume.

Impostazione delle opzioni di backup

I backup vengono creati utilizzando l'utilità dumpInstance di MySQL Shell. Per impostazione predefinita, esporta un dump completo del tuo server. Il formato scrive la struttura ei file di dati in blocchi per ogni tabella. L'output è compresso con zstd.

Puoi passare le opzioni a dumpInstance tramite il campo dumpOptions in un profilo di backup di un operatore MySQL:

apiVersion< strong class="sy2">: mysql.oracle.com/v2 gentile: InnoDBCluster metadati: nome: mysql-cluster specifica: # … backupProfiles: – nome: backup orario dumpInstance: dumpOptions: chunking: false< strong class="co3"> compressione: gzip archiviazione: # …

Questo esempio disabilita l'output in blocchi, creando un file di dati per tabella e passa alla compressione gzip invece di zstd. Puoi trovare un riferimento completo per le opzioni disponibili nella documentazione di MySQL.

Ripristino di un backup

L'operatore MySQL può inizializzare nuovi cluster di database utilizzando file creati in precedenza da dumpInstance. Ciò ti consente di ripristinare i tuoi backup direttamente nel tuo cluster Kubernetes. È utile in situazioni di ripristino o durante la migrazione di un database esistente a Kubernetes.

L'inizializzazione del database è controllata dal campo spec.initDB sugli oggetti InnoDBCluster. All'interno di questa stanza, utilizzare l'oggetto dump.storage per fare riferimento alla posizione di backup utilizzata in precedenza. Il formato corrisponde al campo dumpInstance.storage equivalente negli oggetti del profilo di backup.

apiVersion: v1 tipo: Segreti metadati: nome: s3-secret stringData: credenziali: | [predefinito] aws_access_key_id = YOUR_S3_ACCESS_KEY aws_secret_access_key = YOUR_S3_SECRET_KEY apiVersion< /strong>: mysql.oracle.com/v2 gentile: InnoDBCluster metadati: nome: mysql-cluster-recovered spec: secretName: mysql-root-user istanze : 3 tlsUseSelfSigned: true router: istanze: 1 initDB: dump: storage: s3: bucketName: backup prefisso: /mysql/mysql20221031220000 config: < /strong>s3-secret profilo: predefinito

L'applicazione di questo file YAML creerà un nuovo cluster di database inizializzato con l'output dumpInstance nel bucket S3 specificato. Il campo del prefisso deve contenere il percorso completo dei file di dump all'interno del bucket. I backup creati dall'operatore verranno automaticamente archiviati in cartelle con timestamp; dovrai indicare quale recuperare impostando il prefisso. Se stai eseguendo il ripristino da un volume persistente, utilizza il campo del percorso anziché il prefisso.

Riepilogo

L'operatore MySQL di Oracle automatizza la gestione del database MySQL all'interno dei cluster Kubernetes. In questo articolo hai appreso come configurare il sistema di backup dell'operatore per archiviare dump completi del database in un volume persistente o in un bucket di archiviazione oggetti.

L'utilizzo di Kubernetes per scalare orizzontalmente MySQL aggiunge resilienza, ma i backup esterni sono ancora vitali nel caso in cui il tuo cluster sia compromesso o i dati vengano eliminati accidentalmente. L'operatore MySQL può ripristinare una nuova istanza di database dal backup, se necessario, semplificando la procedura di ripristino post-disastro.

LEGGI SUCCESSIVO

  • › Che cos'è un microfono supercardioide?
  • › Come contare le caselle di controllo in Microsoft Excel
  • › La funzione SOS satellitare per iPhone 14 arriverà a novembre
  • › Come nascondere i rulli su Facebook
  • › Come silenziare le notifiche su iPhone
  • › Small Town chiede all'avvio di “Per favore spegni quel motore a razzo”

Posted

in

by

Tags: