Membangun cluster Keycloak dengan banyak instance, cache terdistribusi Infinispan, shared database, load balancing dengan health checks, hingga pengujian failover untuk mencapai high availability.

Di episode 26 kalian mengelola klien dalam jumlah besar. Episode 27 ini menyelesaikan pertanyaan terakhir sebelum production: bagaimana kalau satu server mati? High availability (HA) & clustering memastikan layanan autentikasi tetap berjalan meski satu node turun. Ini materi yang membedakan setup lab dari deployment yang benar-benar dipakai pengguna.
Keycloak dirancang untuk berjalan sebagai cluster: beberapa instance Keycloak berbagi satu database, saling berbagi cache, dan dilayani lewat satu pintu masuk. Konsep dasarnya:
Mengapa tidak cukup satu node? Karena satu instance adalah single point of failure: apapun penyebabnya — crash, pemeliharaan, atau jaringan — seluruh login terhenti. Perbandingan topologi yang umum:
| Topologi | Kelebihan | Kekurangan | Kapan dipakai |
|---|---|---|---|
| Single node | Paling sederhana | Single point of failure | Development, beban kecil |
| Active-passive | Failover murah | Kapasitas node siaga terbuang | Anggaran terbatas, RTO longgar |
| Active-active | Skalabel dan tahan gagal | Kompleksitas cluster lebih tinggi | Production dengan SLA ketat |
Memulai cluster Keycloak berarti menjalankan instance identik yang saling mengenal. Langkah wajibnya:
KC_CACHE_STACK menentukan metode penemuan sesuai lingkungan.Setiap lingkungan punya cara yang berbeda untuk membuat node saling mengenal. Di AWS, gunakan stack ec2 yang memakai penemuan berbasis S3:
kc.sh start --cache-stack ec2KC_CACHE_STACK=ec2 mengonfigurasi JGroups agar node di region yang sama saling menemukan dan membentuk cluster otomatis. Di Kubernetes, gunakan stack kubernetes yang memanfaatkan DNS-based discovery. Di jaringan datacenter biasa, mode default berbasis multicast biasanya sudah cukup. Pilih stack sesuai tempat Keycloak berjalan — jangan memaksakan metode AWS di lingkungan lain.
Di depan cluster dipasang load balancer. Dua keputusan penting:
/health/ready (kesiapan melayani), /health/live (proses hidup), dan /health/started (startup selesai). Node yang tidak sehat harus dikeluarkan dari rotasi.Contoh konfigurasi NGINX:
upstream keycloak {
server kc-01.example.com:8080;
server kc-02.example.com:8080;
}
server {
listen 443 ssl;
server_name sso.example.com;
location / {
proxy_pass http://keycloak;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Header proxy — X-Forwarded-For dan X-Forwarded-Proto — harus diteruskan dengan benar, karena Keycloak memakainya untuk membangun URL dan memproses IP (ingat episode 24). SSL termination di load balancer juga umum: Keycloak melihat koneksi plaintext dari proxy, sehingga pastikan --proxy-headers sudah diatur agar tautan HTTPS tetap benar.
Database adalah titik paling sensitif di cluster:
Ingat dari episode 28 yang akan datang: semakin besar beban, semakin besar pula peran tuning database pool dan cache. Clustering menambah node, tetapi database tetap satu — ia yang paling sering menjadi bottleneck sebenarnya.
Database yang dipakai semua node juga perlu perhatian pada connection timeout dan koneksi idle: node yang sedang diam tetap memegang koneksi dari pool. Atur masa hidup koneksi dan batas idle agar node yang baru bergabung tidak kesulitan mendapat slot di tengah lonjakan.
Cluster yang tidak diuji bukan high availability. Rutinitas wajib:
Important
Clustering tanpa pengujian failover hanyalah konfigurasi yang terlihat rapi. Jadwalkan uji kegagalan secara berkala — node yang lama tidak diuji sering menyimpan kejutan saat benar-benar dibutuhkan.
Episode 27 membawa Keycloak ke arsitektur enterprise: active-active clustering dengan Infinispan sebagai distributed cache, shared database, discovery antar node lewat KC_CACHE_STACK, load balancing dengan health checks, pertimbangan database, dan pengujian failover yang rutin.
Inti yang harus dibawa pulang:
/health/ready dipakai untuk keputusan routing.Di episode 28 berikutnya, kalian mengoptimalkan kinerja cluster tersebut: performance tuning & monitoring — dari JVM, cache, hingga metrik Prometheus dan dashboard Grafana.