Galera Cluster adalah salah satu solusi untuk sistem database yang terdistribusi. Dengan menggunakan replikasi multi-master, Galera Cluster memberikan high availability serta skalabilitas yang tinggi. Dalam artikel ini, kami akan berbagi cara install Galera Cluster pada CentOS 7.
Seperti yang telah kita ketahui bersama, database clustering memungkinkan implementasi failover dan high availability. Apabila satu node mengalami kegagalan, maka secara otomatis sistem akan dialihkan ke node lain yang masih memiliki resource yang cukup.
Dengan demikian, waktu downtime dapat diatasi secara signifikan dan ketersediaan layanan dapat meningkat.
Pada artikel ini, Kami akan membahas tentang apa itu Galera Cluster, fungsi hingga cara install Galera Cluster pada server CentOS 7. Berikut informasi selengkapnya.
Apa itu Galera Cluster?
Galera Cluster adalah sebuah teknologi yang digunakan untuk replikasi serta penggabungan data secara real-time dalam beberapa server yang terdistribusi. Galera Cluster dirancang khusus untuk basis data MySQL dan MariaDB, dan memungkinkan pengguna untuk membangun cluster basis data yang terdiri dari beberapa node yang saling terhubung menjadi 1 sistem yaitu Galera Cluster.
Fungsi utama dari Galera Cluster adalah untuk meningkatkan ketersediaan, keandalan, dan skalabilitas sistem basis data. Dalam cluster Galera, setiap node memiliki salinan lengkap dari basis data yang sama.
Ketika ada pembaruan data (misalnya, penambahan atau pengubahan data), maka perubahan tersebut nantinya akan disebarkan ke semua node dalam satu klaster secara konsisten mirroring/sama di setiap node. Dengan demikian, data tetap konsisten di seluruh klaster.
Fungsi Galera Cluster
Berikut ini adalah beberapa fungsi dan keunggulan dari Galera Cluster.
1. Replikasi Multi-Master
Setiap node server dalam cluster Galera dapat merubah dan membaca di dalam database(read & write). Ini berarti setiap node dapat bertindak sebagai master database yang dapat melakukan replikasi dari server lain atau melakukan replikasi ke server lainnya jika memiliki data baru.
2. Sinkronisasi Real-time
Galera Cluster menggunakan replikasi sinkronisasi langsung, yang berarti setiap operasi penulisan dikirimkan ke semua node dalam klaster sebelum dianggap berhasil. Hal ini memastikan konsistensi data yang tinggi di seluruh klaster, karena setiap node memiliki data yang sama pada saat yang sama.
3. Pemulihan Otomatis
Jika terjadi kegagalan pada salah satu node dalam cluster, Galera Cluster secara otomatis mendeteksi kegagalan tersebut dan memulihkan node yang rusak (melakukan recovery). Data yang hilang di node yang rusak akan dipulihkan menggunakan data yang ada dari server klaster lainnya yang normal.
4. Skalabilitas Untuk Maintenance
Galera Cluster memungkinkan penambahan atau pengurangan node dalam klaster dengan mudah. Ketika kita menambahkan node/server baru di Galera, kita hanya perlu melakukan editing pada file galera dan menambahkan ip server baru, kapasitas klaster meningkat, sehingga memungkinkan aplikasi untuk menangani beban yang lebih besar, dan dapat di upgrade kapan saja.
5. Penyebaran Geografis
Cluster Galera dapat digunakan dalam konfigurasi yang terdistribusi secara geografis. Ini berarti server server database dapat berada di lokasi yang berbeda secara geografis, seperti berada di berbagai negara. Selain meningkatkan kecepatan respon database, juga dapat meningkatkan ketersediaan backup pada berbagai lokasi.
Dengan menggunakan Galera Cluster, kita dapat membangun dan mengelola sistem basis data yang terdistribusi dengan tingkat ketersediaan yang tinggi dan isi database yang Konsisten.
Pada panduan kali ini kita akan melakukan instalasi dan konfigurasi Galera Cluster pada CentOS 7 dengan menggunakan database MariaDB 10.4.
Step 1. Persiapan Sistem
Pada demo ini, kami menggunakan VPS Murah dari Rumahweb dengan spesifikasi berikut.
- OS Centos 7
- MariaDB
- Minimal Ram 2GB tiap Node
- Server node 1 : 203.175.8.223
- Server node 2 : 203.175.8.224
- Server node 3 : 203.175.8.226
Step 2. Install Mariadb di Tiap server Node
1. Menambahkan repository MariaDB.
nano /etc/yum.repos.d/mariadb.repo
[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.4/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
2. Setelah menambah repository MariaDB, terapkan repository untuk installasi.
yum makecache --disablerepo='*' --enablerepo='mariadb'
3. Installasi MariaDB dan konfigurasi user root.
# yum install MariaDB-server MariaDB-client # systemctl start mariadb # mysql -uroot # set password = password("diisipassword"); # quit;
4. installasi rsync untuk sinkronisasi antar klaster database.
yum install rsync policycoreutils-python
Step 3. Konfigurasi File Galera Cluster pada setiap node
Berikut adalah langkah-langkah konfigurasi file Galera Cluster pada setiap node server.
- Konfigurasi pada node 1.
Buat file konfigurasi Galera pada folder /etc/my.cnf.d/
vi /etc/my.cnf.d/galera.cnf
[mysqld] binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 bind-address=0.0.0.0
- Galera Provider Configuration
wsrep_on=ON wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
- Berikan nama cluster dan isikan seluruh ip cluster
wsrep_cluster_name="galera_rw" wsrep_cluster_address="gcomm://203.175.8.223,203.175.8.224,203.175.8.226"
- Galera Synchronization Configuration
wsrep_sst_method=rsync
- Ubah node address dengan ip server, dan berikan nama
wsrep_node_address="203.175.8.223" wsrep_node_name="node1"
- Konfigurasi pada node 2.
Buat file konfigurasi Galera pada folder /etc/my.cnf.d/
vi /etc/my.cnf.d/galera.cnf
[mysqld] binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 bind-address=0.0.0.0
- Galera Provider Configuration
wsrep_on=ON wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
- Berikan nama cluster dan isikan seluruh ip cluster
wsrep_cluster_name="galera_rw" wsrep_cluster_address="gcomm://203.175.8.223,203.175.8.224,203.175.8.226"
- Galera Synchronization Configuration
wsrep_sst_method=rsync
- Ubah node address dengan ip server, dan berikan nama
wsrep_node_address="203.175.8.224" wsrep_node_name="node2"
- Konfigurasi pada node 3.
Buat file konfigurasi Galera pada folder /etc/my.cnf.d/
vi /etc/my.cnf.d/galera.cnf
[mysqld] binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 bind-address=0.0.0.0
- Galera Provider Configuration
wsrep_on=ON wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
- Berikan nama cluster dan isikan seluruh ip cluster
wsrep_cluster_name="galera_rw" wsrep_cluster_address="gcomm://203.175.8.223,203.175.8.224,203.175.8.226"
- Galera Synchronization Configuration
wsrep_sst_method=rsync
- Ubah node address dengan ip server, dan berikan nama
wsrep_node_address="203.175.8.226" wsrep_node_name="node3"
Image contoh:
Step 4. Konfigurasi Firewall pada tiap Server node
Secara default, galera menggunakan 4 Port berikut sebagai protokol transfer data dan kegunaan database.
- 3306 : Untuk koneksi klien MariaDB dan State Snapshot Transfer yang menggunakan metode mysqldump.
- 4567 : Untuk lalu lintas replikasi Galera Cluster. Replikasi multicast menggunakan transport pada port UDP dan TCP.
- 4568 : Untuk Transfer Status Tambahan , atau IST, proses di mana keadaan yang hilang diterima oleh node lain di cluster.
- 4444 : Untuk semua State Snapshot Transfer lainnya, atau SST, mekanisme dimana link joiner mendapatkan status dan data dari link distribusi.
Centos menggunakan Firewall CMD sebagai default Firewall, pastikan kita melakukan allow 4 port diatas pada “masing masing server node dengan konfigurasi yang sama”.
firewall-cmd --permanent --zone=public --add-port=3306/tcp firewall-cmd --permanent --zone=public --add-port=4567/tcp firewall-cmd --permanent --zone=public --add-port=4568/tcp firewall-cmd --permanent --zone=public --add-port=4444/tcp firewall-cmd --permanent --zone=public --add-port=4567/udp
Setelah menambahkan port database diatas, langkah selanjutnya adalah menambahkan masing masing ip node Galera agar dapat saling mengakses.
firewall-cmd --permanent --zone=public --add-source=203.175.8.223/32 firewall-cmd --permanent --zone=public --add-source=203.175.8.224/32 firewall-cmd --permanent --zone=public --add-source=203.175.8.226/32
Muat ulang firewall untuk menerapkan perubahan:
systemctl reload firewalld
Step 5. Konfigurasi SeLinux
SELinux adalah modul kernel Linux yang meningkatkan keamanan sistem operasi dengan dukungannya untuk kontrol akses dan kebijakan kontrol akses wajib. selinux diaktifkan secara default pada CentOS 7 yang menyebabkan membatasi daemon MariaDB untuk melakukan banyak aktivitas.
Agar Selinux tidak membatasi untuk keperluan klaster, kita perlu membuat beberapa peraturan di selinux sebagai berikut.
- Pertama, izinkan akses ke port MariaDB dengan menjalankan perintah berikut di ketiga server:
semanage port -a -t mysqld_port_t -p tcp 4567 semanage port -a -t mysqld_port_t -p udp 4567 semanage port -a -t mysqld_port_t -p tcp 4568 semanage port -a -t mysqld_port_t -p tcp 4444
- Jalankan perintah ke mode permesif untuk sementara.
semanage permissive -a mysqld_t
- Matikan sementara server database di semua node sehingga agar kita dapat mem-bootstrap cluster database dengan kebijakan SELinux bersama, jalankan perintah berikut di ketiga server node:
systemctl stop mariadb
- Pada server node 1, jalankan perintah berikut agar dapat mem-bootstrap kebijakan selinux yang telah kita buat sebelumnya(pada titik ini semua server db di 3 node nonaktif).
# galera_new_cluster # mysql -u root -p -e 'CREATE DATABASE selinux; # CREATE TABLE selinux.selinux_policy (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id)); # INSERT INTO selinux.selinux_policy VALUES ();'
- Setelah kebijakan di eksekusi, kita aktifkan kembali server MariaDB “hanya” pada server node 2 dan 3.
systemctl start mariadb
- Jalankan perintah berikut pada ketiga server node database.
mysql -u root -p -e 'INSERT INTO selinux.selinux_policy VALUES ();'
Aktifkan kebijakan selinux dengan menjalankan command berikut.
grep mysql /var/log/audit/audit.log | audit2allow -M Galera
Setelah command diatas dieksekusi, maka akan menghasilkan sebuah output, yaitu semodule -i Galera.pp.
- Install modul sesuai output yang dihasilkan.
semodule -i Galera.pp
Setelah aktif, aktifkan kembali mode permesif Mariadb Selinux
semanage permissive -d mysqld_t
Step 6. Memulai Cluster Galera pada masing masing server node.
Pada tahapan ini, kita akan memulai Cluster Galera pada tiap node, Pastikan mengikuti langkah berikut dengan benar untuk menghindari adanya error dan miskonfigurasi.
- Nonaktifkan mariadb pada ketiga server node.
Pastikan harus menonaktifkan dari server ke 3 dahulu secara urut ke server 1.
node 3 : systemctl stop mariadb node 2 : systemctl stop mariadb node 1 : systemctl stop mariadb
Pastikan untuk menonaktifkan secara berurutan dari server node terakhir, hal ini dilakukan agar server utama node (node1) dapat mem-bootstrap semua server dari server ke 3.
- Jalankan skrip galera pada node 1
# galera_new_cluster # mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
kita akan melihat terdapat 1 node di cluster seperti berikut :
- Aktifkan kembali MariaDB pada node ke 2
systemctl start mariadb
Setelah kita aktifkan node 2, maka dapat dicek bahwa node sudah bertambah, pengecekan menggunakan command berikut pada node 1/2.
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
Pastikan angka sudah bertambah menjadi 2, berarti server cluster kita berhasil ditambahkan.
4. Aktifkan kembali MariaDB pada node ke 3
systemctl start mariadb
Setelah kita aktifkan node 3, maka dapat dicek bahwa node sudah bertambah, pengecekan menggunakan command berikut pada node 1/2/3
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
Pastikan angka sudah bertambah menjadi 3, berarti server cluster kita berhasil ditambahkan dengan normal untuk ke 3 node.
Pada titik ini, seluruh klaster sudah online dan berhasil berkomunikasi. Selanjutnya, kita dapat memastikan penyiapan berfungsi dengan menguji replikasi di bagian berikutnya.
Pengujian Galera Cluster
Pada Galera Cluster, database yang kita buat/input maka akan otomatis replikasi ke server node lainnya secara realtime.
Apabila kita melakukan modifikasi data pada node 1, maka node 2 dan 3 akan berubah sesuai node 1. Begitupun sebaliknya, apabila kita melakukan update pada node ke 3, maka node 2 dan 1 akan otomatis ter replikasi sesuai dengan node ke 3.
- Terlebih dahulu kita uji dengan membuatkan database di server DB1 kemudian kita amati pada server DB2 dan server DB3 apakah database telah berhasil replikasi.
- Kemudian kita uji pada server DB2 dengan membuatkan tabel dan kita amati hasilnya pada server DB1 dan server DB3 apakah tabel tersebut sudah ada.
- Kemudian kita uji pada server DB3 dengan melakukan input/insert data pada tabel dan kita amati hasilnya pada server DB1 dan server DB2 apakah data yang telah kita input/insert sudah masuk ke tabel.
Pada titik ini, kita telah berhasil mengkonfigurasi Galera Cluster dengan 3 server node. Jika Anda berencana menggunakan cluster Galera untuk kebutuhan data di production, sebaiknya dapat menggunakan setidaknya minimal 5 node untuk hasil yang lebih baik.
Demikian artikel kami tentang cara install hingga konfigurasi Galera Cluster di CentOS 7, semoga bermanfaat.