Cluster MariaDB terdiri dari Server MariaDB dengan Cluster Galera dan MariaDB MaxScale. Sebagai solusi replikasi multi-master, setiap Server MariaDB dengan Galera Cluster dapat beroperasi sebagai server utama. Ini berarti bahwa perubahan yang dilakukan pada setiap node dalam cluster mereplikasi ke setiap node lain dalam cluster, menggunakan replikasi berbasis sertifikasi dan pemesanan transaksi global untuk mesin penyimpanan InnoDB. MariaDB MaxScale adalah proxy database, berada di atas Server MariaDB yang memperluas ketersediaan tinggi, skalabilitas, dan keamanan sementara pada saat yang sama menyederhanakan pengembangan aplikasi dengan memisahkannya dari infrastruktur database yang mendasarinya.
Dalam seri blog ini, kita akan melihat administrasi MaxScale menggunakan maxctrl untuk Cluster MariaDB kita. Dalam angsuran pertama dari seri blog ini, kita akan membahas pengenalan dan beberapa dasar utilitas baris perintah maxctrl. Setup kami terdiri dari satu server MaxScale dan MariaDB 10.4 3-node dengan Galera 4, seperti yang diilustrasikan dalam diagram berikut:
Cluster MariaDB kami digunakan dan dikelola oleh ClusterControl, sementara host MaxScale kami host baru di cluster dan tidak digunakan oleh ClusterControl untuk tujuan panduan ini.
Instalasi MaxScale
Instalasi MaxScale cukup mudah. Pilih sistem operasi yang tepat dari halaman unduh MariaDB untuk MaxScale dan unduh. Contoh berikut menunjukkan bagaimana seseorang akan menginstal MaxScale pada host CentOS 8:
$ wget https://dlm.mariadb.com/1067156/MaxScale/2.4.10/centos/8/x86_64/maxscale-2.4.10-1.centos.8.x86_64.rpm
$ yum localinstall maxscale-2.4.10-1.centos.8.x86_64.rpm
$ systemctl enable maxscale
$ systemctl start maxscale
Setelah daemon dijalankan, secara default, komponen MaxScale akan berjalan pada port berikut:
- 0.0.0.0:4006 - Pendengar pemisahan baca-tulis default.
- 0.0.0.0:4008 - Pendengar round-robin default.
- 127.0.0.1:8989 - API Istirahat MaxScale.
Port di atas dapat diubah. Biasanya server MaxScale mandiri dalam produksi berjalan dengan pemisahan baca/tulis pada port 3306 dan round-robin pada port 3307. Konfigurasi inilah yang akan kita terapkan dalam entri blog ini.
File Penting dan Struktur Direktori
Setelah paket diinstal, Anda akan mendapatkan utilitas/program berikut:
- skala maksimal - MaxScale itu sendiri.
- maxctrl - Klien administratif baris perintah untuk MaxScale yang menggunakan API REST MaxScale untuk komunikasi.
- maxadmin - Klien administratif dan monitor MaxScale yang tidak digunakan lagi. Gunakan maxctrl sebagai gantinya.
- maxkeys - Utilitas ini menulis ke dalam file .secrets, di direktori yang ditentukan, kunci enkripsi AES dan vektor init yang digunakan oleh utilitas maxpasswd, saat mengenkripsi kata sandi yang digunakan dalam file konfigurasi MariaDB MaxScale.
- maxpasswd - Utilitas ini membuat sandi terenkripsi menggunakan file .secrets yang sebelumnya telah dibuat menggunakan maxkeys.
MaxScale akan memuat semua opsi konfigurasi dari lokasi berikut, dalam urutan tertentu:
- /etc/maxscale.cnf
- /etc/maxscale.cnf.d/*.cnf
- /var/lib/maxscale/maxscale.cnf.d/*.cnf
Untuk memahami lebih lanjut tentang konfigurasi MaxScale, lihat Panduan Konfigurasi MaxScale.
Setelah MaxScale diinisialisasi, file default dan struktur direktori adalah:
- Direktori data MaxScale:/var/lib/maxscale
- File PID MaxScale:/var/run/maxscale/maxscale.pid
- File log MaxScale:/var/log/maxscale/maxscale.log
- Dokumentasi MaxScale:/usr/share/maxscale
MaxCtrl - CLI
Setelah dimulai, kita dapat menggunakan klien baris perintah MaxCtrl untuk mengelola MaxScale dengan menggunakan mendengarkan MaxScale REST API pada port 8989 di localhost. Kredensial default untuk REST API adalah "admin:mariadb". Pengguna yang digunakan oleh REST API sama dengan yang digunakan oleh antarmuka jaringan MaxAdmin. Ini berarti bahwa setiap pengguna yang dibuat untuk antarmuka jaringan MaxAdmin harus bekerja dengan MaxScale REST API dan MaxCtrl.
Kita dapat menggunakan utilitas maxctrl dalam mode interaktif, mirip dengan klien mysql. Cukup ketik "maxctrl" dan Anda akan masuk ke mode interaktif (di mana prompt berubah dari prompt shell ke maxctrl prompt), seperti screenshot berikut:
Atau, kita dapat menjalankan perintah yang sama langsung di prompt shell, misalnya:
Opsi perintah MaxCtrl bergantung pada versi MaxScale yang menyertainya. Pada saat penulisan ini, versi MaxScale adalah 2.4 dan Anda harus melihat dokumentasi ini untuk daftar lengkap perintah. MaxCtrl menggunakan antarmuka MaxScale REST API, yang menjelaskan secara rinci di sini.
Menambahkan Server MariaDB ke MaxScale
Saat pertama kali kita memulai MaxScale, itu akan menghasilkan file konfigurasi di /etc/maxscale.cnf dengan beberapa parameter dan contoh default. Kami tidak akan menggunakan konfigurasi ini dan kami akan membuat sendiri sebagai gantinya. Buat cadangan file ini karena kami ingin mengosongkannya nanti:
$ mv /etc/maxscale.cnf /etc/maxscale.cnf.bak
$ cat /dev/null > /etc/maxscale.cnf # empty the file
Mulai ulang MaxScale untuk memulai semuanya dengan segar:
$ systemctl restart maxscale
Istilah "server" di MaxScale pada dasarnya berarti server MariaDB backend, seperti dalam kasus ini, ketiga node dari Cluster MariaDB kami. Untuk menambahkan semua 3 server MariaDB Cluster ke dalam runtime MaxScale, gunakan perintah berikut:
$ maxctrl create server mariadbgalera1 192.168.0.221 3306
$ maxctrl create server mariadbgalera2 192.168.0.222 3306
$ maxctrl create server mariadbgalera3 192.168.0.222 3306
Untuk memverifikasi server yang ditambahkan, gunakan perintah daftar:
$ maxctrl list servers
Dan Anda akan melihat output berikut:
Menambahkan Pemantauan ke MaxScale
Hal berikutnya adalah mengkonfigurasi layanan pemantauan untuk penggunaan MaxScale. MaxScale mendukung sejumlah modul pemantauan tergantung pada jenis database, yaitu:
- Monitor MariaDB
- Galera Monitor
- Monitor Clustrix
- Pemantau ColumnStore
- Aurora Monitor
Dalam pengaturan ini, kita akan menggunakan modul Monitor Galera yang disebut "galeramon". Pertama, kita perlu membuat database user yang akan digunakan oleh MaxScale di salah satu server di MariaDB Cluster. Dalam contoh ini kami memilih mariadbgalera1, 192.168.0.221 untuk menjalankan pernyataan berikut:
MariaDB> CREATE USER [email protected]'192.168.0.220' IDENTIFIED BY 'MaXSc4LeP4ss';
MariaDB> GRANT SELECT ON mysql.* TO 'maxscale_monitor'@'192.168.0.220';
MariaDB> GRANT SHOW DATABASES ON *.* TO 'maxscale_monitor'@'192.168.0.220';
Di mana 192.168.0.220 adalah alamat IP server MaxScale kami.
Tidak aman menyimpan kata sandi pengguna maxscale_monitor dalam teks biasa. Sangat disarankan untuk menyimpan kata sandi dalam format terenkripsi. Untuk mencapai ini, kita perlu membuat kunci rahasia khusus untuk instance MaxScale ini. Gunakan utilitas "maxkeys" untuk menghasilkan kunci rahasia yang akan digunakan oleh MaxScale untuk tujuan enkripsi dan dekripsi:
$ maxkeys
Generating .secrets file in /var/lib/maxscale.
Sekarang kita dapat menggunakan utilitas maxpasswd untuk menghasilkan nilai terenkripsi dari kata sandi kita:
$ maxpasswd MaXSc4LeP4ss
D91DB5813F7C815B351CCF7D7F1ED6DB
Kami akan selalu menggunakan nilai di atas sebagai gantinya saat menyimpan kredensial pengguna pemantauan kami di dalam MaxScale. Sekarang kami siap untuk menambahkan layanan pemantauan Galera ke MaxScale menggunakan maxctrl:
maxctrl> create monitor galera_monitor galeramon servers=mariadbgalera1,mariadbgalera2,mariadbgalera3 user=maxscale_monitor password=D91DB5813F7C815B351CCF7D7F1ED6DB
Verifikasi dengan perintah berikut:
Menambahkan Layanan ke MaxScale
Layanan pada dasarnya adalah cara MaxScale merutekan kueri ke server backend. MaxScale 2.4 mendukung beberapa layanan (atau router), yaitu:
- Avrorouter
- Binlogrouter
- Kucing
- CLI
- HintRouter
- Bacaconnroute
- Pembagian baca-tulis
- SchemaRouter
- SmartRouter
Untuk Cluster MariaDB kami, kami hanya membutuhkan dua layanan perutean - Baca-tulis split dan load balancing round-robin. Untuk pemisahan baca-tulis, kueri tulis hanya akan diteruskan ke satu server MariaDB hingga server tidak dapat dijangkau, di mana MaxScale kemudian akan meneruskan kueri tulis ke node berikutnya yang tersedia. Untuk penyeimbangan round-robin, kueri akan diteruskan ke semua node backend secara round-robin.
Buat layanan perutean untuk round-robin (atau multi-master):
maxctrl> create service Round-Robin-Service readconnroute user=maxscale_monitor password=D91DB5813F7C815B351CCF7D7F1ED6DB --servers mariadbgalera1 mariadbgalera2 mariadbgalera3
Buat layanan perutean lain untuk pemisahan baca-tulis (atau master tunggal):
maxctrl> create service Read-Write-Service readwritesplit user=maxscale_monitor password=D91DB5813F7C815B351CCF7D7F1ED6DB --servers mariadbgalera1 mariadbgalera2 mariadbgalera3
Verifikasi dengan:
Semua komponen yang berhasil dibuat oleh MaxCtrl akan menghasilkan file konfigurasinya sendiri di bawah / var/lib/maxscale/maxscale.cnf.d. Pada titik ini, direktori terlihat seperti ini:
$ ls -l /var/lib/maxscale/maxscale.cnf.d
total 24
-rw-r--r--. 1 maxscale maxscale 532 Jul 5 13:18 galera_monitor.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera1.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera2.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:56 mariadbgalera3.cnf
-rw-r--r--. 1 maxscale maxscale 1128 Jul 5 16:01 Read-Write-Service.cnf
-rw-r--r--. 1 maxscale maxscale 477 Jul 5 16:00 Round-Robin-Service.cnf
Menambahkan Pendengar ke MaxScale
Listeners mewakili port yang akan didengarkan oleh layanan untuk koneksi masuk. Itu bisa berupa port atau file soket UNIX dan tipe komponennya harus "pendengar". Umumnya, pendengar terikat pada layanan. Dalam pengaturan kami, kami akan membuat dua pendengar - Read-Write Listener pada port 3306 dan Round-Robin Listener pada port 3307:
maxctrl> create listener Read-Write-Service Read-Write-Listener 3306 --interface=0.0.0.0 --authenticator=MariaDBAuth
maxctrl> create listener Round-Robin-Service Round-Robin-Listener 3307 --interface=0.0.0.0 --authenticator=MariaDBAuth
Verifikasi dengan perintah berikut:
Pada titik ini, MaxScale kami sekarang siap untuk memuat keseimbangan kueri ke Klaster MariaDB kami. Dari aplikasi, kirim kueri ke host MaxScale pada port 3306, di mana kueri tulis akan selalu mengenai node database yang sama sementara kueri baca akan dikirim ke dua node lainnya. Ini juga dikenal sebagai pengaturan penulis tunggal. Jika Anda ingin menggunakan pengaturan multi-penulis, di mana penulisan akan diteruskan ke semua node MariaDB backend berdasarkan algoritme penyeimbangan round-robin. Anda dapat menyempurnakan keseimbangan lebih lanjut dengan menggunakan prioritas dan bobot.
Sekali lagi, ketika mengubah opsi konfigurasi melalui maxctrl, semua komponen yang berhasil dibuat akan memiliki file konfigurasi sendiri di dalam /var/lib/maxscale/maxscale.cnf.d, seperti yang ditunjukkan pada output berikut:
$ ls -l /var/lib/maxscale/maxscale.cnf.d
-rw-r--r--. 1 maxscale maxscale 532 Jul 5 13:18 galera_monitor.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera1.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera2.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:56 mariadbgalera3.cnf
-rw-r--r--. 1 maxscale maxscale 259 Jul 5 16:06 Read-Write-Listener.cnf
-rw-r--r--. 1 maxscale maxscale 1128 Jul 5 16:06 Read-Write-Service.cnf
-rw-r--r--. 1 maxscale maxscale 261 Jul 5 16:06 Round-Robin-Listener.cnf
-rw-r--r--. 1 maxscale maxscale 477 Jul 5 16:06 Round-Robin-Service.cnf
Opsi konfigurasi di atas dapat langsung dimodifikasi agar lebih sesuai dengan kebutuhan Anda, tetapi layanan MaxScale harus dimulai ulang untuk memuat perubahan baru. Jika Anda ingin memulai dari awal lagi, Anda dapat menghapus semua yang ada di direktori ini dan memulai ulang MaxScale.
Di episode berikutnya, kita akan melihat perintah manajemen dan pemantauan MaxCtrl untuk Cluster MariaDB kita.