Melindungi Keycloak dari bencana dengan backup database dan konfigurasi, menyusun disaster recovery dengan target RTO dan RPO, serta menjalankan upgrade versi dan migrasi realm yang aman.

Di episode 28 kalian membuat cluster cepat dan terukur. Episode 29 ini menjawab pertanyaan yang paling jarang disukai tapi paling penting: bagaimana kalau semuanya hancur? Backup melindungi data; disaster recovery mengembalikan layanan; upgrade menjaga keamanan dan fitur. Tiga kemampuan ini adalah asuransi yang tidak boleh tidak dimiliki deployment production.
Keycloak menyimpan hampir semua hal penting di database. Tapi bukan hanya database yang harus di-backup:
| Komponen | Cara Backup | Catatan |
|---|---|---|
| Database | pg_dump untuk PostgreSQL | Data user, sesi, klien, realm |
| Konfigurasi realm | kc.sh export | Resources, policies, permissions |
| Themes kustom | version control + artifact | Themes tidak ada di database |
| Custom extensions | image container + source | Provider JAR harus ikut tersimpan |
| Secrets dan config | environment / vault | Jangan pernah masuk repo |
Backup database dilakukan dengan utilitas database asli:
pg_dump -h db.example.com -U keycloak -Fc keycloak > keycloak-$(date +%F).dumppg_dump -Fc menghasilkan archive binary yang mudah dipulihkan dan dikompresi. Simpan backup di lokasi terpisah — idealnya objek storage yang berada di region berbeda — dan otomatisasi dengan cron atau systemd timer. Backup yang hanya diingat oleh manusia pada akhirnya tidak pernah terjadi.
Prinsipnya sederhana: jika data hilang dan tidak bisa dibangun ulang, ia wajib di-backup. Themes dan extensions memang bisa dibangun ulang dari source, tetapi database dan konfigurasi realm tidak. Backup yang baik juga adalah backup yang pernah dipulihkan — jadwalkan uji restore berkala ke database kosong, lalu jalankan health check login agar kalian tahu file backup tidak korup.
Ekspor konfigurasi realm melengkapi backup database:
kc.sh export --dir /backup/keycloak-config --realm bankkc.sh export menggambarkan realm sebagai file — sangat berguna untuk memindahkan konfigurasi antar lingkungan (client policies dari episode 26, policies authorization dari episode 25) tanpa membawa data pengguna.
Backup tidak bernilai tanpa prosedur pemulihan yang teruji. Rancang disaster recovery plan dengan dua angka kunci:
| Target | Arti | Contoh |
|---|---|---|
| RTO (Recovery Time Objective) | waktu maksimum layanan pulih | 4 jam |
| RPO (Recovery Point Objective) | seberapa banyak data boleh hilang | 15 menit |
RPO menentukan frekuensi backup: RPO 15 menit berarti backup atau replikasi harus berjalan tiap 15 menit. RTO menentukan otomatisasi pemulihan: makin ketat RTO, makin banyak proses yang harus otomatis. Untuk multi-region, pertimbangkan replikasi database antar region dan DNS failover; tanpa itu, strategi yang realistis adalah backup dan restore ke region cadangan.
Multi-region menambah biaya dan kompleksitas replikasi. Untuk sebagian besar tim, strategi backup dan restore ke region cadangan sudah cukup — pastikan RTO-nya memenuhi janji SLA sebelum mengejar topologi multi-region penuh. RTO dan RPO juga bukan sekadar angka di dokumen: keduanya harus diuji, mulai dari angka realistis lalu diperketat seiring otomatisasi membaik.
Upgrade Keycloak adalah bagian dari siklus hidup, bukan peristiwa langka. Langkah amannya:
Contoh alur rolling upgrade:
# 1. Keluarkan node pertama dari rotasi load balancer
# 2. Jalankan image versi baru pada node tersebut
# 3. Tunggu /health/ready menandakan sehat
# 4. Masukkan kembali, lalu ulangi untuk node berikutnyaRolling upgrade menjaga SLA: selama ada satu node sehat, user tidak merasakan apa-apa. Khusus untuk database migration, jalankan satu node terlebih dahulu dan amati log sebelum node lain ikut naik versi.
Pilih jendela upgrade di jam sepi dan uji di tenant staging terlebih dahulu. Upgrade kecil dan rutin lebih aman daripada lonjakan besar yang jarang — semakin dekat versi kalian ke versi terakhir yang didukung, semakin kecil lompatan migrasi yang harus dihadapi.
Membawa konfigurasi antar realm atau lingkungan adalah pekerjaan sehari-hari:
kc.sh export dan kc.sh import memindahkan seluruh definisi realm: klien, users, groups, roles, policies, dan permissions. Impor ke lingkungan baru:kc.sh import --dir /backup/keycloak-configJangan lupa mem-backup konfigurasi deployment itu sendiri: nilai environment, compose file, dan file kustomisasi. Tanpa itu, restore database ke mesin baru tetap sulit karena lapisan luar yang mengelilingi Keycloak tidak lengkap.
Warning
Jangan pernah mengimpor konfigurasi production ke lingkungan yang sedang berjalan tanpa meninjau isinya. Export/import adalah alat transfer, bukan alat merger — konfigurasi yang ditimpa bisa menghapus pengaturan yang sudah di-tune.
Episode 29 melindungi deployment kalian: backup database dengan pg_dump, backup konfigurasi dengan kc.sh export, disaster recovery dengan target RTO dan RPO yang jelas, upgrade versi yang aman dengan backup dan rolling upgrade, serta migrasi realm antar lingkungan yang teruji.
Inti yang harus dibawa pulang:
Di episode 30 — episode terakhir — kalian merangkum semuanya: troubleshooting & best practices untuk menghadapi masalah nyata dan checklist lengkap sebelum meluncurkan Keycloak ke production.