{"id":81,"date":"2026-01-01T12:22:00","date_gmt":"2026-01-01T05:22:00","guid":{"rendered":"https:\/\/abdullah.mablx.online\/?p=81"},"modified":"2026-04-02T20:34:09","modified_gmt":"2026-04-02T13:34:09","slug":"tutorial-lengkap-setup-mariadb-galera-cluster-tls-ubuntu-24-04","status":"publish","type":"post","link":"https:\/\/abdullah.mablx.online\/?p=81","title":{"rendered":"Tutorial Lengkap: Setup MariaDB Galera Cluster + TLS (Ubuntu 24.04)"},"content":{"rendered":"\n<p>Dokumen ini membahas langkah demi langkah membangun <strong>MariaDB Galera Cluster<\/strong> yang aman menggunakan <strong>TLS\/SSL<\/strong> pada sistem <strong>Ubuntu 24.04<\/strong>. Cocok untuk kebutuhan high availability dan replikasi database real-time.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Gambaran Arsitektur Cluster<\/h2>\n\n\n\n<p>Contoh topologi yang digunakan:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Node<\/th><th>Hostname<\/th><th>IP Address<\/th><\/tr><\/thead><tbody><tr><td>Node 1<\/td><td>Cluster-1<\/td><td>172.20.0.215<\/td><\/tr><tr><td>Node 2<\/td><td>Cluster-2<\/td><td>172.20.0.216<\/td><\/tr><tr><td>Node 3<\/td><td>Cluster-3<\/td><td>172.20.0.217<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Semua node:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ubuntu Server 24.04<\/li>\n\n\n\n<li>MariaDB 10.11+<\/li>\n\n\n\n<li>Akses root \/ sudo<\/li>\n\n\n\n<li>Waktu sistem sinkron (chrony)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Tahap 1: Instalasi MariaDB &amp; Galera<\/h2>\n\n\n\n<p>Jalankan perintah berikut <strong>di semua node<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt update\napt install mariadb-server mariadb-client galera-4 -y<\/code><\/pre>\n\n\n\n<p>Verifikasi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mariadb --version<\/code><\/pre>\n\n\n\n<p>Pastikan service aktif:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl status mariadb<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Tahap 2: Pembuatan Sertifikat TLS<\/h2>\n\n\n\n<p>TLS digunakan agar komunikasi antar node terenkripsi.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1\ufe0f\u20e3 Buat direktori SSL<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mkdir -p \/etc\/ssl\/mysql\ncd \/etc\/ssl\/mysql<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2\ufe0f\u20e3 Buat CA (Certificate Authority)<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl genrsa 2048 &gt; ca-key.pem\nopenssl req -new -x509 -nodes -days 3650 \\\n  -key ca-key.pem -out ca.pem \\\n  -subj \"\/CN=Galera-CA\"<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3\ufe0f\u20e3 Generate server key &amp; CSR<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl req -newkey rsa:2048 -days 3650 -nodes \\\n  -keyout server-key.pem -out server-req.pem \\\n  -subj \"\/CN=$(hostname)\"<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4\ufe0f\u20e3Sign cert<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl x509 -req -in server-req.pem -days 3650 \\\n  -CA ca.pem -CAkey ca-key.pem -set_serial 01 \\\n  -out server-cert.pem<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5\ufe0f\u20e3Copy ke node lain (Contoh Node 2):<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>scp *.pem root@172.20.0.216:\/etc\/ssl\/mysql<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5\ufe0f\u20e3Copy ke node lain (Contoh Node 3):<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>scp *.pem root@172.20.0.217:\/etc\/ssl\/mysql<\/code><\/pre>\n\n\n\n<p>Salin file SSL ke semua node dengan path yang sama.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">FIX 1: Node Pertama (Node 1) Wajib Perbaiki Permission:<\/h2>\n\n\n\n<p>biar tidak error\/ada masalah <strong>Galera tidak bisa membaca \/ memakai file SSL key<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 SOLUSI (PALING AMAN): Perbaiki Permission:<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>chown mysql:mysql \/etc\/ssl\/mysql\/*.pem\nchmod 600 \/etc\/ssl\/mysql\/server-key.pem\nchmod 644 \/etc\/ssl\/mysql\/server-cert.pem\nchmod 644 \/etc\/ssl\/mysql\/ca.pem<\/code><\/pre>\n\n\n\n<p>Verifikasi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo -u mysql cat \/etc\/ssl\/mysql\/server-key.pem &gt;\/dev\/null &amp;&amp; echo OK<\/code><\/pre>\n\n\n\n<p>Kalau <strong>OK<\/strong> \u2192 aman<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u274c Jika Key Terenkripsi (Sering Terjadi)<\/h3>\n\n\n\n<p>Cek:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl rsa -in \/etc\/ssl\/mysql\/server-key.pem -check<\/code><\/pre>\n\n\n\n<p>Kalau muncul:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Enter pass phrase for server-key.pem:<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u27a1\ufe0f <strong>Galera TIDAK SUPPORT key ber-password<\/strong><\/h3>\n\n\n\n<p>Fix:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl rsa \\\n  -in \/etc\/ssl\/mysql\/server-key.pem \\\n  -out \/etc\/ssl\/mysql\/server-key-nopass.pem<\/code><\/pre>\n\n\n\n<p>Ganti config ke key baru:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wsrep_provider_options=\"socket.ssl_key=\/etc\/ssl\/mysql\/server-key-nopass.pem\"<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd01 Restart MariaDB<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl daemon-reload\nsystemctl start mariadb<\/code><\/pre>\n\n\n\n<p>Cek:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl status mariadb<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">FIX 2: Node Kedua dan Node Seterusnya Harus di Perbaiki biar tidak error seperti Contoh di bawah:<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>Bad value '\/etc\/ssl\/mysql\/server-cert.pem'\nPermission denied<\/code><\/pre>\n\n\n\n<p>Artinya:<br>\ud83d\udc49 <strong>user mysql TIDAK PUNYA AKSES baca ke file SSL<\/strong><\/p>\n\n\n\n<p>Walaupun filenya ada, <strong>permission \/ ownership masih salah<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd0e Kenapa ini bisa terjadi?<\/h3>\n\n\n\n<p>Galera dijalankan oleh:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>User = mysql<\/code><\/pre>\n\n\n\n<p>Kalau file SSL:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>root:root\nchmod 600<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\u27a1\ufe0f <strong>mysql TIDAK bisa baca<\/strong> \u2192 Galera gagal start<\/h4>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 SOLUSI WAJIB (LAKUKAN DI SEMUA NODE)<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1\ufe0f\u20e3 Set ownership &amp; permission yang BENAR<\/h4>\n\n\n\n<p>Jalankan sebagai root:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chown mysql:mysql \/etc\/ssl\/mysql\/*.pem\nchmod 600 \/etc\/ssl\/mysql\/server-key.pem\nchmod 644 \/etc\/ssl\/mysql\/server-cert.pem\nchmod 644 \/etc\/ssl\/mysql\/ca.pem<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">2\ufe0f\u20e3 Verifikasi mysql bisa baca<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo -u mysql cat \/etc\/ssl\/mysql\/server-cert.pem &gt;\/dev\/null &amp;&amp; echo OK\nsudo -u mysql cat \/etc\/ssl\/mysql\/server-key.pem  &gt;\/dev\/null &amp;&amp; echo OK\nsudo -u mysql cat \/etc\/ssl\/mysql\/ca.pem          &gt;\/dev\/null &amp;&amp; echo OK<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\">\u26a0\ufe0f<strong> HARUS keluar OK semua<\/strong><\/h5>\n\n\n\n<p>Kalau salah satu gagal \u2192 MariaDB PASTI gagal start<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83d\udd10 CEK KEY TIDAK BOLEH PAKAI PASSWORD<\/h4>\n\n\n\n<p>Galera <strong>TIDAK support private key ber-password<\/strong><\/p>\n\n\n\n<p>Cek:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl rsa -in \/etc\/ssl\/mysql\/server-key.pem -check<\/code><\/pre>\n\n\n\n<p>Kalau muncul:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Enter pass phrase:<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\">Fix:<\/h5>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl rsa \\\n -in \/etc\/ssl\/mysql\/server-key.pem \\\n -out \/etc\/ssl\/mysql\/server-key-nopass.pem<\/code><\/pre>\n\n\n\n<p>Update config:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>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\"<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83d\udd01 Restart MariaDB<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl daemon-reload\nsystemctl start mariadb<\/code><\/pre>\n\n\n\n<p>Cek:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl status mariadb<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Tahap 3: Konfigurasi Galera Cluster<\/h2>\n\n\n\n<p>Edit konfigurasi MariaDB:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/mysql\/mariadb.conf.d\/60-galera.cnf<\/code><\/pre>\n\n\n\n<p>Contoh konfigurasi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;galera]\nwsrep_on=ON\nwsrep_provider=\/usr\/lib\/galera\/libgalera_smm.so\nwsrep_cluster_name=\"ClusterDB\"\nwsrep_cluster_address=\"gcomm:\/\/172.20.0.215,172.20.0.216,172.20.0.217\"\n\nwsrep_node_name=\"Cluster-1\"         #Ubah Sesuai Node\/hostname\nwsrep_node_address=\"172.20.0.215\"   #Ubah IP Address nya sesuai dengan Node\n\nwsrep_sst_method=rsync\nbinlog_format=row\ndefault_storage_engine=InnoDB\ninnodb_autoinc_lock_mode=2\n\n# TLS\nwsrep_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\"<\/code><\/pre>\n\n\n\n<p>Sesuaikan <strong>wsrep_node_name=&#8221;Nama Node&#8221;<\/strong> dan <strong>wsrep_node_address=&#8221;IP Address&#8221;<\/strong> di setiap server\/node.<\/p>\n\n\n\n<p>Untuk <strong>wsrep_cluster_name=&#8221;Nama Databases&#8221;<\/strong> isi saja sesuai kebutuhan dan di setiap server\/node wajib sama<\/p>\n\n\n\n<p>Di <strong>wsrep_cluster_address=&#8221;gcomm:\/\/172.20.0.215,172.20.0.216,172.20.0.217&#8243;<\/strong> harus di isi Semua IP Address dari server\/node yang ingin di <strong>Cluster<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Tahap 4: Bootstrap Node Pertama<\/h2>\n\n\n\n<p>Di <strong>node pertama saja<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl stop mariadb\nrm -f \/var\/lib\/mysql\/grastate.dat\n\/usr\/bin\/galera_new_cluster<\/code><\/pre>\n\n\n\n<p>Cek status cluster:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mysql -u root -p -e \"SHOW STATUS LIKE 'wsrep_cluster_size';\"<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>+--------------------+-------+\n| Variable_name      | Value |\n+--------------------+-------+\n| wsrep_cluster_size |   1   |\n+--------------------+-------+<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Tahap 5: Join Node Kedua &amp; Ketiga<\/h2>\n\n\n\n<p>Di node lain:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl stop mariadb\nrm -f \/var\/lib\/mysql\/grastate.dat\nsystemctl start mariadb<\/code><\/pre>\n\n\n\n<p>Pastikan node berhasil join:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mysql -u root -p -e \"SHOW STATUS LIKE 'wsrep_cluster_size';\"<\/code><\/pre>\n\n\n\n<p>Status harus <strong>Synced<\/strong>.<\/p>\n\n\n\n<p>Status Node 2:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>+--------------------+-------+\n| Variable_name      | Value |\n+--------------------+-------+\n| wsrep_cluster_size |   2   |\n+--------------------+-------+<\/code><\/pre>\n\n\n\n<p>Status Node 3:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>+--------------------+-------+\n| Variable_name      | Value |\n+--------------------+-------+\n| wsrep_cluster_size |   3   |\n+--------------------+-------+<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Tahap 6: Verifikasi Replikasi<\/h2>\n\n\n\n<p>Tes sederhana:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE DATABASE test_galera;<\/code><\/pre>\n\n\n\n<p>Pastikan database tersebut muncul di node lain.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Troubleshooting Umum<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd34 Service MariaDB gagal start<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Periksa log:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>journalctl -xeu mariadb<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd34 Node tidak bisa join cluster<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pastikan port berikut terbuka:<\/li>\n\n\n\n<li>3306<\/li>\n\n\n\n<li>4444<\/li>\n\n\n\n<li>4567<\/li>\n\n\n\n<li>4568<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd34 TLS error<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pastikan permission file SSL:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>chown mysql:mysql \/etc\/mysql\/ssl\/*\nchmod 600 \/etc\/mysql\/ssl\/*.key<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Keuntungan Menggunakan TLS di Galera<\/h2>\n\n\n\n<p>\u2705 Data antar node terenkripsi<br>\u2705 Aman di jaringan publik<br>\u2705 Standar produksi &amp; compliance<br>\u2705 Mencegah sniffing dan MITM<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Kesimpulan<\/h2>\n\n\n\n<p>Dengan konfigurasi ini:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Galera Cluster berjalan <strong>high availability<\/strong><\/li>\n\n\n\n<li>Replikasi data <strong>real-time<\/strong><\/li>\n\n\n\n<li>Komunikasi antar node <strong>terenkripsi TLS<\/strong><\/li>\n\n\n\n<li>Cocok untuk environment <strong>production<\/strong><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","protected":false},"excerpt":{"rendered":"<p>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: Node Hostname IP Address Node 1 Cluster-1 172.20.0.215 Node 2 Cluster-2 172.20.0.216 Node 3 Cluster-3 172.20.0.217 Semua node: Tahap 1: Instalasi [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":136,"comment_status":"open","ping_status":"open","sticky":true,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,18,16],"tags":[],"class_list":["post-81","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","category-ubuntu","category-ubuntu-24-04"],"_links":{"self":[{"href":"https:\/\/abdullah.mablx.online\/index.php?rest_route=\/wp\/v2\/posts\/81","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/abdullah.mablx.online\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/abdullah.mablx.online\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/abdullah.mablx.online\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/abdullah.mablx.online\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=81"}],"version-history":[{"count":7,"href":"https:\/\/abdullah.mablx.online\/index.php?rest_route=\/wp\/v2\/posts\/81\/revisions"}],"predecessor-version":[{"id":135,"href":"https:\/\/abdullah.mablx.online\/index.php?rest_route=\/wp\/v2\/posts\/81\/revisions\/135"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/abdullah.mablx.online\/index.php?rest_route=\/wp\/v2\/media\/136"}],"wp:attachment":[{"href":"https:\/\/abdullah.mablx.online\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=81"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/abdullah.mablx.online\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=81"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/abdullah.mablx.online\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=81"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}