Dokumen ini membahas langkah demi langkah membangun MariaDB Galera Cluster yang aman menggunakan TLS/SSL pada sistem Ubuntu 24.04. Cocok untuk kebutuhan high availability dan replikasi database real-time.


Gambaran Arsitektur Cluster

Contoh topologi yang digunakan:

NodeHostnameIP Address
Node 1Cluster-1172.20.0.215
Node 2Cluster-2172.20.0.216
Node 3Cluster-3172.20.0.217

Semua node:

  • Ubuntu Server 24.04
  • MariaDB 10.11+
  • Akses root / sudo
  • Waktu sistem sinkron (chrony)

Tahap 1: Instalasi MariaDB & Galera

Jalankan perintah berikut di semua node:

apt update
apt install mariadb-server mariadb-client galera-4 -y

Verifikasi:

mariadb --version

Pastikan service aktif:

systemctl status mariadb

Tahap 2: Pembuatan Sertifikat TLS

TLS digunakan agar komunikasi antar node terenkripsi.

1️⃣ Buat direktori SSL

sudo mkdir -p /etc/ssl/mysql
cd /etc/ssl/mysql

2️⃣ Buat CA (Certificate Authority)

openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 3650 \
  -key ca-key.pem -out ca.pem \
  -subj "/CN=Galera-CA"

3️⃣ Generate server key & CSR

openssl req -newkey rsa:2048 -days 3650 -nodes \
  -keyout server-key.pem -out server-req.pem \
  -subj "/CN=$(hostname)"

4️⃣Sign cert

openssl x509 -req -in server-req.pem -days 3650 \
  -CA ca.pem -CAkey ca-key.pem -set_serial 01 \
  -out server-cert.pem

5️⃣Copy ke node lain (Contoh Node 2):

scp *.pem root@172.20.0.216:/etc/ssl/mysql

5️⃣Copy ke node lain (Contoh Node 3):

scp *.pem root@172.20.0.217:/etc/ssl/mysql

Salin file SSL ke semua node dengan path yang sama.

FIX 1: Node Pertama (Node 1) Wajib Perbaiki Permission:

biar tidak error/ada masalah Galera tidak bisa membaca / memakai file SSL key.

✅ SOLUSI (PALING AMAN): Perbaiki Permission:

chown mysql:mysql /etc/ssl/mysql/*.pem
chmod 600 /etc/ssl/mysql/server-key.pem
chmod 644 /etc/ssl/mysql/server-cert.pem
chmod 644 /etc/ssl/mysql/ca.pem

Verifikasi:

sudo -u mysql cat /etc/ssl/mysql/server-key.pem >/dev/null && echo OK

Kalau OK → aman

❌ Jika Key Terenkripsi (Sering Terjadi)

Cek:

openssl rsa -in /etc/ssl/mysql/server-key.pem -check

Kalau muncul:

Enter pass phrase for server-key.pem:

➡️ Galera TIDAK SUPPORT key ber-password

Fix:

openssl rsa \
  -in /etc/ssl/mysql/server-key.pem \
  -out /etc/ssl/mysql/server-key-nopass.pem

Ganti config ke key baru:

wsrep_provider_options="socket.ssl_key=/etc/ssl/mysql/server-key-nopass.pem"

🔁 Restart MariaDB

systemctl daemon-reload
systemctl start mariadb

Cek:

systemctl status mariadb

FIX 2: Node Kedua dan Node Seterusnya Harus di Perbaiki biar tidak error seperti Contoh di bawah:

Bad value '/etc/ssl/mysql/server-cert.pem'
Permission denied

Artinya:
👉 user mysql TIDAK PUNYA AKSES baca ke file SSL

Walaupun filenya ada, permission / ownership masih salah.


🔎 Kenapa ini bisa terjadi?

Galera dijalankan oleh:

User = mysql

Kalau file SSL:

root:root
chmod 600

➡️ mysql TIDAK bisa baca → Galera gagal start


✅ SOLUSI WAJIB (LAKUKAN DI SEMUA NODE)

1️⃣ Set ownership & permission yang BENAR

Jalankan sebagai root:

chown mysql:mysql /etc/ssl/mysql/*.pem
chmod 600 /etc/ssl/mysql/server-key.pem
chmod 644 /etc/ssl/mysql/server-cert.pem
chmod 644 /etc/ssl/mysql/ca.pem

2️⃣ Verifikasi mysql bisa baca

sudo -u mysql cat /etc/ssl/mysql/server-cert.pem >/dev/null && echo OK
sudo -u mysql cat /etc/ssl/mysql/server-key.pem  >/dev/null && echo OK
sudo -u mysql cat /etc/ssl/mysql/ca.pem          >/dev/null && echo OK
⚠️ HARUS keluar OK semua

Kalau salah satu gagal → MariaDB PASTI gagal start


🔐 CEK KEY TIDAK BOLEH PAKAI PASSWORD

Galera TIDAK support private key ber-password

Cek:

openssl rsa -in /etc/ssl/mysql/server-key.pem -check

Kalau muncul:

Enter pass phrase:
Fix:
openssl rsa \
 -in /etc/ssl/mysql/server-key.pem \
 -out /etc/ssl/mysql/server-key-nopass.pem

Update config:

wsrep_provider_options="gcache.size=128M;socket.ssl_key=/etc/ssl/mysql/server-key-nopass.pem;socket.ssl_cert=/etc/ssl/mysql/server-cert.pem;socket.ssl_ca=/etc/ssl/mysql/ca.pem"

🔁 Restart MariaDB

systemctl daemon-reload
systemctl start mariadb

Cek:

systemctl status mariadb

Tahap 3: Konfigurasi Galera Cluster

Edit konfigurasi MariaDB:

sudo nano /etc/mysql/mariadb.conf.d/60-galera.cnf

Contoh konfigurasi:

[galera]
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="ClusterDB"
wsrep_cluster_address="gcomm://172.20.0.215,172.20.0.216,172.20.0.217"

wsrep_node_name="Cluster-1"         #Ubah Sesuai Node/hostname
wsrep_node_address="172.20.0.215"   #Ubah IP Address nya sesuai dengan Node

wsrep_sst_method=rsync
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

# TLS
wsrep_provider_options="socket.ssl_key=/etc/mysql/ssl/server.key;socket.ssl_cert=/etc/mysql/ssl/server.pem;socket.ssl_ca=/etc/mysql/ssl/ca.pem"

Sesuaikan wsrep_node_name=”Nama Node” dan wsrep_node_address=”IP Address” di setiap server/node.

Untuk wsrep_cluster_name=”Nama Databases” isi saja sesuai kebutuhan dan di setiap server/node wajib sama

Di wsrep_cluster_address=”gcomm://172.20.0.215,172.20.0.216,172.20.0.217″ harus di isi Semua IP Address dari server/node yang ingin di Cluster.


Tahap 4: Bootstrap Node Pertama

Di node pertama saja:

systemctl stop mariadb
rm -f /var/lib/mysql/grastate.dat
/usr/bin/galera_new_cluster

Cek status cluster:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size |   1   |
+--------------------+-------+

Tahap 5: Join Node Kedua & Ketiga

Di node lain:

systemctl stop mariadb
rm -f /var/lib/mysql/grastate.dat
systemctl start mariadb

Pastikan node berhasil join:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size';"

Status harus Synced.

Status Node 2:

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size |   2   |
+--------------------+-------+

Status Node 3:

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size |   3   |
+--------------------+-------+

Tahap 6: Verifikasi Replikasi

Tes sederhana:

CREATE DATABASE test_galera;

Pastikan database tersebut muncul di node lain.


Troubleshooting Umum

🔴 Service MariaDB gagal start

  • Periksa log:
journalctl -xeu mariadb

🔴 Node tidak bisa join cluster

  • Pastikan port berikut terbuka:
  • 3306
  • 4444
  • 4567
  • 4568

🔴 TLS error

  • Pastikan permission file SSL:
chown mysql:mysql /etc/mysql/ssl/*
chmod 600 /etc/mysql/ssl/*.key

Keuntungan Menggunakan TLS di Galera

✅ Data antar node terenkripsi
✅ Aman di jaringan publik
✅ Standar produksi & compliance
✅ Mencegah sniffing dan MITM


Kesimpulan

Dengan konfigurasi ini:

  • Galera Cluster berjalan high availability
  • Replikasi data real-time
  • Komunikasi antar node terenkripsi TLS
  • Cocok untuk environment production

Leave a Reply

Your email address will not be published. Required fields are marked *