Si të bëni kopje rezervë të grupeve të operatorëve të Kubernetes MySQL


Operatori MySQL i Oracle për Kubernetes është një mënyrë e përshtatshme për të automatizuar sigurimin e bazës së të dhënave MySQL brenda grupit tuaj. Një nga tiparet kryesore të operatorit është mbështetja e integruar e rezervimit të dorës që rrit elasticitetin tuaj. Rezervimet kopjojnë bazën tuaj të të dhënave në hapësirën ruajtëse të jashtme në një orar të përsëritur.

Ky artikull do t'ju udhëzojë në konfigurimin e kopjeve rezervë në një shërbim të ruajtjes së objekteve të pajtueshëm me Amazon S3. Do të shihni gjithashtu se si të ruani kopjet rezervë në hapësirën ruajtëse të Oracle Cloud Infrastructure (OCI) ose vëllime të vazhdueshme lokale brenda grupit tuaj.

Përgatitja e një grupi të bazës së të dhënave

Instaloni operatorin MySQL në grupin tuaj Kubernetes dhe krijoni një shembull të thjeshtë të bazës së të dhënave për qëllime testimi. Kopjojeni YAML më poshtë dhe ruajeni në mysql.yaml:

apiVersion: v1
kind: Secret
metadata:
  name: mysql-root-user
stringData:
  rootHost: "%"
  rootUser: "root"
  rootPassword: "P@$$w0rd"
 
---

apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
  name: mysql-cluster
spec:
  secretName: mysql-root-user
  instances: 3
  tlsUseSelfSigned: true
  router:
    instances: 1

Përdor Kubectl për të aplikuar manifestin:

$ kubectl apply -f mysql.yaml

Prisni disa minuta derisa operatori MySQL të sigurojë Pods-in tuaj. Përdorni komandën merr pods të Kubectl për të kontrolluar përparimin. Ju duhet të shihni katër Pods që funksionojnë: një shembull i ruterit MySQL dhe tre kopje të serverit MySQL.

$ kubectl get pods
NAME                                    READY   STATUS    RESTARTS   AGE
mysql-cluster-0                         2/2     Running   0          2m
mysql-cluster-1                         2/2     Running   0          2m
mysql-cluster-2                         2/2     Running   0          2m
mysql-cluster-router-6b68f9b5cb-wbqm5   1/1     Running   0          2m

Përcaktimi i një plani rezervë

Operatori MySQL kërkon dy komponentë për të krijuar me sukses një kopje rezervë:

  • Një program rezervë që përcakton se kur do të ekzekutohet rezervimi.
  • Një profil rezervë që konfiguron vendndodhjen e ruajtjes dhe opsionet e eksportit të MySQL.

Oraret dhe profilet krijohen në mënyrë të pavarur nga njëri-tjetri. Kjo ju lejon të ekzekutoni kopje rezervë të shumta në orare të ndryshme duke përdorur të njëjtin profil.

Çdo orar dhe profil shoqërohet me një grup specifik të bazës së të dhënave. Ato janë krijuar si burime të mbivendosura brenda objekteve tuaja InnoDBCluster. Çdo bazë të dhënash që krijoni me operatorin MySQL ka nevojë për konfigurimin e vet rezervë.

Oraret e rezervimit përcaktohen nga fusha spec.backupSchedules e bazës së të dhënave. Çdo artikull kërkon një fushë schedule që specifikon se kur të ekzekutohet kopja rezervë duke përdorur një shprehje cron. Këtu është një shembull që fillon një kopje rezervë çdo orë:

apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
  name: mysql-cluster
spec:
  secretName: mysql-root-user
  instances: 3
  tlsUseSelfSigned: true
  router:
    instances: 1
   backupSchedules:
    - name: hourly
      enabled: true
      schedule: "0 * * * *"
      backupProfileName: hourly-backup

Fusha backupProfileName i referohet profilit rezervë për t'u përdorur. Ju do ta krijoni këtë në hapin tjetër.

Krijimi i profileve rezervë

Profilet përcaktohen në fushën spec.backupProfiles. Çdo profil duhet të ketë një name dhe një veçori dumpInstance që konfiguron operacionin rezervë.

apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
  name: mysql-cluster
spec:
  secretName: mysql-root-user
  instances: 3
  tlsUseSelfSigned: true
  router:
    instances: 1
  backupSchedules:
    - name: hourly
      enabled: true
      schedule: "0 * * * *"
      backupProfileName: hourly-backup
  backupProfiles:
    - name: hourly-backup
      dumpInstance:
        storage:
          # ...

Ruajtja rezervë është konfiguruar në bazë të profilit në fushën dumpInstance.storage. Karakteristikat që duhet të ofroni varen nga lloji i ruajtjes që po përdorni.

Magazinimi S3

Operatori MySQL mund të ngarkojë kopjet rezervë tuaj direkt te ofruesit e ruajtjes së objekteve të pajtueshëm me S3. Për të përdorur këtë metodë, duhet të krijoni një sekret Kubernetes që përmban një skedar konfigurimi CLI aws me kredencialet tuaja.

Shtoni përmbajtjen e mëposhtme në s3-secret.yaml:

apiVersion: v1
kind: Secret
metadata:
  name: s3-secret
stringData:
  credentials: |
    [default]
    aws_access_key_id = YOUR_S3_ACCESS_KEY
    aws_secret_access_key = YOUR_S3_SECRET_KEY

Zëvendësoni aksesin tuaj në S3 dhe çelësat sekretë, më pas përdorni Kubectl për të krijuar sekretin:

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

Më pas shtoni fushat e mëposhtme në seksionin storage.s3 të profilit tuaj rezervë:

  • bucketName – Emri i kovës S3 ku do të ngarkoni kopjet rezervë.
  • prefiks – Vendoseni këtë për të aplikuar një parashtesë në skedarët tuaj të ngarkuar, si p.sh. /my-app/mysql. Parashtesa ju lejon të krijoni pemë dosjesh brenda kovës tuaj.
  • pikë fundore – Vendoseni këtë në URL-në e ofruesit të shërbimit tuaj kur jeni duke përdorur hapësirën ruajtëse të pajtueshme me S3 të palëve të treta. Ju mund ta hiqni këtë fushë nëse jeni duke përdorur Amazon S3.
  • config – Emri i sekretit që përmban skedarin tuaj të kredencialeve.
  • profili – Emri i profilit të konfigurimit për t'u përdorur brenda skedarit të kredencialeve. Kjo u caktua në parazgjedhur në shembullin e mësipërm.

Këtu është një shembull i plotë:

apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
  name: mysql-cluster
spec:
  secretName: mysql-root-user
  instances: 3
  tlsUseSelfSigned: true
  router:
    instances: 1
  backupSchedules:
    - name: hourly
      enabled: true
      schedule: "0 * * * *"
      backupProfileName: hourly-backup
  backupProfiles:
    - name: hourly-backup
      dumpInstance:
        storage:
          s3:
            bucketName: backups
            prefix: /mysql
            config: s3-secret
            profile: default

Zbatimi i këtij manifesti do të aktivizojë rezervimet e bazës së të dhënave për orë në llogarinë tuaj S3.

Ruajtja e OCI

Operatori mbështet ruajtjen e objekteve të Oracle Cloud Infrastructure (OCI) si një alternativë ndaj S3. Është konfiguruar në një mënyrë të ngjashme. Fillimisht krijoni një sekret për kredencialet tuaja OCI:

apiVersion: v1
kind: Secret
metadata:
  name: oci-secret
stringData:
  fingerprint: YOUR_OCI_FINGERPRINT
  passphrase: YOUR_OCI_PASSPHRASE
  privatekey: YOUR_OCI_RSA_PRIVATE_KEY
  region: us-ashburn-1
  tenancy: YOUR_OCI_TENANCY
  user: YOUR_OCI_USER

Më pas konfiguroni profilin rezervë me një strofë storage.ociObjectStorage:

apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
  name: mysql-cluster
spec:
  secretName: mysql-root-user
  instances: 3
  tlsUseSelfSigned: true
  router:
    instances: 1
  backupSchedules:
    - name: hourly
      enabled: true
      schedule: "0 * * * *"
      backupProfileName: hourly-backup
  backupProfiles:
    - name: hourly-backup
      dumpInstance:
        storage:
          ociObjectStorage:
            bucketName: backups
            prefix: /mysql
            credentials: oci-secret

Modifikoni fushat bucketName dhe prefiksin për të vendosur vendndodhjen e ngarkimit në llogarinë tuaj OCI. Fusha kredencialet duhet t'i referohet sekretit që përmban kredencialet tuaja OCI.

Ruajtja e vëllimit të Kubernetes

Vëllimet e vazhdueshme lokale janë një opsion i tretë i ruajtjes. Kjo është më pak e qëndrueshme pasi të dhënat tuaja rezervë do të qëndrojnë ende brenda grupit tuaj Kubernetes. Sidoqoftë, mund të jetë i dobishëm për kopje rezervë të njëhershme dhe qëllime testimi.

Së pari krijoni një vëllim të vazhdueshëm dhe pretendim shoqërues:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: backup-pv
spec:
  storageClassName: standard
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /tmp
 
---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: backup-pvc
spec:
  storageClassName: standard
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

Ky manifest shembull nuk është i përshtatshëm për përdorim prodhimi. Ju duhet të zgjidhni një klasë të përshtatshme të ruajtjes dhe modalitetin e montimit të volumit për shpërndarjen tuaj Kubernetes.

Më pas konfiguroni profilin tuaj rezervë për të përdorur volumin tuaj të vazhdueshëm duke shtuar një fushë storage.persistentVolumeClaim:

apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
  name: mysql-cluster
spec:
  secretName: mysql-root-user
  instances: 3
  tlsUseSelfSigned: true
  router:
    instances: 1
  backupSchedules:
    - name: hourly
      enabled: true
      schedule: "0 * * * *"
      backupProfileName: hourly-backup
  backupProfiles:
    - name: hourly-backup
      dumpInstance:
        storage:
          persistentVolumeClaim:
            claimName: backup-pvc

Pretendimi i vazhdueshëm i vëllimit i krijuar më herët referohet nga fusha claimName. Operatori MySQL tani do të depozitojë të dhëna rezervë në vëllim.

Vendosja e opsioneve rezervë

Rezervimet krijohen duke përdorur mjetin dumpInstance të MySQL Shell. Ky parazgjedh për të eksportuar një hale të plotë të serverit tuaj. Formati shkruan strukturën dhe skedarët e të dhënave të copëtuara për secilën tabelë. Dalja është e ngjeshur me zstd.

Mund t'i kaloni opsionet te dumpInstance nëpërmjet fushës dumpOptions në një profil rezervë të operatorit MySQL:

apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
  name: mysql-cluster
spec:
  # ...
  backupProfiles:
    - name: hourly-backup
      dumpInstance:
        dumpOptions:
          chunking: false
          compression: gzip
        storage:
          # ...

Ky shembull çaktivizon daljen e copëtuar, duke krijuar një skedar të dhënash për tabelë dhe kalon në kompresim gzip në vend të zstd. Ju mund të gjeni një referencë të plotë për opsionet e disponueshme në dokumentacionin MySQL.

Rivendosja e një kopje rezervë

Operatori MySQL mund të inicializojë grupe të reja të bazës së të dhënave duke përdorur skedarë të krijuar më parë nga dumpInstance. Kjo ju lejon të rivendosni kopjet rezervë direkt në grupin tuaj Kubernetes. Është i dobishëm në situatat e rikuperimit ose kur po migroni një bazë të dhënash ekzistuese në Kubernetes.

Inicializimi i bazës së të dhënave kontrollohet nga fusha spec.initDB në objektet tuaja InnoDBCluster. Brenda kësaj strofe, përdorni objektin dump.storage për të referuar vendndodhjen rezervë që keni përdorur më parë. Formati përputhet me fushën ekuivalente dumpInstance.storage në objektet e profilit rezervë.

apiVersion: v1
kind: Secret
metadata:
  name: s3-secret
stringData:
  credentials: |
    [default]
    aws_access_key_id = YOUR_S3_ACCESS_KEY
    aws_secret_access_key = YOUR_S3_SECRET_KEY

---

apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
  name: mysql-cluster-recovered
spec:
  secretName: mysql-root-user
  instances: 3
  tlsUseSelfSigned: true
  router:
    instances: 1
  initDB:
    dump:
      storage:
        s3:
          bucketName: backups
          prefix: /mysql/mysql20221031220000
          config: s3-secret
          profile: default

Aplikimi i këtij skedari YAML do të krijojë një grup të ri të bazës së të dhënave që është inicializuar me daljen dumpInstance në kovën e specifikuar S3. Fusha prefiksi duhet të përmbajë shtegun e plotë drejt skedarëve të depozituar brenda kovës. Kopjet rezervë të krijuara nga operatori do të ruhen automatikisht në dosje me stampim kohor; do t'ju duhet të tregoni se cilin të rikuperoni duke vendosur prefiksin. Nëse po riktheni nga një vëllim i vazhdueshëm, përdorni fushën rruga në vend të prefiksit.

Përmbledhje

Operatori MySQL i Oracle automatizon menaxhimin e bazës së të dhënave MySQL brenda grupimeve të Kubernetes. Në këtë artikull ju keni mësuar se si të konfiguroni sistemin rezervë të operatorit për të ruajtur deponitë e plota të bazës së të dhënave në një kovë të vazhdueshme vëllimi ose objekti.

Përdorimi i Kubernetes për të shkallëzuar horizontalisht MySQL shton elasticitetin, por kopjet rezervë të jashtme janë ende jetike në rast se grupi juaj komprometohet ose të dhënat fshihen aksidentalisht. Operatori MySQL mund të rivendosë një shembull të ri të bazës së të dhënave nga rezervimi juaj nëse keni nevojë ndonjëherë, duke thjeshtuar procedurën e rikuperimit pas fatkeqësisë.


Të gjitha të drejtat e rezervuara. © Linux-Console.net • 2019-2024