Cara menggunakan mysql router metadata cache

Oracle untuk Kubernetes adalah cara mudah untuk mengotomatiskan penyediaan database MySQL dalam cluster Anda. Salah satu fitur utama operator adalah dukungan pencadangan lepas tangan terintegrasi yang meningkatkan ketahanan Anda. Cadangan menyalin database Anda ke penyimpanan eksternal pada jadwal berulang.

Artikel ini akan memandu Anda dalam menyiapkan cadangan ke layanan penyimpanan objek yang kompatibel dengan Amazon S3. Anda juga akan melihat cara menyimpan cadangan di penyimpanan Oracle Cloud Infrastructure (OCI) atau volume persisten lokal di dalam cluster Anda.

Mempersiapkan Database Cluster

Instal operator MySQL di cluster Kubernetes Anda dan buat instance database sederhana untuk tujuan pengujian. Salin YAML di bawah ini dan simpan ke mysql.yaml:

apiVersion: v1 kind: Secret metadata: name: mysql-root-user stringData: rootHost: “%” rootUser: “root” rootPassword: “P@$$w0rd”   — – apiVersion: mysql.oracle.com/v2 jenis: InnoDBCluster metadata: nama: mysql-cluster spec: secretName: mysql-root-user instances: 3 tlsUseSelfSigned: true router: instance: 1

Gunakan Kubectl untuk menerapkan manifest:

$ kubectl apply -f mysql.yaml

Tunggu beberapa menit sementara operator MySQL menyediakan Pod Anda. Gunakan perintah get pods Kubectl untuk memeriksa progresnya. Anda akan melihat empat Pod yang sedang berjalan: satu instance router MySQL dan tiga server MySQL replicas.

$ kubectl get pods NAMA READY STATUS RESTARTS AGE mysql-cluster-0 2/2 Menjalankan 0 2m mysql-cluster-1 2/2 Menjalankan 0 2m mysql -cluster-2 2/2 Running 0 2m mysql-cluster-router-6b68f9b5cb-wbqm5 1/1 Running 0 2mMenentukan Jadwal Pencadangan

Operator MySQL memerlukan dua komponen untuk berhasil membuat pencadangan:

Jadwal pencadangan yang menentukan kapan pencadangan akan dijalankan. Profil cadangan yang mengonfigurasi lokasi penyimpanan dan opsi ekspor MySQL.

Jadwal dan profil dibuat secara terpisah satu sama lain. Ini memungkinkan Anda menjalankan beberapa pencadangan pada jadwal yang berbeda menggunakan profil yang sama.

Setiap jadwal dan profil dikaitkan dengan cluster database tertentu. Mereka dibuat sebagai sumber daya bersarang di dalam objek InnoDBCluster Anda. Setiap database yang Anda buat dengan operator MySQL memerlukan konfigurasi cadangannya sendiri.

Jadwal pencadangan ditentukan oleh bidang spec.backupSchedules database Anda. Setiap item memerlukan bidang jadwal yang menentukan kapan harus menjalankan pencadangan menggunakan ekspresi cron. Berikut adalah contoh yang memulai pencadangan setiap jam:

apiVersion: mysql.Oracle.com/v2 kind: InnoDBCluster metadata: name: mysql-cluster spec: secretName: mysql-root-user instance: 3 tlsUseSelfSigned: true router: instance: 1 backupSchedules : – nama: diaktifkan setiap jam: jadwal sebenarnya: “0 * * * *” backupProfileName: hourly-backup

Bidang backupProfileName merujuk profil cadangan yang akan digunakan. Anda akan membuat ini di langkah berikutnya.

Membuat Profil Cadangan

Profiles didefinisikan di bidang spec.backupProfiles. Setiap profil harus memiliki nama dan properti dumpInstance yang mengonfigurasi operasi pencadangan.

apiVersion: mysql.Oracle.com/v2 kind: InnoDBCluster metadata: name: mysql-cluster spec: secretName: mysql-root-user instances: 3 tlsUseSelfSigned: true router: instance: 1 backupSchedules: – nama: setiap jam diaktifkan: jadwal sebenarnya: “0 * * * *” backupProfileName: backup setiap jamProfiles: – nama: dump cadangan per jamInstance: penyimpanan: # …

Penyimpanan cadangan dikonfigurasi pada basis per profil di bidang dumpInstance.storage. Properti yang perlu Anda sediakan bergantung pada jenis penyimpanan yang Anda gunakan.

S3 Storage

Operator MySQL dapat mengunggah cadangan Anda langsung ke penyedia penyimpanan objek yang kompatibel dengan S3. Untuk menggunakan metode ini, Anda harus membuat rahasia Kubernetes yang berisi file konfigurasi aws CLI dengan kredensial Anda.

Tambahkan konten berikut ke s3-secret.yaml:

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

Ganti dengan akses S3 dan kunci rahasia Anda sendiri, kemudian gunakan Kubectl untuk membuat secret:

$ kubectl apply -f s3-secret.yaml secret/snbs yang dibuat berikut profile’s storage.s3 section:

bucketName – Nama bucket S3 untuk mengunggah cadangan Anda ke.prefix – Setel ini untuk menerapkan awalan ke file yang Anda unggah, seperti /my-app/mysql. Awalan memungkinkan Anda membuat pohon folder di dalam bucket.endpoint Anda – Setel ini ke URL penyedia layanan Anda saat Anda menggunakan penyimpanan pihak ketiga yang kompatibel dengan S3. Anda dapat menghilangkan bidang ini jika Anda menggunakan Amazon S3.config – Nama rahasia yang berisi file.profile kredensial Anda – Nama profil konfigurasi yang akan digunakan dalam file kredensial. Ini disetel ke default pada contoh di atas.

Berikut contoh lengkapnya:

apiVersion: mysql.Oracle.com/v2 jenis: InnoDBCluster metadata: nama: mysql-cluster spec: secretName: mysql-root-user instance: 3 tlsUseSelfSigned: true router : instans: 1 backupSchedules: – nama: diaktifkan setiap jam: jadwal sebenarnya: “0 * * * *” backupProfileName: backup per jamProfiles: – nama: dump backup per jamInstance: penyimpanan: s3: bucketName: awalan backup: /mysql config: s3-secret profile: default

Menerapkan manifes ini akan mengaktifkan pencadangan basis data setiap jam ke akun S3 Anda.

OCI Storage

Operator mendukung penyimpanan objek Oracle Cloud Infrastructure (OCI) sebagai alternatif untuk S3. Ini dikonfigurasi dengan cara yang serupa. Pertama-tama buat rahasia untuk kredensial OCI Anda:

apiVersion: v1 kind: Secret metadata: name: oci-secret stringData: fingerprint: YOUR_OCI_FINGERPRINT passphrase: YOUR_OCI_PASSPHRASE privatekey: YOUR_OCI_RSA_PRIVATE_KEY wilayah: us-ashburn-1 tenancy: YOUR_OCI_TENANCY konfigurasi pengguna selanjutnya: YOUR_OCI_TENANCY pengguna cadangan dengan bait storage.ociObjectStorage:

apiVersion: mysql.Oracle.com/v2 jenis: InnoDBCluster metadata: nama: mysql-cluster spec: secretName: mysql-root-user instance: 3 tlsUseSelfSigned: true router: instance: 1 backupSchedules: – nama : diaktifkan setiap jam: jadwal sebenarnya: “0 * * * *” backupProfileName: backup setiap jamProfiles: – nama: dump per jam-backupInstance: penyimpanan: ociObjectStorage: bucketName: awalan backup: / kredensial mysql: oci-secret

Modifikasi bidang bucketName dan awalan untuk mengatur lokasi unggah di akun OCI Anda. Bidang kredensial harus merujuk rahasia yang berisi kredensial OCI Anda.

Kubernetes Volume Storage

Volume persisten lokal adalah opsi penyimpanan ketiga. Ini kurang kuat karena data cadangan Anda akan tetap berada di dalam cluster Kubernetes Anda. Namun ini dapat berguna untuk pencadangan satu kali dan tujuan pengujian.

Pertama buat volume persisten dan klaim yang menyertainya:

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: request: storage: 10Gi

Contoh manifes ini tidak cocok untuk penggunaan produksi. Anda harus memilih kelas penyimpanan dan mode pemasangan volume yang sesuai untuk distribusi Kubernetes Anda.

Selanjutnya konfigurasikan profil cadangan Anda untuk menggunakan volume persisten Anda dengan menambahkan bidang storage.persistentVolumeClaim:

apiVersion: mysql.oracle.com/v2 kind: InnoDBCluster metadata: name: mysql-cluster spec: secretName: mysql-root-user instances: 3 tlsUseSelfSigned: true router: instance: 1 backupSchedules: – nama: setiap jam diaktifkan: jadwal sebenarnya: “0 * * * *” backupProfileName: pencadangan per jam Profil: – nama : dump perjam-backupInstance: penyimpanan: persistentVolumeClaim: claimName: backup-pvc

Klaim volume persisten yang dibuat sebelumnya dirujuk oleh bidang claimName. Operator MySQL sekarang akan menyimpan data cadangan ke dalam volume.

Setting Backup Options

Backups dibuat menggunakan utilitas dumpInstance MySQL Shell. Ini default untuk mengekspor dump lengkap dari server Anda. Format menulis struktur dan file data chunked untuk setiap tabel. Keluaran dikompresi dengan zstd.

Anda dapat meneruskan opsi ke dumpInstance melalui bidang dumpOptions di profil cadangan operator MySQL:

apiVersion: mysql.Oracle.com/v2 jenis: InnoDBCluster metadata: nama: mysql-cluster spec: # … backupProfiles: – nama: hourly-backup dumpInstance: dumpOptions: chunking: false compression: gzip storage: # …

Contoh ini menonaktifkan chunked output, membuat satu file data per tabel, dan beralih ke kompresi gzip alih-alih zstd. Anda dapat menemukan referensi lengkap untuk opsi yang tersedia di dokumentasi MySQL.

Memulihkan Cadangan

Operator MySQL dapat menginisialisasi cluster database baru menggunakan file yang dibuat sebelumnya dari dumpInstance. Ini memungkinkan Anda untuk memulihkan cadangan Anda langsung ke cluster Kubernetes Anda. Ini berguna dalam situasi pemulihan atau saat Anda memigrasikan database yang ada ke Kubernetes.

Inisialisasi database dikendalikan oleh bidang spec.initDB pada objek InnoDBCluster Anda. Dalam bait ini, gunakan objek dump.storage untuk merujuk lokasi pencadangan yang Anda gunakan sebelumnya. Formatnya cocok dengan bidang dumpInstance.storage yang setara di objek profil cadangan.

apiVersion: v1 jenis: Metadata rahasia: nama: s3-secret stringData: kredensial: | [default] aws_access_key_id = YOUR_S3_ACCESS_KEY aws_secret_access_key = YOUR_S3_SECRET_KEY — apiVersion: mysql.Oracle.com/v2 jenis: InnoDBCluster metadata: nama: mysql-cluster-recovered spec: secretName: mysql-root-user instance: true router 3 tigned instance: 1 initDB: dump: storage: s3: bucketName: backups prefix: /mysql/mysql20221031220000 config: s3-secret profile: default

Menerapkan file YAML ini akan membuat cluster database baru yang diinisialisasi dengan output dumpInstance di bucket S3 yang ditentukan. Bidang awalan harus berisi jalur lengkap ke file dump di dalam ember. Cadangan yang dibuat oleh operator akan secara otomatis disimpan dalam folder yang diberi cap waktu; Anda harus menunjukkan mana yang akan dipulihkan dengan mengatur awalan. Jika Anda memulihkan dari volume yang persisten, gunakan bidang jalur alih-alih prefix.

Summary

Oracle Operator MySQL mengotomatiskan manajemen database MySQL dalam cluster Kubernetes. Dalam artikel ini Anda telah mempelajari cara mengonfigurasi sistem pencadangan operator untuk menyimpan dump basis data lengkap dalam volume persisten atau bucket penyimpanan objek.

Menggunakan Kubernetes untuk menskalakan MySQL secara horizontal menambah ketahanan, tetapi pencadangan eksternal tetap penting jika cluster Anda disusupi atau data tidak sengaja terhapus. Operator MySQL dapat memulihkan instance database baru dari cadangan Anda jika diperlukan, menyederhanakan prosedur pemulihan pascabencana.