Belajar Traefik - High Availability & Clustering
Episode 26 of 31

Belajar Traefik - High Availability & Clustering

Episode ini membahas high availability: menjalankan banyak instance Traefik secara stateless, sinkronisasi konfigurasi via provider, berbagi acme.json untuk Let's Encrypt dengan locking, load balancing di depan Traefik, serta health check /ping untuk readiness dan liveness probe.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Satu instance Traefik adalah single point of failure: dia mati, semua domain padam. Episode 26 menghapus titik itu dengan high availability — menjalankan dua atau lebih instance Traefik yang bekerja berdampingan, stateless, dan saling menggantikan.

Kabar baiknya: Traefik dirancang stateless. Semua konfigurasi dinamis datang dari provider, sehingga instance baru otomatis menyamai yang lain tanpa sinkronisasi manual. Tantangan utamanya hanya satu: acme.json yang berisi private key sertifikat. Episode ini membedah arsitektur HA, penyimpanan bersama, dan cara memuat Traefik di belakang load balancer.

Arsitektur HA

Desain Stateless

Prinsip utama HA Traefik:

  • Tanpa state lokal: konfigurasi routing dibaca dari provider (Docker, K8s, file) — bukan dari file instance.
  • Identik: semua instance menjalankan static config yang sama dan melihat provider yang sama.
  • Frontend load balancer: trafik dibagi ke beberapa instance; salah satu mati, yang lain tetap melayani.

Dua instance Traefik dengan Compose:

Dua instance Traefik
services:
  traefik-1:
    image: traefik:v3
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - shared-acme:/etc/traefik/acme
    networks:
      - edge
  traefik-2:
    image: traefik:v3
    ports:
      - "81:80"
      - "444:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - shared-acme:/etc/traefik/acme
    networks:
      - edge
 
volumes:
  shared-acme:

Kedua instance memakai provider yang sama dan volume shared-acme yang sama. Instance kedua berada di port 81 dan 444 agar tidak bentrok saat uji coba; di produksi keduanya diletakkan di balik load balancer eksternal.

Sinkronisasi Konfigurasi

Provider sebagai Sumber Kebenaran

Karena provider adalah satu-satunya sumber konfigurasi dinamis, tidak ada yang perlu disinkronkan secara manual:

  • Provider-based sync (Docker, K8s): setiap instance mendengar event yang sama dari Docker socket atau Kubernetes API.
  • File provider dengan shared storage: jika memakai file provider, simpan file dinamis di storage bersama (NFS, network volume) yang bisa dibaca semua instance.
  • Hasilnya: router, service, dan middleware selalu identik di semua instance.

Satu-satunya pengecualian adalah sertifikat Let's Encrypt — yang disimpan di acme.json dan memang harus dibagikan.

Let's Encrypt dalam HA

Shared acme.json dan Locking

Semua instance Traefik menulis ke acme.json yang sama. Masalahnya: dua instance yang memperbarui file bersamaan bisa saling menimpa. Traefik menangani ini dengan file locking — setiap instance mengunci file sebelum menulis, sehingga transaksi berturut-turut aman:

  • Gunakan shared storage: NFS, volume, atau object storage (S3/R2) yang di-mount semua instance.
  • Pastikan locking bekerja: Traefik memakai mekanisme flock pada file — storage shared harus mendukung file locking (NFS v4 mendukungnya).
  • Jangan membagi storage yang tidak konsisten — misalnya memuat acme.json dari tiga server sekaligus tanpa sinkronisasi bisa merusak file.

Let's Encrypt juga menerapkan rate limit per akun. Dengan beberapa instance, pastikan semua instance memakai email yang sama pada certificate resolver agar satu akun dan satu batas bersama. Leader election tidak diperlukan — Traefik menangani renewal beruntun lewat locking.

Load Balancing Traefik

Empat Pendekatan

  • DNS round-robin: beberapa A record untuk nama yang sama; browser memilih acak. Sederhana tapi tidak menangani failover.
  • External load balancer: NLB/ALB di cloud atau HAProxy di depan instance Traefik.
  • Keepalived/VRRP: virtual IP bersama antar host; failover otomatis di level jaringan.
  • Cloud load balancers: AWS, GCP, dan Azure menyediakan health check dan distribusi trafik otomatis.

Apapun frontend-nya, ia perlu tahu kapan sebuah instance Traefik sehat — di sinilah endpoint /ping berperan.

Health Check /ping

Readiness dan Liveness

Aktifkan ping di static config:

Static config: ping endpoint
ping:
  entryPoint: health

Entrypoint health didefinisikan khusus dan tidak boleh ter-expose publik:

Entrypoint health
entryPoints:
  health:
    address: ":8082"

Lalu konfigurasikan load balancer eksternal untuk memeriksa kesehatan instance:

Menguji health check ping
curl -s http://localhost:8082/ping

Response 200 OK berarti instance sehat dan siap menerima trafik; status lain berarti load balancer harus mengeluarkannya. Perintah curl di atas adalah alat verifikasi manual yang sama persis dengan yang dipakai health probe.

Tip

Pisahkan entrypoint health dari entrypoint trafik publik. Kalau health check terbuka ke internet, penyerang bisa membaca status instance — informatif tapi tidak perlu. Batasi dengan firewall atau IPWhiteList.

Penutup

Inti yang harus dibawa pulang:

  • Traefik stateless: semua instance identik karena konfigurasi dari provider.
  • Sinkronisasi file provider memakai shared storage.
  • acme.json dibagikan dengan locking; pakai email akun yang sama.
  • Load balancing di depan: DNS round-robin, external LB, keepalived, atau cloud LB.
  • /ping memberi sinyal sehat untuk health probe.
  • Health check memastikan instance mati keluar dari rotasi otomatis.

Di episode 27 selanjutnya kita akan membahas performance tuning — mengoptimalkan penggunaan memori dan CPU, konfigurasi transport untuk keep-alive dan timeout, TLS performance dengan session resumption dan HTTP/2, strategi middleware, serta benchmarking dengan wrk, ab, dan k6.

Belajar Traefik - High Availability & Clustering | Belajar Traefik