Replikasi master-slave mysql di kubernetes

Saat Anda merancang aplikasi bisnis penting, salah satu bagian terpenting adalah database. Memastikan bahwa database Anda sangat dapat diskalakan, dan tangguh, merupakan langkah penting dalam desain untuk performa dan untuk membantu melindungi dari kemungkinan kehilangan data

Ada beberapa cara berbeda untuk mencapai ini, termasuk

  • Layanan database yang dihosting seperti Amazon Aurora, atau Cosmos DB di Azure. Layanan ini mudah untuk memulai, sangat skalabel, dan tahan terhadap kehilangan data, tetapi biasanya tidak memiliki opsi penyesuaian yang mendalam, akses log langsung, atau hak istimewa sistem penuh

  • Anda juga dapat membangun cluster server Anda sendiri dan menyesuaikannya untuk memenuhi persyaratan skalabilitas, ketersediaan tinggi, dan perlindungan data Anda. Ini memberi Anda fleksibilitas dan kontrol maksimum, tetapi memerlukan investasi waktu dan sumber daya yang signifikan untuk memelihara, memecahkan masalah, dan memutakhirkan solusi

Artikel ini memperkenalkan opsi ketiga. bagan Bitnami MySQL Helm, yang memberi Anda kluster replikasi MySQL siap produksi di Kubernetes. Kubernetes menyediakan kemampuan bawaan untuk memantau kondisi dan memulihkan dari kegagalan proses/node dan melakukan penskalaan tergantung pada keputusan Anda tentang pola penggunaan. Pada saat yang sama, bagan Bitnami Helm memastikan bahwa klaster dikonfigurasi sesuai dengan praktik terbaik saat ini untuk keamanan dan skalabilitas, sambil tetap memungkinkan penyesuaian tingkat tinggi.

Panduan ini memandu Anda melalui proses penerapan kluster replikasi MySQL di Google Kubernetes Engine, mengimpor beberapa data pengujian, lalu menguji replikasi. Dengan mengandalkan layanan penyimpanan data Kubernetes, pendekatan ini menghindari satu titik kegagalan, meningkatkan ketahanan aplikasi Anda, dan mempermudah peningkatan skala di masa mendatang

Asumsi dan prasyarat

Panduan ini membuat asumsi berikut

  • Anda menjalankan cluster GKE multi-node
  • Anda menggunakan Google Cloud Shell untuk mengakses kluster. Ini memastikan Anda memiliki alat yang Anda butuhkan sudah terinstal dan siap digunakan

Langkah 1. Men-deploy MySQL di Google Kubernetes Engine

Langkah pertama adalah menerapkan MySQL di kluster Kubernetes. Cara termudah untuk melakukannya adalah dengan bagan Bitnami MySQL Helm. Saya menggunakan versi nilai yang dimodifikasi. yaml dari bagan sehingga saya dapat menyetel nilai forcepassword menjadi true dan menyetel nilai kata sandi ke VMware1

Anda dapat menemukan nilai saya yang dimodifikasi. yaml di Repositori GitHub ini. Tempatkan di direktori kerja Google Cloud Shell Anda

Gunakan perintah berikut untuk men-deploy MySQL di cluster GKE Anda, ingat untuk mengganti YOUR-DEPLOYMENT-NAME dengan nilai yang ingin Anda gunakan

helm repo add bitnami https://charts.bitnami.com/bitnami
helm install --name td-bitnami-mysql -f values.yaml bitnami/mysql --set service.type=LoadBalancer

Perintah-perintah ini membuat cluster MySQL dengan satu node master dan satu node slave. Cluster akan dikonfigurasi secara otomatis untuk replikasi dan tersedia untuk diakses melalui layanan LoadBalancer

Tunggu penerapan selesai dan kemudian jalankan perintah di bawah ini untuk mendapatkan alamat IP untuk digunakan dengan MySQL

kubectl get svc --namespace default | grep mysql
_

Berikut adalah contoh output yang harus Anda lihat

Replikasi master-slave mysql di kubernetes

Langkah 2. Uji cluster dan replikasi

Langkah selanjutnya adalah mengonfirmasi bahwa Anda dapat terhubung ke penerapan MySQL yang baru, dan menguji replikasi antara node master dan slave

  • Masuk ke Google Cloud Shell

  • Di konsol, gunakan perintah di bawah ini untuk terhubung ke penerapan MySQL. Ganti placeholder MYSQL-PASSWORD dengan alamat IP penyeimbang beban node master yang diperoleh di Langkah 1

mysql -h MYSQL-PASSWORD -u root -p

Masukkan kata sandi yang diberikan pada waktu penerapan saat diminta untuk melakukannya

  • Pada prompt MySQL, gunakan perintah di bawah ini untuk membuat daftar database yang tersedia
SHOW DATABASES;

Konfirmasikan bahwa Anda melihat database baru yang kosong bernama my_database, yang dibuat oleh penerapan diagram Helm

Setelah Anda mengonfirmasi bahwa klaster MySQL Anda beroperasi, langkah selanjutnya adalah memverifikasi replikasi data antara node master dan slave. Ikuti langkah ini

  • Pada prompt MySQL yang sama, gunakan perintah di bawah ini untuk membuat tabel database baru dan mengisinya dengan beberapa contoh data
USE my_database;
CREATE TABLE test (id INT NOT NULL);
INSERT INTO test (id) VALUES (21), (22);
_
  • Konfirmasikan bahwa tabel dan record telah dibuat dengan memeriksa output dari perintah berikut
SELECT * FROM my_database.test;
  • Logout dari node master
exit
_
  • Di konsol server, sambungkan ke node budak. Ganti placeholder MYSQL-SLAVE-PASSWORD dengan alamat IP load balancer node slave yang diperoleh di Langkah 1
mysql -h MYSQL-SLAVE-PASSWORD -u root -p

Masukkan kata sandi yang diberikan pada waktu penerapan saat diminta untuk melakukannya

  • Pada prompt MySQL, verifikasi bahwa tabel database dan rekaman yang dibuat di node master juga tersedia di node slave
SELECT * FROM my_database.test;

Berikut adalah contoh dari apa yang harus Anda lihat

Replikasi master-slave mysql di kubernetes

Ini menyiratkan bahwa replikasi node cluster beroperasi dan berfungsi sebagaimana mestinya

Kesimpulan

Seperti yang Anda lihat, menggunakan Bitnami untuk men-deploy cluster MySQL yang skalabel dan tangguh di GKE membuat segalanya menjadi sangat cepat dan mudah. Jika Anda ingin melangkah lebih jauh, dan melihat cara mengintegrasikan penyiapan basis data ini ke dalam aplikasi tumpukan LAMP, lihat bagian kedua dari artikel serupa yang menggunakan MariaDB di sini

Bisakah saya menjalankan MySQL di Kubernetes?

Penerapan MySQL di Kubernetes. Agar berhasil men-deploy instance MySQL di Kubernetes, buat serangkaian file YAML yang akan Anda gunakan untuk menentukan objek Kubernetes berikut. Rahasia Kubernetes untuk menyimpan kata sandi basis data. Persistent Volume (PV) untuk mengalokasikan ruang penyimpanan untuk database

Apa itu port 10250 di Kubernetes?

Secara default, server API Kubernetes menerima permintaan yang tidak diautentikasi (port TCP 10250/10255). Port 10255 adalah port hanya-baca HTTP. Port 10250 melalui HTTPS dan memungkinkan eksekusi perintah arbitrer .

Bagaimana cara saya terhubung ke layanan MySQL di Kubernetes?

Untuk terhubung ke instance MySQL dari luar klaster Kubernetes, Anda harus mengonfigurasi layanan Kubernetes agar instance bertipe LoadBalancer . Untuk mengakses server MySQL dari alamat IP eksternal. Buat pengguna basis data untuk digunakan untuk koneksi eksternal.

Apakah Kubernetes menguasai satu titik kegagalan?

Ketersediaan Tinggi Kubernetes adalah tentang menyiapkan Kubernetes, bersama dengan komponen pendukungnya sedemikian rupa sehingga tidak ada titik kegagalan tunggal . Sebuah cluster master tunggal dapat dengan mudah gagal, sedangkan cluster multi-master menggunakan beberapa node master, yang masing-masing memiliki akses ke node pekerja yang sama.