Masdika Loading..
Masdika.BIZ.ID

DevOps Engineer

Cloud Engineer

System Administrator

  • Home
  • Portofolio
  • Services
  • Resume
  • Skills
  • Blog
  • Contact
Masdika.BIZ.ID

DevOps Engineer

Cloud Engineer

System Administrator

Download CV

Recent Posts

  • CI/CD Laravel: Otomatisasi Deployment dengan Jenkins & Docker
  • Cara Kirim Notifikasi Otomatis SSL Expired via Email (Lengkap + Bash Script)
  • Panduan Lengkap Autoscaling di Kubernetes Bare-Metal (Lengkap untuk Pemula)
  • Panduan Lengkap: Deploy Website Statis ke Kubernetes Menggunakan Docker + NodePort
  • Cara Cerdas Menguasai Kubernetes (K8s): Panduan Lengkap Orkestrasi Kontainer untuk Developer Modern

Recent Comments

  1. Masdika.BIZ.ID on Cara Cerdas Menguasai Kubernetes (K8s): Panduan Lengkap Orkestrasi Kontainer untuk Developer Modern
  2. VSTRA on Cara Cerdas Menguasai Kubernetes (K8s): Panduan Lengkap Orkestrasi Kontainer untuk Developer Modern
  3. Rikiy on Cara Mudah Deploy Website Node.js Menggunakan Docker
  4. Masdika.BIZ.ID on Disaster Recovery Cluster (DRC) WordPress dengan MariaDB Galera dan Load Balancer Caddy
  5. someone on Disaster Recovery Cluster (DRC) WordPress dengan MariaDB Galera dan Load Balancer Caddy

Archives

  • August 2025
  • July 2025
  • June 2025

Categories

  • Tutorial

Masddika.BIZ.ID

  • About
  • Terms & Conditions
  • Privacy Policy
Blog Post

Disaster Recovery Cluster (DRC) WordPress dengan MariaDB Galera dan Load Balancer Caddy

July 21, 2025 Tutorial by Masdika.BIZ.ID
Disaster Recovery Cluster (DRC) WordPress dengan MariaDB Galera dan Load Balancer Caddy

Artikel ini membahas langkah-langkah membangun Disaster Recovery Cluster (DRC) untuk WordPress menggunakan MariaDB Galera Cluster dan Caddy sebagai reverse proxy serta HAProxy untuk load balancing database. Solusi ini menjamin ketersediaan tinggi (high availability) dan replikasi otomatis antar server. Meskipun studi kasus yang digunakan adalah WordPress, konfigurasi ini juga dapat diterapkan untuk Laravel, CodeIgniter, Next.js, Express.js, dan berbagai framework backend lainnya yang menggunakan MySQL/MariaDB sebagai database utama. 🧩✨😎

🖥️ Spesifikasi Server

  1. DRC-1 (Primary MariaDB + WordPress)
    • IP: 103.168.146.70
    • Hostname: drc1.syslab.my.id
    • Peran: Node Galera utama + container WordPress
  2. DRC-2 (Secondary MariaDB + WordPress)
    • IP: 103.168.146.71
    • Hostname: drc2.syslab.my.id
    • Peran: Node Galera replikasi + container WordPress
  3. CADDY-WEB-SERVER (Load Balancer Caddy + HAProxy)
    • IP: 103.168.146.72
    • Hostname: caddy.syslab.my.id
    • Peran: Load balancer Caddy untuk HTTP/HTTPS, dan HAProxy untuk koneksi database port 3306

Domain: www.syslab.my.id dan syslab.my.id

📦 Struktur Direktori

Contoh di setiap server ~/wordpress-drc/:

wordpress-drc/
├── db
├── data
├── docker-compose.yml
└── wordpress

🔧 Langkah-langkah Lengkap Deployment

🔹 1. Siapkan Docker & Folder di Setiap Server

sudo apt update && sudo apt install docker.io docker-compose -y
mkdir -p ~/wordpress-drc/{db,data,wordpress}
cd ~/wordpress-drc

🔹 2. Konfigurasi DRC-1 (103.168.146.70)

📄 File: docker-compose.yml

services:
  mariadb:
    image: bitnami/mariadb-galera:latest
    container_name: mariadb
    restart: always
    environment:
      - MARIADB_ROOT_PASSWORD=PasswordKamu
      - MARIADB_DATABASE=wordpress
      - MARIADB_GALERA_CLUSTER_NAME=wp_cluster
      - MARIADB_GALERA_CLUSTER_ADDRESS=gcomm://103.168.146.70,103.168.146.71
      - MARIADB_GALERA_NODE_NAME=drc1
      - MARIADB_GALERA_NODE_ADDRESS=103.168.146.70
      - MARIADB_GALERA_CLUSTER_BOOTSTRAP=yes
    volumes:
      - ./db:/bitnami/mariadb
    network_mode: host

  wordpress:
    image: masdika/wordpress:latest
    container_name: wp
    restart: always
    environment:
      - WORDPRESS_DB_HOST=103.168.146.72
      - WORDPRESS_DB_NAME=wordpress
      - WORDPRESS_DB_USER=root
      - WORDPRESS_DB_PASSWORD=PasswordKamu
    volumes:
      - ./wordpress:/bitnami/wordpress
    network_mode: host

🔹 3. Konfigurasi DRC-2 (103.168.146.71)

📄 File: docker-compose.yml

services:
  mariadb:
    image: bitnami/mariadb-galera:latest
    container_name: mariadb
    restart: always
    environment:
      - MARIADB_ROOT_PASSWORD=PasswordKamu
      - MARIADB_DATABASE=wordpress
      - MARIADB_GALERA_CLUSTER_NAME=wp_cluster
      - MARIADB_GALERA_CLUSTER_ADDRESS=gcomm://103.168.146.70,103.168.146.71
      - MARIADB_GALERA_NODE_NAME=drc2
      - MARIADB_GALERA_NODE_ADDRESS=103.168.146.71
      - MARIADB_GALERA_CLUSTER_BOOTSTRAP=no
    volumes:
      - ./db:/bitnami/mariadb
    network_mode: host

  wordpress:
    image: masdika/wordpress:latest
    container_name: wp
    restart: always
    environment:
      - WORDPRESS_DB_HOST=103.168.146.72
      - WORDPRESS_DB_NAME=wordpress
      - WORDPRESS_DB_USER=root
      - WORDPRESS_DB_PASSWORD=PasswordKamu
    volumes:
      - ./wordpress:/bitnami/wordpress
    network_mode: host

🔹 4. Konfigurasi Load Balancer CADDY + HAProxy (103.168.146.72)

📄 File: Caddyfile

syslab.my.id, www.syslab.my.id {
    reverse_proxy 103.168.146.70:80 103.168.146.71:80 {
        lb_policy random
        health_interval 10s
        health_timeout 5s
        health_body    "<title>WordPress</title>"
    }
}

📄 File: haproxy.cfg

global
    log stdout format raw local0

defaults
    log     global
    mode    tcp
    option  tcplog
    timeout connect 5s
    timeout client  50s
    timeout server  50s

frontend mysql_front
    bind *:3306
    default_backend mysql_back

backend mysql_back
    mode tcp
    option tcp-check
    balance roundrobin
    server drc1 103.168.146.70:3306 check
    server drc2 103.168.146.71:3306 check backup

🐳 File: docker-compose.yml

services:
  caddy:
    image: caddy:latest
    container_name: caddy
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./caddy_data:/data
      - ./caddy_config:/config

  haproxy:
    image: haproxy:latest
    container_name: haproxy
    restart: always
    ports:
      - "3306:3306"
    volumes:
      - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg

🔹 5. Jalankan Semua Layanan 🚀

# DRC-1 dan DRC-2
cd ~/wordpress-drc
sudo docker compose up -d

# Caddy Server
cd ~/caddy-docker
sudo docker compose up -d

✅ Verifikasi Cluster

  1. Masuk ke salah satu node DB:
docker exec -it mariadb mysql -uroot -p
SHOW STATUS LIKE 'wsrep_cluster_size';

Output 2 artinya dua node terkoneksi dengan baik.

  1. Akses WordPress:
    Kunjungi https://www.syslab.my.id dan pastikan WordPress bisa diakses. 🌐

📌 Catatan Tambahan

  • Gunakan network_mode: host untuk akses langsung ke port antar node.
  • Jika salah satu node down, setelah up otomatis akan bergabung kembali jika volume tidak corrupt. 🔁
  • Pastikan MARIADB_GALERA_CLUSTER_BOOTSTRAP=yes hanya di satu node saja (biasanya DRC-1).
  • HAProxy akan mem-forward semua koneksi MySQL melalui IP CADDY-WEB-SERVER (3306), lalu diarahkan ke node aktif.
  • Untuk WordPress, WORDPRESS_DB_HOST bisa diarahkan ke IP Caddy (103.168.146.72) agar koneksi selalu lewat load balancer.

➕ Menambahkan Server Baru ke Cluster

Jika Anda ingin menambahkan node DRC baru (misalnya DRC-3):

  1. Pastikan volume bersih dan IP statis tersedia
  2. Gunakan image dan struktur direktori yang sama seperti node lainnya
  3. Modifikasi environment pada docker-compose.yml seperti berikut:
  - MARIADB_GALERA_NODE_NAME=drc3
  - MARIADB_GALERA_NODE_ADDRESS=103.168.146.73
  - MARIADB_GALERA_CLUSTER_ADDRESS=gcomm://103.168.146.70,103.168.146.71,103.168.146.73
  - MARIADB_GALERA_CLUSTER_BOOTSTRAP=no

  1. Jalankan dengan docker compose up -d, node akan join otomatis jika konfigurasi benar dan tidak ada kesalahan pada volume/data. 🧠

Dengan setup ini, WordPress Anda akan selalu aktif meskipun salah satu server down. Solusi DRC ini cukup sederhana dan efisien, cocok untuk production skala kecil-menengah dengan budget minim. 🚀✨

Butuh diagram arsitektur atau backup strategy tambahan? Tinggal komen ya! 😊

Share:
Tags: caddyfiledockerDRCHA PROXYload balancer

Post navigation

Prev
Next
2 Comments
  • someone 10:58 am July 21, 2025 Reply

    Test

    • Masdika.BIZ.ID 11:09 am July 21, 2025 Reply

      test apa bro ?

Write a comment Cancel Reply

© 2025 www.masdika.biz.id — Semua Hak Dilindungi