High Availability Yang Kantong Friendly: Database dengan Galera Cluster, ProxySQL, dan Keepalived di Ubuntu 26.04
Membangun infrastruktur High Availability (HA) sering kali dianggap identik dengan biaya mahal, kebutuhan perangkat khusus, atau layanan cloud kelas enterprise yang tidak ramah untuk usaha kecil, sekolah, startup, maupun organisasi dengan anggaran terbatas. Akibatnya, banyak aplikasi penting masih berjalan pada satu server tunggal (single point of failure) yang berisiko menyebabkan layanan berhenti total ketika terjadi gangguan perangkat keras, sistem operasi, maupun jaringan.
Padahal, dengan memanfaatkan perangkat lunak sumber terbuka yang telah teruji di lingkungan produksi, kita dapat membangun arsitektur yang memiliki tingkat ketersediaan tinggi tanpa harus mengeluarkan biaya besar. Kombinasi Galera Cluster untuk replikasi database multi-master, ProxySQL sebagai lapisan manajemen koneksi dan load balancing database, serta Keepalived untuk mekanisme failover alamat IP, memungkinkan kita menciptakan platform yang tetap dapat beroperasi meskipun salah satu node mengalami kegagalan.
Dalam panduan ini, kita akan membangun tiga node Ubuntu 26.04 LTS yang masing-masing berperan sebagai server aplikasi sekaligus server database (all-in-one node). Pendekatan ini dipilih karena lebih sederhana, lebih hemat sumber daya, dan cocok digunakan pada banyak skenario dunia nyata seperti sistem informasi sekolah, aplikasi internal perusahaan, ERP, LMS, maupun aplikasi berbasis Laravel yang membutuhkan ketersediaan layanan lebih baik dibandingkan satu VPS tunggal.
Seluruh proses instalasi dan pengujian dilakukan menggunakan lingkungan VirtualBox agar mudah direplikasi oleh siapa pun. Pada tahap simulasi, Keepalived digunakan untuk memindahkan alamat IP internal antar-node sehingga proses failover dapat diamati secara langsung. Untuk implementasi produksi, terdapat beberapa pilihan yang dapat disesuaikan dengan kebutuhan dan anggaran:
Opsi A (Paling Aman): menggunakan Floating IP atau Reserved IP dari penyedia cloud dan mengintegrasikannya dengan skrip API pada Keepalived.
Opsi B (Paling Hemat): menggunakan Round-Robin DNS di belakang Cloudflare Proxy sehingga tidak memerlukan Floating IP publik sama sekali.
Fokus utama tulisan ini bukan sekadar membuat layanan berjalan, melainkan membangun fondasi HA yang dapat dipahami, diuji, dipelajari, dan dikembangkan lebih lanjut. Oleh karena itu, setiap tahap akan dijelaskan secara bertahap mulai dari persiapan sistem operasi, sinkronisasi waktu, instalasi database cluster, konfigurasi ProxySQL, hingga mekanisme failover jaringan menggunakan Keepalived.
Pada bagian pertama ini, kita akan memulai dari tahap paling dasar namun sering diabaikan: menyiapkan seluruh node dalam kondisi identik, bersih, dan siap dikonfigurasi. Semua layanan utama akan dipasang terlebih dahulu namun sengaja dibiarkan dalam keadaan mati (inactive) agar proses konfigurasi dapat dilakukan secara terkontrol tanpa risiko node-node saling berkomunikasi sebelum seluruh parameter klaster selesai disiapkan.
Ilustrasi Topologi
TAHAP 1: Instalasi Paket
Lakukan instalasi semua paket di ketiga VM. Karena kita menggunakan VM, kita akan lakukan di VM pertama sampai selesai, kemudian kita clone untuk membuat VM kedua dan ketiga. Dengan begitu kita tidak waktu banyak untuk membuat tiga servernya. Tetapi pastikan untuk langsung mematikan dan menonaktifkan otomatisasinya terlebih dahulu agar mereka tidak saling "berbicara" sebelum konfigurasinya matang.
Persiapan
1. Konfigurasi Virtual Machine
Konfigurasi jaringan di virtual machine menggunakan 2 Network adapter:
- Adapter 1: Bridge adapter (enp0s3)
Digunakan agar VM dapat akses internet untuk install paket yang dibutuhkan. - Adapter 2: Host-only adapter (enp0s8)
Untuk komunikasi antar VM dan host. Dalam tulisan ini masing-masing node memiliki IP:
- Node 1: 192.168.56.21
- Node 2: 192.168.56.22
- Node 3: 192.168.56.23
Spesifikasi VM yang digunakan adalah 2 CPU dan 2GB RAM.
2. Konfigurasi NTP (Network Time Protocol).
dalam sistem database terdistribusi seperti Galera Cluster, sinkronisasi waktu yang presisi adalah hukum wajib. Selisih waktu (time drift) beberapa detik saja antar-node bisa membuat Galera mengalami kegagalan sertifikasi query, salah mendeteksi urutan transaksi, atau bahkan mendepak node dari klaster karena dianggap tidak sinkron.
Pada Ubuntu 20.04 ke atas, termasuk Ubuntu 26.04 LTS, layanan sinkronisasi waktu default sudah dialihkan dari ntp lama ke chrony karena jauh lebih efisien, lebih cepat sinkron, dan akurat untuk lingkungan virtual (seperti VirtualBox atau Cloud VPS).
Konfigurasi Sinkronisasi Waktu (NTP via Chrony)
Langkah 1: Atur Timezone yang Sama
Sebelum menyalakan sinkronisasi otomatis, pastikan ketiga server berada di zona waktu yang sama (misalnya Asia/Jakarta untuk WIB).
sudo timedatectl set-timezone Asia/Jakarta
Langkah 2: Install Paket Chrony
Ubuntu 26.04 menggunakan chrony sebagai pengelola protokol NTP modern. Install paketnya dengan perintah:
sudo apt update
sudo apt install chrony -y
Langkah 3: Konfigurasi Server NTP Terdekat (Opsional tapi Direkomendasikan)
Agar sinkronisasi waktu berjalan sangat cepat dan minim latensi, kita bisa mengarahkan server kita ke server NTP lokal Indonesia (id.pool.ntp.org).
Buka file konfigurasi chrony:
sudo nano /etc/chrony/sources.d/ubuntu-ntp-pools.sources
Cari baris yang diawali dengan kata pool atau server, lalu sesuaikan atau tambahkan server lokal Indonesia (0.id.pool.ntp.org) di bagian paling atas, jadi seperti:
pool 0.id.pool.ntp.org iburst maxsources 1 nts prefer
pool 1.ntp.ubuntu.com iburst maxsources 1 nts prefer
pool 2.ntp.ubuntu.com iburst maxsources 1 nts prefer
pool 3.ntp.ubuntu.com iburst maxsources 1 nts prefer
pool 4.ntp.ubuntu.com iburst maxsources 1 nts prefer
Simpan perubahan dengan menekan CTRL+O, lalu Enter. Keluar dengan CTRL+X.
Langkah 4: Aktifkan dan Jalankan Service Chrony
Berbeda dengan paket database atau proxy yang sengaja kita matikan dulu di awal, service manajemen waktu (Chrony) ini justru WAJIB langsung dihidupkan dan di-enable sekarang agar waktu server langsung presisi sebelum database diinstal.
sudo systemctl enable chrony
sudo systemctl start chrony
Tahap Verifikasi NTP (Pastikan Sukses)
Untuk memastikan ketiga VM Anda sudah saling sinkron di detik yang sama, jalankan dua perintah verifikasi ini:
Cek Status Sinkronisasi OS:
sudo timedatectl status
Hasil yang harus dipastikan: Pada baris System clock synchronized:, pastikan nilainya bernilai yes. And pada baris NTP service: bernilai active.
Cek Sumber NTP (NTP Sources):
sudo chronyc sources
Perintah ini akan menampilkan daftar server waktu luar yang sedang dihubungi oleh VM Anda.
MS Name/IP address Stratum Poll Reach LastRx Last sample
^+ ntp-nts-2.ps5.canonical.> 2 10 377 731 +24ms[ +24ms] +/- 160ms
^* ntp-nts-3.ps5.canonical.> 2 10 377 993 -506us[ -935us] +/- 140ms
^- ntp-nts-2.ps6.canonical.> 2 8 77 721 +55ms[ +55ms] +/- 189ms
^- ntp-nts-3.ps6.canonical.> 2 9 157 945 +54ms[ +54ms] +/- 183ms
^- ntp-nts-1.ps5.canonical.> 2 10 377 924 +12ms[ +12ms] +/- 149ms
Jika di depan nama server terdapat simbol asterisk (*), artinya server Anda sudah sukses terkunci dan sinkron secara presisi dengan server waktu tersebut.
2. Install & Matikan MariaDB (Jangan di-enable dulu)
Untuk menginstall MariaDB, berikut adalah perintah yang dijalankan untuk meng-impor kunci repositori MariaDB ke Ubuntu kita:
sudo apt-get install apt-transport-https curl
sudo mkdir -p /etc/apt/keyrings
sudo curl -o /etc/apt/keyrings/mariadb-keyring.asc 'https://mariadb.org/mariadb_release_signing_key.pgp'
Setelah kunci repositori berhasil diimport, copy-paste source berikut ke direktori /etc/apt/sources.list.d dengan nama mariadb.sources
nano /etc/apt/sources.list.d/mariadb.sources
# MariaDB 11.8 repository list
# https://mariadb.org/download/
X-Repolib-Name: MariaDB
Types: deb
# deb.mariadb.org is a dynamic mirror if your preferred mirror goes offline. See https://mariadb.org/mirrorbits/ for details.
# URIs: https://deb.mariadb.org/11.8/ubuntu
URIs: https://mr.heru.id/mariadb/repo/11.8/ubuntu
Suites: resolute
Components: main main/debug
Signed-By: /etc/apt/keyrings/mariadb-keyring.asc
You can now install MariaDB 11.8 from the MariaDB repository with:
Install paket mariadb dengan perintah:
sudo apt-get update
sudo apt-get install -y mariadb-server galera-4
Matikan dan disable service mariadb
sudo systemctl stop mariadb
sudo systemctl disable mariadb