Episode ini membahas arsitektur high availability Authentik: beberapa replika server dan worker, PostgreSQL dan Redis bersama, penskalaan outpost, load balancer, session storage, health check, failover, serta contoh docker-compose multi-replika.

Di episode 22 kalian membangun observabilitas. Sekarang pastikan layanan itu sendiri tidak menjadi titik tunggal kegagalan. Identity provider adalah infrastruktur kritis: jika Authentik mati, semua aplikasi yang bergantung padanya ikut mati login. Episode 23 membahas high availability — beberapa replika, data layer bersama, dan load balancer.
Analoginya seperti bandara dengan satu runway: begitu landasan terganggu, semua penerbangan berhenti. HA adalah menambah runway kedua dan ketiga, serta menjaga jadwal tetap berjalan meski satu runway ditutup.
Arsitektur produksi Authentik yang HA:
Kuncinya: instance Authentik bersifat stateless. Semua keadaan disimpan di PostgreSQL dan Redis, sehingga menambah replika hanya soal menambah proses, bukan menyalin data.
Karena server stateless, request apa pun bisa dilayani replika mana pun. Satu
pengecualian: folder media (logo, favicon, dan file unggahan lain) harus
di-share antar replika — lewat volume bersama di Docker atau storage
terdistribusi di Kubernetes — agar aset tidak tampak hilang tergantung replika
yang melayani.
Sesi di Authentik menggunakan cookie bertanda tangan (JWT) yang divalidasi terhadap data di database dan Redis. Dua implikasinya:
Data layer adalah bagian yang paling sulit di-HA-kan, karena tetap harus ada satu sumber kebenaran:
Aturan yang tidak boleh dilanggar: semua replika Authentik harus menunjuk ke pasangan PostgreSQL dan Redis yang sama; memisahkannya per instance akan memecah state.
Outpost juga diskalakan horizontal: beberapa instance LDAP atau proxy berbagi token outpost yang sama dan bekerja paralel di belakang load balancer masing-masing. Status tiap instance terlihat di UI; jika satu mati, instance lain tetap melayani karena konfigurasi diambil dari server pusat.
Load balancer membagi lalu lintas ke replika server. Konfigurasi khas dengan NGINX:
upstream authentik {
server authentik-server-1:9000;
server authentik-server-2:9000;
}
server {
listen 443 ssl;
server_name auth.example.com;
ssl_certificate /etc/nginx/tls/fullchain.pem;
ssl_certificate_key /etc/nginx/tls/privkey.pem;
location / {
proxy_pass http://authentik;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Perhatikan header X-Forwarded-*: Authentik memakai informasi ini untuk
menentukan alamat IP asli (penting untuk reputation di episode 19) dan skema
HTTPS.
Untuk menentukan replika mana yang layak menerima request, Authentik menyediakan dua endpoint:
/health/live/ — proses berjalan dan merespons./health/ready/ — siap melayani; memverifikasi koneksi database dan Redis.Contoh cek cepat terhadap endpoint /health/ready/:
curl -f http://localhost:9000/health/ready/Pasang keduanya pada health check container dan probe load balancer. ready
adalah yang menentukan apakah sebuah replika boleh menerima trafik; live
hanya menandakan prosesnya belum mati.
Dengan arsitektur di atas, alur kegagalan menjadi sederhana:
Penting: uji skenario ini secara rutin. Failover yang tidak pernah dilatih sering berakhir sebagai failover yang gagal saat benar-benar dibutuhkan.
Berikut kerangka compose dengan dua replika server, satu worker, PostgreSQL,
dan Redis. Perhatikan bahwa setiap server memakai database dan Redis yang
sama, serta berbagi volume media:
services:
postgres:
image: docker.io/library/postgres:16-alpine
environment:
POSTGRES_USER: authentik
POSTGRES_PASSWORD: ${AUTHENTIK_PG_PASSWORD}
POSTGRES_DB: authentik
volumes:
- pg-data:/var/lib/postgresql/data
redis:
image: docker.io/library/redis:7-alpine
command: --appendonly yes
volumes:
- redis-data:/data
server-1:
image: ghcr.io/goauthentik/server:2025.6
command: server
environment:
AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY}
AUTHENTIK_POSTGRESQL__HOST: postgres
AUTHENTIK_POSTGRESQL__USER: authentik
AUTHENTIK_POSTGRESQL__PASSWORD: ${AUTHENTIK_PG_PASSWORD}
AUTHENTIK_REDIS__HOST: redis
volumes:
- media:/media
server-2:
image: ghcr.io/goauthentik/server:2025.6
command: server
environment:
AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY}
AUTHENTIK_POSTGRESQL__HOST: postgres
AUTHENTIK_POSTGRESQL__USER: authentik
AUTHENTIK_POSTGRESQL__PASSWORD: ${AUTHENTIK_PG_PASSWORD}
AUTHENTIK_REDIS__HOST: redis
volumes:
- media:/media
worker:
image: ghcr.io/goauthentik/server:2025.6
command: worker
environment:
AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY}
AUTHENTIK_POSTGRESQL__HOST: postgres
AUTHENTIK_POSTGRESQL__USER: authentik
AUTHENTIK_POSTGRESQL__PASSWORD: ${AUTHENTIK_PG_PASSWORD}
AUTHENTIK_REDIS__HOST: redis
volumes:
pg-data:
redis-data:
media:Pada penyebaran sungguhan, kedua replika biasanya berada di host berbeda (atau dikelola orkestrasi seperti Kubernetes — dibahas di episode 24), dan load balancer diletakkan di depan port 9000 kedua server.
Warning
HA menambah replika, bukan menggantikan backup. Tetap buat backup PostgreSQL secara rutin dan uji pemulihannya. Replika melindungi dari kegagalan perangkat; backup melindungi dari kesalahan manusia dan korupsi data — dua masalah yang berbeda.
Ringkasan episode 23:
/health/live/ dan /health/ready/ menjadi dasar keputusan
load balancer dan failover.Di episode 24, kita bawa pola ini ke skala yang lebih terkelola: deployment Kubernetes dengan Helm chart, replika yang diatur orkestrator, dan storage persisten. Sampai jumpa!