Episode ini membahas high availability DNS: redundant authoritative dengan hidden primary dan secondary publik, distribusi geografis dan NOTIFY yang handal, serta multi-instance recursor di belakang dnsdist, dengan ECMP dan anycast untuk skala besar dan disaster recovery.

Satu server DNS yang down bisa membuat seluruh layanan terasa mati, padahal aplikasi kalian sehat. High availability DNS memastikan bahwa tidak ada satu titik kegagalan: setiap peran dijalankan oleh lebih dari satu instance, dan ketika satu mati, yang lain langsung mengambil alih.
Episode 18 membahas pola redundansi untuk ketiga daemon: authoritative dengan hidden primary dan secondary publik, recursor berlapis di belakang dnsdist, serta teknik anycast untuk skala dan ketahanan global.
Pola paling umum dalam produksi: hidden primary yang menulis data (tidak menjawab query publik), dan beberapa secondary publik yang menyimpan salinan dan melayani semua klien. Jika secondary rusak, yang lain tetap melayani; jika primary rusak, secondary tetap menjawab dari salinan terakhir.
hidden primary (menulis data)
| NOTIFY + AXFR
secondary A (publik) secondary B (publik)
\ /
klien memakai NS A dan NS BPrimary disembunyikan dari catatan NS dan firewall klien. Semua perubahan dilakukan di primary, lalu disebar ke secondary yang tercantum di NS zone.
Secondary sebaiknya tersebar di beberapa lokasi dan AS (Autonomous System). Dengan begitu, gangguan satu penyedia layanan tidak melumpuhkan resolusi di tempat lain. Pemilihan lokasi didasarkan pada posisi klien mayoritas dan jalur koneksi antar data center.
Agar perubahan cepat sampai, secondary tidak boleh bergantung hanya pada interval refresh:
also-notify=192.0.2.21,192.0.2.22,2001:db8::21also-notify menampung semua alamat secondary. Setiap perubahan serial langsung memicu NOTIFY ke seluruh daftar, mempercepat sinkronisasi dari menit menjadi detik.
Recursor harus dijalankan minimal dua instance, dan semua instance disatukan di belakang dnsdist. Jika satu recursor down, dnsdist mengarahkan beban ke yang tersisa:
newServer({ address="192.0.2.31:53", name="rec-1" })
newServer({ address="192.0.2.32:53", name="rec-2" })
setServerPolicy(leastOutstanding)setServerPolicy(leastOutstanding) membagi beban ke dua recursor sekaligus menjaga keseimbangan saat salah satunya melambat.
Untuk skala lebih besar, ECMP (Equal-Cost Multi-Path) membagi lalu lintas router ke beberapa dnsdist di alamat yang sama. Anycast mempublikasikan alamat yang sama dari banyak lokasi: klien otomatis menuju instance terdekat, dan ketika satu lokasi mati, rute dialihkan ke lokasi lain.
ip route showPada setup anycast, alamat DNS yang sama muncul dari beberapa titik. Perutean global menyalurkan klien ke instance terdekat dan paling sehat — redundansi tanpa perubahan apa pun di sisi klien.
Rencana pemulihan harus tertulis dan teruji. Prinsip dasarnya:
NATIVE.sudo systemctl stop pdns
dig @192.0.2.21 example.com SOA +short
dig @192.0.2.22 example.com SOA +shortJika kedua secondary masih menjawab dengan flag aa, kalian baru saja membuktikan bahwa klien tidak merasakan apa pun saat primary mati.
Gabungkan semua pola menjadi satu arsitektur yang utuh:
hidden primary
-> secondary A (site 1) -> NS publik
-> secondary B (site 2)
dnsdist (anycast, site 1) -> rec-1, rec-2
dnsdist (anycast, site 2) -> rec-3, rec-4Semua peran redundant, tidak ada satu titik kegagalan, dan klien tidak perlu tahu perubahan apa pun. Arsitektur seperti ini menjadi fondasi yang akan kita bangun penuh di episode 21.
Episode 18 membuat infrastruktur DNS kalian kebal terhadap kegagalan tunggal: hidden primary dengan secondary publik yang tersebar geografis, recursor berlapis di belakang dnsdist, dan anycast untuk skala global.
Inti yang harus dibawa pulang:
also-notify mempercepat sinkronisasi ke semua secondary sekaligus.Di episode 19 selanjutnya kita akan membahas performance tuning dan observability — tuning cache packet dan record, jumlah threads, cache-ttl dan negative-cache-ttl, tuning LMDB, serta observability modern dengan structured logging, OpenTelemetry tracing, endpoint Prometheus, dan webserver API stats.