Arsitektur High Availability & Database Clustering Menggunakan MariaDB Galera
1. Konteks Industri & Analisis Akar Masalah
Dalam lanskap arsitektur web modern, skalabilitas dan ketersediaan tinggi (High Availability / HA) bukan lagi fitur opsional, melainkan fondasi bisnis yang mutlak. Ketika sebuah platform aplikasi enterprise menghadapi lonjakan jutaan concurrent users—baik itu platform e-commerce saat kampanye flash sale, layanan finansial real-time, atau SaaS enterprise—infrastruktur database sering kali menjadi bottleneck utama yang memicu kegagalan sistem secara menyeluruh (Single Point of Failure atau SPOF).
Secara tradisional, arsitektur database relasional seperti MySQL atau MariaDB menggunakan model Primary-Replica (Master-Slave asynchronous atau semi-synchronous). Meskipun model ini efektif untuk memisahkan beban baca (read scaling), ia memiliki kelemahan struktural yang fatal pada skenario tulis (write scaling). Ketika Primary node mengalami kegagalan perangkat keras, jaringan terputus, atau corrupt, sistem memerlukan proses failover manual atau otomatis menggunakan orkestrator eksternal (seperti MHA, Orchestrator, atau Keepalived). Proses ini sering kali memicu split-brain syndrome, downtime layanan selama beberapa menit hingga jam, serta risiko kehilangan data (data loss) akibat replikasi asynchronous yang belum tuntas.
Perbandingan Kondisi: Sebelum vs Sesudah Penerapan MariaDB Galera Cluster
| Parameter | Sebelum (Traditional Primary-Replica) | Sesudah (MariaDB Galera Multi-Master Cluster) |
|---|---|---|
| Topologi Tulis | Single Master (Tulis hanya di satu node) | Multi-Master (Tulis ke node mana saja secara simultan) |
| Failover | Membutuhkan proses manual/otomatis eksternal; rentan downtime | Otomatis tanpa intervensi; node gagal diabaikan transparan |
| Konsistensi Data | Asynchronous / Semi-Sync (Risiko lag replikasi & data loss) | Sifilis sinkronis virtual berbasis WSREP (Certification-based replication) |
| Single Point of Failure | Ya, Primary node adalah titik kegagalan utama | Tidak ada, kluster tetap berjalan dengan minimal $N/2 + 1$ node aktif |
| Recovery Node Baru | Rumus manual (mysqldump, binlog position, cloning) | Otomatis menggunakan State Snapshot Transfer (SST) atau Istio/Incremental (IST) |
Dengan menerapkan MariaDB Galera Cluster, kita mengeliminasi SPOF pada lapisan database, memastikan konsistensi data yang ketat di seluruh node, dan memungkinkan arsitektur aplikasi backend (seperti PHP-FPM, Node.js, atau Go) melakukan operasi tulis dan baca secara terdistribusi tanpa kekhawatiran inkonsistensi replikasi.
2. Konsep Inti & Deep Dive Arsitektur
MariaDB Galera Cluster adalah implementasi synchronous multi-master cluster untuk MariaDB, yang ditenagai oleh Galera Replication Library menggunakan protokol WSREP (Write Set Replication). Berbeda dengan replikasi tradisional yang memindahkan statement atau row events secara asynchronous, Galera mereplikasi write-sets yang berisi baris data yang telah dimodifikasi bersama dengan tanda tangan transaksinya.
Alur Kerja di Balik Layar (Under the Hood)
- Inisiasi Transaksi (Local Execution): Aplikasi mengirimkan query
BEGIN,INSERT/UPDATE/DELETE, hinggaCOMMITke salah satu node di dalam kluster. - Replikasi Write-Set: Sebelum transaksi di-commit secara lokal ke penyimpanan disk (InnoDB storage engine), node tersebut mengenkapsulasi perubahan data ke dalam write-set dan menyiarkannya (broadcast) ke seluruh node lain di dalam kluster melalui protokol grup komunikasi multicast/unicast.
- Certification (Certification-based Replication): Setiap node menerima write-set tersebut dan melakukan proses certification secara paralel. Proses ini memeriksa apakah ada konflik baris data dengan transaksi lain yang sedang berjalan secara konkuren. Jika tidak ada konflik, write-set dianggap valid.
- Commit & Rollback: Jika lolos sertifikasi, transaksi di-commit di semua node. Jika terjadi konflik (misalnya dua transaksi mengubah baris yang sama secara bersamaan), transaksi dengan sertifikasi terlambat akan otomatis dibatalkan (rollback) dan memicu deadlock error yang harus ditangani oleh aplikasi.
+-------------+ +-------------+ +-------------+
| App / | | App / | | App / |
| Load Bal. | | Load Bal. | | Load Bal. |
+------+------+ +------+------+ +------+------+
| | |
v v v
+------+------+ +------+------+ +------+------+
| Node 1 |<=======>| Node 2 |<=======>| Node 3 |
| (Multi-Master) | (Multi-Master) | (Multi-Master)
+-------------+ +-------------+ +-------------+
^ ^ ^
+------------------------+------------------------+
WSREP Replication Protocol
(Total Order Isolation & Certification-based)
[!IMPORTANT] Galera Cluster menerapkan prinsip Total Order Isolation (TOI). Artinya, DDL (Data Definition Language) seperti
ALTER TABLEdieksekusi secara sinkron di seluruh node dengan mengunci tabel secara global. Hindari eksekusi DDL skala besar pada jam puncak traffic.
3. Perbandingan Komparatif / Analisis Pendekatan
Untuk merancang infrastruktur high availability yang optimal, kita harus memahami trade-off antara Galera Cluster dengan alternatif arsitektur database lainnya.
| Fitur / Metrik | MariaDB Galera Cluster | MySQL Group Replication (MGR) | Primary-Replica + Orchestrator | Redis Master-Replica + Sentinel |
|---|---|---|---|---|
| Model Konsistensi | Sinkronis (Virtual Synchrony) | Sinkronis / Semi-Sinkronis (Paxos) | Asynchronous / Semi-Sync | Asynchronous |
| Kebutuhan Node Minimal | Minimal 3 node (Quorum) | Minimal 3 node (Quorum) | 1 Primary + N Replica | 1 Master + N Replica + Sentinel |
| Write Scalability | Dapat menulis ke semua node | Dapat menulis (Single-Primary / Multi-Primary) | Tulis hanya di Primary | Tulis hanya di Master |
| Latency Jaringan | Sensitif terhadap latensi WAN | Sangat sensitif terhadap latensi | Rendah (untuk lokal) | Sangat rendah (In-memory) |
| Kompleksitas Setup | Menengah | Tinggi | Menengah-Tinggi | Rendah-Menengah |
| Penggunaan Ideal | OLTP dengan multi-node write | Enterprise MySQL modern | Legacy app / Read-heavy scaling | Caching, Session store, Queue |
[!TIP] Jangan pernah menjalankan Galera Cluster dengan jumlah node genap (misal 2 atau 4 node) tanpa Arbitrator (GarBD). Jika terjadi putusnya jaringan (network partition), kluster memerlukan kuorum mayoritas ($N/2 + 1$) untuk mencegah split-brain. 3 node adalah standar minimum untuk enterprise production.
4. Prasyarat Sistem & Persiapan Lingkungan
Sebelum melakukan instalasi MariaDB Galera Cluster, pastikan lingkungan infrastruktur memenuhi spesifikasi teknis berikut:
Spesifikasi Minimum Environment (Production)
- OS: Ubuntu 22.04 LTS / Debian 12 / Rocky Linux 9
- Node: 3 Unit Server (Contoh IP:
192.168.1.101,192.168.1.102,192.168.1.103) - RAM: Minimal 4GB per node (disarankan SSD NVMe untuk performa I/O redo log)
- Jaringan: Koneksi internal privat berkecepatan tinggi (< 2ms antar node)
Konfigurasi Firewall & Port Jaringan
Galera memerlukan beberapa port jaringan yang harus dibuka pada sistem firewall (ufw atau firewalld):
3306/tcp: Port standar MariaDB untuk klien SQL.4567/tcp: Port replikasi Galera Cluster (WSREP traffic).4568/tcp: Port untuk State Snapshot Transfer (SST) incremental.4444/tcp: Port untuk State Snapshot Transfer (SST) penuh (rsync/mysqldump/mariabackup).
5. Panduan Implementasi Langkah demi Langkah
Ikuti langkah-langkah berikut untuk membangun kluster MariaDB Galera 3-node di atas sistem operasi Ubuntu 22.04 LTS.
Langkah 1: Instalasi MariaDB Server di Semua Node
Jalankan perintah berikut pada ketiga node (node1, node2, node3):
sudo apt update
sudo apt install -y software-properties-common curl
sudo curl -LsS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash -s -- --mariadb-server-version=10.11
sudo apt update
sudo apt install -y mariadb-server mariadb-client rsync galera-4
Langkah 2: Konfigurasi MariaDB Galera (Server 1 - 192.168.1.101)
Hentikan layanan MariaDB terlebih dahulu, lalu buat file konfigurasi khusus Galera di /etc/mysql/mariadb.conf.d/65-galera.cnf:
sudo systemctl stop mariadb
Buat dan isi file /etc/mysql/mariadb.conf.d/65-galera.cnf dengan konfigurasi berikut:
[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/lib/galera/libgalera_sstr.so
# Galera Cluster Cluster Address
wsrep_cluster_address="gcomm://192.168.1.101,192.168.1.102,192.168.1.103"
# Cluster Name
wsrep_cluster_name="production-galera-cluster"
# Node Specific Configuration (Ubah IP sesuai node masing-masing)
wsrep_node_address="192.168.1.101"
wsrep_node_name="galera-node-01"
# SST Method (Gunakan mariabackup untuk performa enterprise)
wsrep_sst_method=mariabackup
wsrep_sst_auth="sstuser:SSTSecurePassword123!"
Langkah 3: Konfigurasi MariaDB Galera (Server 2 & 3)
Lakukan konfigurasi serupa pada node2 (192.168.1.102) dan node3 (192.168.1.103), namun sesuaikan parameter wsrep_node_address dan wsrep_node_name:
Untuk Node 2 (192.168.1.102):
wsrep_node_address="192.168.1.102"
wsrep_node_name="galera-node-02"
Untuk Node 3 (192.168.1.103):
wsrep_node_address="192.168.1.103"
wsrep_node_name="galera-node-03"
Langkah 4: Bootstrap Kluster Pertama Kali
Bootstrap hanya dilakukan sekali pada Node Pertama (192.168.1.101) untuk menginisialisasi bootstrap cluster baru:
sudo galera_new_cluster
Verifikasi bahwa kluster telah berjalan dan mendeteksi 1 node aktif:
sudo mysql -u root -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
Output yang diharapkan:
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 1 |
+--------------------+-------+
Langkah 5: Bergabung ke Kluster pada Node 2 dan Node 3
Pada node2 dan node3, jalankan layanan MariaDB secara normal (tanpa galera_new_cluster):
sudo systemctl start mariadb
Kembali ke node1 atau periksa di semua node untuk memastikan ukuran kluster telah meningkat menjadi 3:
sudo mysql -u root -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
Output yang diharapkan:
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
6. Bedah Kode & Penjelasan Detail Baris Kunci
Mari kita bedah parameter penting dalam file konfigurasi 65-galera.cnf yang menentukan stabilitas sistem:
binlog_format=ROW: Galera wajib menggunakan format berbasis baris (row-based binary logging). Format statement atau mixed tidak didukung karena replikasi write-set membutuhkan data aktual per baris yang diubah untuk proses sertifikasi.innodb_autoinc_lock_mode=2: Mengatur mode kunci auto-increment menjadi interleaved lock mode. Hal ini sangat krusial untuk performa multi-master agar operasiINSERTkonkuren dari berbagai node tidak saling mengunci tabel secara berurutan (table-level locking), sehingga mencegah penurunan throughput.wsrep_provider=/usr/lib/galera/libgalera_sstr.so: Menunjuk path absolut ke pustaka WSREP Galera yang menangani komunikasi antar node, manajemen keanggotaan kluster, dan algoritma state machine.wsrep_cluster_address="gcomm://...": Daftar benih (seed list) IP node lain dalam kluster. Saat sebuah node dinyalakan, ia akan mencoba menghubungi IP-IP ini untuk menemukan kluster yang aktif.wsrep_sst_method=mariabackup: Metode transfer State Snapshot menggunakanmariabackup. Metode ini jauh lebih aman dan efisien dibandingkanmysqldumpkarena melakukan hot backup tanpa mengunci tabel, serta lebih cepat dibandingrsyncuntuk database berukuran besar.
7. Skenario Produksi & Studi Kasus Dunia Nyata
Dalam arsitektur web modern berstandar enterprise, MariaDB Galera Cluster biasanya dipadukan dengan Load Balancer TCP tingkat lanjut seperti HAProxy atau ProxySQL pada lapisan aplikasi backend (PHP-FPM/Go/Node.js).
Arsitektur High Availability Lengkap:
[ Web Clients ] ---> [ Cloudflare CDN / WAF ]
|
v
[ Nginx Reverse Proxy / SSL Term ]
|
v
[ Backend Application (PHP-FPM / Go / Node) ]
|
v
[ HAProxy / ProxySQL Load Balancer ]
/ | \
v v v
[ MariaDB ] [ MariaDB ] [ MariaDB ]
(Node 1 - RW) (Node 2 - RW) (Node 3 - RW)
Konfigurasi Dasar HAProxy untuk Galera Health Check
Untuk mencegah aplikasi mengirimkan query ke node MariaDB yang sedang down atau keluar dari kuorum, kita dapat mengonfigurasi HAProxy dengan pemeriksaan kesehatan (health check) berbasis port khusus MariaDB atau menggunakan skrip pihak ketiga (clustercheck).
Contoh konfigurasi haproxy.cfg untuk load balancing Galera Cluster:
global
log /dev/log local0
maxconn 4096
defaults
log global
option tcplog
option dontlognull
retries 3
timeout connect 5s
timeout client 50s
timeout server 50s
frontend mariadb_front
bind *:3306
mode tcp
default_backend mariadb_back
backend mariadb_back
mode tcp
balance roundrobin
option tcp-check
# Health check mendeteksi apakah node berstatus Synced (wsrep_local_state = 4)
server node1 192.168.1.101:3306 check inter 2s rise 2 fall 3
server node2 192.168.1.102:3306 check inter 2s rise 2 fall 3
server node3 192.168.1.103:3306 check inter 2s rise 2 fall 3
[!WARNING] Load balancing TCP murni pada port 3306 melalui HAProxy dapat berisiko jika aplikasi melakukan transaksi panjang atau multi-statement tanpa penanganan error yang tepat. Untuk enterprise berskala besar, sangat disarankan menggunakan ProxySQL karena ia memahami protokol MySQL, mampu melakukan query routing (membaca ke replica, menulis ke master), serta connection pooling.
8. Common Pitfalls, Anti-Patterns & Solusi
Dalam pengalaman operasional mengelola infrastruktur production berskala besar, berikut adalah kesalahan fatal yang sering dilakukan oleh sysadmin dan backend engineer:
-
Menggunakan Tabel Tanpa Primary Key (MyISAM / InnoDB Non-PK):
- Anti-Pattern: Membuat tabel tanpa Primary Key di Galera Cluster.
- Dampak: Galera memerlukan Primary Key untuk mengidentifikasi baris data secara unik saat proses certification. Tabel tanpa PK akan memicu peringatan, replikasi tidak efisien, dan berisiko tinggi menyebabkan desync antar node.
- Solusi: Selalu pastikan setiap tabel memiliki
PRIMARY KEYyang tegas sebelum masuk ke produksi.
-
Menjalankan Operasi Tulis Konkuren Tinggi pada Baris yang Sama (Hotspot Rows):
- Anti-Pattern: Desain tabel saldo atau counter global yang di-update jutaan kali per detik pada baris yang sama dari berbagai node.
- Dampak: Menyebabkan tingkat certification failure yang masif, tingginya deadlock, dan penurunan performa drastis karena rollback terus-menerus.
- Solusi: Lakukan sharding logis, gunakan antrean Redis untuk agregasi counter sebelum di-flush ke MariaDB, atau rancang ulang skema database.
-
Mengabaikan Pemantauan Quorum Saat Maintenance Server:
- Anti-Pattern: Mematikan 2 node secara bersamaan dari kluster 3-node untuk reboot kernel.
- Dampak: Hilangnya kuorum mayoritas ($N/2 + 1$), sehingga node yang tersisa menolak semua koneksi tulis untuk mencegah korupsi data.
- Solusi: Lakukan rolling maintenance satu per satu. Pastikan node pertama selesai dan sinkron sebelum melanjutkan ke node berikutnya.
9. Benchmark, Metrik Kinerja & Tuning Performa
Untuk mengukur kesiapan kluster menghadapi beban tinggi, gunakan tool benchmark standar industri seperti sysbench.
Perintah Pengujian Benchmark Sysbench
-
Inisialisasi Data Uji:
sysbench /usr/share/sysbench/oltp_read_write.lua \ --mysql-host=192.168.1.101 \ --mysql-user=root \ --mysql-password=YourRootPassword \ --mysql-db=test \ --table-size=1000000 \ --tables=10 prepare -
Menjalankan Beban Kerja (Load Test):
sysbench /usr/share/sysbench/oltp_read_write.lua \ --mysql-host=192.168.1.101 \ --mysql-user=root \ --mysql-password=YourRootPassword \ --mysql-db=test \ --table-size=1000000 \ --tables=10 \ --threads=64 \ --time=60 \ --report-interval=10 run
Metrik Kunci yang Harus Dipantau (Monitoring):
wsrep_local_send_queue&wsrep_local_recv_queue: Jika nilai antrean ini sering di atas 0, berarti jaringan atau CPU mengalami saturasi dalam mengirim/menerima write-set.wsrep_cert_failures: Jumlah transaksi yang gagal akibat konflik sertifikasi. Nilai yang tinggi menunjukkan adanya desain aplikasi yang memicu hotspot contention.wsrep_cluster_status: Pastikan status selalu bernilaiPrimary.
10. Checklist Penerapan Produksi & Kesimpulan
Sebelum meluncurkan kluster MariaDB Galera ke lingkungan live production, pastikan Anda telah menyelesaikan checklist verifikasi berikut:
- Minimum 3 node aktif dengan latensi jaringan privat < 2ms.
- Seluruh port firewall (
3306,4567,4568,4444) terkonfigurasi dengan benar. - Metode SST menggunakan
mariabackupdengan kredensial enkripsi yang kuat. - Setiap tabel di database memiliki
PRIMARY KEYyang valid. - Implementasi ProxySQL atau HAProxy untuk manajemen koneksi dan health check aplikasi.
- Pengujian simulasi network partition (split-brain test) dan node failure recovery berhasil dilakukan.
- Sistem monitoring (Prometheus + Grafana + MariaDB Exporter) aktif memantau metrik WSREP.
Dengan mengikuti panduan komprehensif ini, Anda kini memiliki fondasi arsitektur database multi-master berkinerja tinggi, tahan banting terhadap kegagalan perangkat keras, serta siap menopang lonjakan traffic aplikasi enterprise secara seamless.