Menyebarkan kluster basis data bukanlah ilmu roket - ada banyak cara untuk melakukannya. Tapi bagaimana Anda tahu apa yang baru saja Anda terapkan sudah siap produksi? Penerapan manual juga bisa membosankan dan berulang. Tergantung pada jumlah node dalam cluster, langkah-langkah penyebaran mungkin memakan waktu dan rawan kesalahan. Alat manajemen konfigurasi seperti Wayang, Koki, dan Ansible populer dalam menerapkan infrastruktur, tetapi untuk klaster basis data stateful, Anda perlu melakukan skrip signifikan untuk menangani penerapan seluruh tumpukan HA basis data. Selain itu, template/modul/buku masak/peran yang dipilih harus diuji dengan cermat sebelum Anda dapat mempercayainya sebagai bagian dari otomatisasi infrastruktur Anda. Perubahan versi mengharuskan skrip diperbarui dan diuji lagi.
Kabar baiknya adalah ClusterControl mengotomatiskan penerapan seluruh tumpukan - dan juga gratis! Kami telah menerapkan ribuan kluster produksi, dan mengambil sejumlah tindakan pencegahan untuk memastikan mereka siap produksi Topologi yang berbeda didukung, dari replikasi master-slave hingga kluster Galera, NDB, dan InnoDB, dengan proxy database yang berbeda di atasnya.
Tumpukan ketersediaan tinggi, disebarkan melalui ClusterControl, terdiri dari tiga lapisan:
- Lapisan basis data (mis., Galera Cluster)
- Lapisan proxy terbalik (mis., HAProxy atau ProxySQL)
- Lapisan tetap, yang, dengan penggunaan IP Virtual, memastikan ketersediaan tinggi dari lapisan proxy
Di blog ini, kami akan menunjukkan kepada Anda cara menerapkan Galera Cluster tingkat produksi lengkap dengan penyeimbang beban untuk penyiapan ketersediaan tinggi. Setup lengkap terdiri dari 6 host:
- 1 host - ClusterControl (penerapan, pemantauan, server manajemen)
- 3 host - MySQL Galera Cluster
- 2 host - Proksi terbalik bertindak sebagai penyeimbang beban di depan cluster.
Diagram berikut mengilustrasikan hasil akhir kami setelah penerapan selesai:
Prasyarat
ClusterControl harus berada pada node independen yang bukan bagian dari cluster. Unduh ClusterControl, dan halaman akan menghasilkan lisensi unik untuk Anda dan menunjukkan langkah-langkah untuk menginstal ClusterControl:
$ wget -O install-cc https://severalnines.com/scripts/install-cc
$ chmod +x install-cc
$ ./install-cc # as root or sudo user
Ikuti instruksi di mana Anda akan dipandu dengan pengaturan server MySQL, kata sandi root MySQL pada node ClusterControl, kata sandi cmon untuk penggunaan ClusterControl dan sebagainya. Anda akan mendapatkan baris berikut setelah instalasi selesai:
Determining network interfaces. This may take a couple of minutes. Do NOT press any key.
Public/external IP => http://{public_IP}/clustercontrol
Installation successful. If you want to uninstall ClusterControl then run install-cc --uninstall.
Kemudian, di server ClusterControl, buat kunci SSH yang akan kita gunakan untuk mengatur SSH tanpa kata sandi nanti. Anda dapat menggunakan pengguna mana pun dalam sistem tetapi harus memiliki kemampuan untuk melakukan operasi pengguna super (sudoer). Dalam contoh ini, kami memilih pengguna root:
$ whoami
root
$ ssh-keygen -t rsa
Siapkan SSH tanpa kata sandi ke semua node yang ingin Anda pantau/kelola melalui ClusterControl. Dalam hal ini, kami akan mengaturnya di semua node dalam tumpukan (termasuk node ClusterControl itu sendiri). Pada node ClusterControl, jalankan perintah berikut dan tentukan kata sandi root saat diminta:
$ ssh-copy-id [email protected] # clustercontrol
$ ssh-copy-id [email protected] # galera1
$ ssh-copy-id [email protected] # galera2
$ ssh-copy-id [email protected] # galera3
$ ssh-copy-id [email protected] # proxy1
$ ssh-copy-id [email protected] # proxy2
Anda kemudian dapat memverifikasi apakah itu berfungsi dengan menjalankan perintah berikut pada node ClusterControl:
$ ssh [email protected] "ls /root"
Pastikan Anda dapat melihat hasil dari perintah di atas tanpa perlu memasukkan kata sandi.
Menerapkan Cluster
ClusterControl mendukung semua vendor untuk Galera Cluster (Codership, Percona dan MariaDB). Ada beberapa perbedaan kecil yang dapat mempengaruhi keputusan Anda untuk memilih vendor. Jika Anda ingin mempelajari tentang perbedaan di antara keduanya, lihat posting blog kami sebelumnya - Perbandingan Cluster Galera - Codership vs Percona vs MariaDB.
Untuk penerapan produksi, Galera Cluster tiga node adalah jumlah minimum yang harus Anda miliki. Anda selalu dapat menskalakannya nanti setelah cluster di-deploy, secara manual atau melalui ClusterControl. Kami akan membuka UI ClusterControl kami di https://192.168.55.160/clustercontrol dan membuat pengguna admin pertama. Lalu, buka menu atas dan klik Deploy -> MySQL Galera dan Anda akan disajikan dengan dialog berikut:
Ada dua langkah, yang pertama adalah "Pengaturan Umum &SSH". Di sini kita perlu mengonfigurasi pengguna SSH yang harus digunakan ClusterControl untuk terhubung ke node database, bersama dengan jalur ke kunci SSH (seperti yang dihasilkan di bagian Prasyarat) serta port SSH dari node database. ClusterControl menganggap semua node database dikonfigurasi dengan pengguna, kunci, dan port SSH yang sama. Selanjutnya beri nama cluster, dalam hal ini kita akan menggunakan "MySQL Galera Cluster 5.7". Nilai ini dapat diubah di kemudian hari. Kemudian pilih opsi untuk menginstruksikan ClusterControl untuk menginstal perangkat lunak yang diperlukan, menonaktifkan firewall dan juga menonaktifkan modul peningkatan keamanan pada distribusi Linux tertentu. Semua ini direkomendasikan untuk diaktifkan guna memaksimalkan potensi keberhasilan penerapan.
Klik Continue dan Anda akan dihadapkan pada dialog berikut:
Pada langkah selanjutnya, kita perlu mengkonfigurasi server database - vendor, versi, datadir, port, dll - yang cukup jelas. "Template Konfigurasi" adalah nama file templat di bawah /usr/share/cmon/templates dari node ClusterControl. "Repositori" adalah cara ClusterControl mengonfigurasi repositori pada node database. Secara default, ia akan menggunakan repositori vendor dan menginstal versi terbaru yang disediakan oleh repositori. Namun, dalam beberapa kasus, pengguna mungkin memiliki repositori yang sudah ada sebelumnya yang dicerminkan dari repositori asli karena pembatasan kebijakan keamanan. Namun demikian, ClusterControl mendukung sebagian besar dari mereka, seperti yang dijelaskan dalam panduan pengguna, di bawah Repositori.
Terakhir, tambahkan alamat IP atau nama host (harus FQDN yang valid) dari node database. Anda akan melihat ikon centang hijau di sebelah kiri node, yang menunjukkan bahwa ClusterControl dapat terhubung ke node melalui SSH tanpa kata sandi. Anda sekarang baik untuk pergi. Klik Terapkan untuk memulai penerapan. Ini mungkin memakan waktu 15 sampai 20 menit untuk menyelesaikannya. Anda dapat memantau kemajuan penerapan di bawah Aktivitas (menu atas) -> Pekerjaan -> Buat Cluster :
Setelah penerapan selesai, pada titik ini, arsitektur kami dapat diilustrasikan seperti di bawah ini:
Menerapkan Load Balancer
Di Galera Cluster, semua node adalah sama - setiap node memiliki peran dan dataset yang sama. Oleh karena itu, tidak ada failover dalam cluster jika node gagal. Hanya sisi aplikasi yang memerlukan failover, untuk melewati node yang tidak beroperasi saat cluster dipartisi. Oleh karena itu, sangat disarankan untuk menempatkan penyeimbang beban di atas Cluster Galera untuk:
- Menyatukan beberapa titik akhir database menjadi satu titik akhir (host penyeimbang beban atau alamat IP virtual sebagai titik akhir).
- Seimbangkan koneksi database antara server database backend.
- Lakukan health check dan hanya teruskan koneksi database ke node yang sehat.
- Mengalihkan/menulis ulang/memblokir kueri yang menyinggung (ditulis dengan buruk) sebelum masuk ke server database.
Ada tiga pilihan utama reverse proxy untuk Galera Cluster - HAProxy, MariaDB MaxScale atau ProxySQL - semuanya dapat diinstal dan dikonfigurasi secara otomatis oleh ClusterControl. Dalam penerapan ini, kami memilih ProxySQL karena memeriksa semua hal di atas plus memahami protokol MySQL dari server backend.
Dalam arsitektur ini, kami ingin menggunakan dua server ProxySQL untuk menghilangkan single-point-of-failure (SPOF) ke tingkat database, yang akan diikat bersama menggunakan alamat IP virtual mengambang. Kami akan menjelaskan ini di bagian selanjutnya. Satu node akan bertindak sebagai proxy aktif dan node lainnya sebagai hot-standby. Node mana pun yang menyimpan alamat IP virtual pada waktu tertentu adalah node aktif.
Untuk menyebarkan server ProxySQL pertama, cukup buka menu tindakan cluster (sisi kanan bilah ringkasan) dan klik Add Load Balancer -> ProxySQL -> Deploy ProxySQL dan Anda akan melihat yang berikut:
Sekali lagi, sebagian besar bidang cukup jelas. Di bagian "Pengguna Basis Data", ProxySQL bertindak sebagai gerbang tempat aplikasi Anda terhubung ke basis data. Aplikasi mengautentikasi terhadap ProxySQL, oleh karena itu Anda harus menambahkan semua pengguna dari semua node MySQL backend, bersama dengan kata sandi mereka, ke dalam ProxySQL. Dari ClusterControl, Anda dapat membuat pengguna baru untuk digunakan oleh aplikasi - Anda dapat memutuskan nama, kata sandi, akses ke database mana yang diberikan dan hak istimewa MySQL apa yang akan dimiliki pengguna. Pengguna tersebut akan dibuat di kedua sisi MySQL dan ProxySQL. Opsi kedua, lebih cocok untuk infrastruktur yang ada, adalah menggunakan pengguna database yang ada. Anda harus memasukkan nama pengguna dan kata sandi, dan pengguna tersebut hanya akan dibuat di ProxySQL.
Bagian terakhir, "Transaksi Implisit", ClusterControl akan mengkonfigurasi ProxySQL untuk mengirim semua lalu lintas ke master jika kita memulai transaksi dengan SET autocommit=0. Jika tidak, jika Anda menggunakan BEGIN atau START TRANSACTION untuk membuat transaksi, ClusterControl akan mengonfigurasi pemisahan baca/tulis dalam aturan kueri. Ini untuk memastikan ProxySQL akan menangani transaksi dengan benar. Jika Anda tidak tahu bagaimana aplikasi Anda melakukan ini, Anda dapat memilih yang terakhir.
Ulangi konfigurasi yang sama untuk node ProxySQL kedua, kecuali nilai "Server Address" yaitu 192.168.55.182. Setelah selesai, kedua node akan terdaftar di bawah tab "Node" -> ProxySQL tempat Anda dapat memantau dan mengelolanya langsung dari UI:
Pada titik ini, arsitektur kita sekarang terlihat seperti ini:
Jika Anda ingin mempelajari lebih lanjut tentang ProxySQL, lihat tutorial ini - Database Load Balancing untuk MySQL dan MariaDB dengan ProxySQL - Tutorial.
Menyebarkan Alamat IP Virtual
Bagian terakhir adalah alamat IP virtual. Tanpa itu, penyeimbang beban kami (proksi terbalik) akan menjadi tautan yang lemah karena mereka akan menjadi satu titik kegagalan - kecuali jika aplikasi memiliki kemampuan untuk secara otomatis mengalihkan koneksi database yang gagal ke penyeimbang beban lain. Namun demikian, ini adalah praktik yang baik untuk menyatukan keduanya menggunakan alamat IP virtual dan menyederhanakan titik akhir koneksi ke lapisan database.
Dari UI ClusterControl -> Tambahkan Penyeimbang Beban -> Keepalive -> Deploy Keepalive dan pilih dua host ProxySQL yang telah kami terapkan:
Juga, tentukan alamat IP virtual dan antarmuka jaringan untuk mengikat alamat IP. Antarmuka jaringan harus ada di kedua node ProxySQL. Setelah diterapkan, Anda akan melihat tanda centang hijau berikut di bilah ringkasan kluster:
Pada titik ini, arsitektur kami dapat diilustrasikan seperti di bawah ini:
Cluster database kami sekarang siap untuk penggunaan produksi. Anda dapat mengimpor database yang ada ke dalamnya atau membuat database baru yang segar. Anda dapat menggunakan fitur Skema dan Manajemen Pengguna jika lisensi uji coba belum kedaluwarsa.
Untuk memahami bagaimana ClusterControl mengonfigurasi Keepalive, lihat posting blog ini, Bagaimana ClusterControl Mengonfigurasi IP Virtual dan Apa yang Diharapkan Selama Failover.
Menghubungkan ke Cluster Basis Data
Dari sudut pandang aplikasi dan klien, mereka perlu terhubung ke 192.168.55.180 pada port 6033 yang merupakan alamat IP virtual yang mengambang di atas penyeimbang beban. Misalnya, konfigurasi database Wordpress akan menjadi seperti ini:
/** The name of the database for WordPress */
define( 'DB_NAME', 'wp_myblog' );
/** MySQL database username */
define( 'DB_USER', 'wp_myblog' );
/** MySQL database password */
define( 'DB_PASSWORD', 'mysecr3t' );
/** MySQL hostname - virtual IP address with ProxySQL load-balanced port*/
define( 'DB_HOST', '192.168.55.180:6033' );
Jika Anda ingin mengakses cluster database secara langsung, melewati load balancer, Anda cukup menyambungkan ke port 3306 dari host database. Ini biasanya diperlukan oleh staf DBA untuk administrasi, manajemen, dan pemecahan masalah. Dengan ClusterControl, sebagian besar operasi ini dapat dilakukan langsung dari antarmuka pengguna.
Pemikiran Terakhir
Seperti yang ditunjukkan di atas, menyebarkan cluster database bukan lagi tugas yang sulit. Setelah digunakan, ada rangkaian lengkap fitur pemantauan gratis serta fitur komersial untuk manajemen cadangan, failover/pemulihan, dan lainnya. Penyebaran cepat dari berbagai jenis topologi cluster/replikasi dapat berguna saat mengevaluasi solusi database ketersediaan tinggi, dan bagaimana mereka cocok dengan lingkungan khusus Anda.