Episode ini membahas mode cluster multi-server dengan Raft consensus untuk JetStream dan gateway antar cluster, toleransi kehilangan node, lalu leaf nodes untuk menghubungkan server edge ke hub dalam skenario IoT, edge, dan federasi multi-region.

Sampai episode 13, kalian menjalankan satu server. Episode 14 ini melebarkan sayap: clustering untuk ketersediaan tinggi dan leaf nodes untuk menjangkau edge dan multi-region. Inilah saat NATS berubah dari sistem di satu mesin menjadi infrastruktur terdistribusi.
Kita akan membahas cluster mode dan Raft consensus untuk JetStream, gateway antar cluster, toleransi node loss, lalu leaf nodes untuk skenario IoT, edge, dan federasi multi-region.
Cluster adalah sekelompok server NATS yang saling terhubung dan berbagi routing subject. Client bisa terhubung ke server mana pun — pesan mengalir otomatis menuju server yang tepat.
cluster {
name: "nats-prod"
listen: "0.0.0.0:6222"
routes: ["nats-route://nats-a:6222", "nats-route://nats-b:6222"]
}Blok cluster mendefinisikan nama cluster, port route 6222 untuk komunikasi antar server, dan daftar route. Server yang membawa daftar route yang sama otomatis membentuk cluster. Port 4222 tetap untuk client, 6222 untuk gossip antar server.
Tiga server dengan route yang saling menunjuk membentuk cluster:
nats-server -c cluster-a.conf
nats-server -c cluster-b.conf
nats-server -c cluster-c.confPerintah nats-server -c cluster-a.conf dan dua lainnya memulai tiga node. Client cukup terhubung ke salah satunya — NATS menangani routing lintas node secara transparan.
JetStream di cluster memakai Raft consensus untuk memastikan semua salinan stream konsisten. Ketika pesan dipublish dengan replicas 3, server membentuk Raft group yang memilih leader untuk setiap stream.
nats stream reportnats stream report menampilkan status replikasi setiap stream. Kolom Replicas menunjukkan salinan aktif, dan Cluster menunjukkan apakah stream sehat. Konsensus Raft memastikan hanya satu leader yang menulis, follower mengikuti.
Cluster dengan tiga node dapat kehilangan satu node dan tetap beroperasi; cluster lima node dapat kehilangan dua. Aturan umum: toleransi = (jumlah node - 1) / 2 untuk jumlah ganjil.
3 node -> toleransi 1 node mati
5 node -> toleransi 2 node mati
4 node -> toleransi 1 node mati (lebih mahal, tanpa manfaat)Skema 5 node -> toleransi 2 node mati menjelaskan mengapa jumlah node ganjil lebih efisien: node keempat hanya menambah biaya tanpa menambah toleransi. Saat leader mati, Raft memilih leader baru secara otomatis.
Gateway menghubungkan dua cluster yang berbeda nama — biasanya di region atau data center berbeda — untuk pertukaran subject tertentu.
gateway {
name: "region-a"
listen: "0.0.0.0:7222"
gateways: [
{ name: "region-b", urls: ["nats-gw://gw-b:7222"] }
]
}Blok gateway menghubungkan cluster region-a ke region-b melalui port 7222. Berbeda dengan cluster yang menyatukan routing, gateway hanya meneruskan subject yang diizinkan — bagus untuk memisahkan beban dan menjaga isolasi antar region.
Gunakan gateway ketika kalian ingin berbagi pesan antar cluster yang otonom, misalnya event penting dari region satu ke region lain. Gunakan cluster ketika node-node harus berbagi stream dan state yang sama.
Info
Perbedaan kunci: cluster menyatukan node menjadi satu sistem dengan konsensus; gateway menjaga cluster tetap terpisah dan hanya meneruskan subject terpilih. Pilih sesuai kebutuhan keandalan dan isolasi.
Leaf node menghubungkan server NATS (misalnya di perangkat edge) ke server pusat seolah-olah mereka satu sistem. Subject lokal di server edge bisa diakses dari hub, dan sebaliknya.
leafnodes {
remotes: [
{ url: "nats-leaf://hub.internal:7422" }
]
}Blok leafnodes di server edge menghubungkannya ke server hub lewat port 7422. Leaf node tetap bisa jalan offline — pesan lokal diproses sendiri, dan saat koneksi pulih, pesan dipertukarkan.
Leaf node sangat cocok untuk IoT:
gateway pabrik (leaf) --> hub cloud (leaf) --> data center
sensor devices (leaf) --> server kota --> pusat regionStruktur sensor devices (leaf) menunjukkan perangkat edge melaporkan data ke server lokal, yang lalu diteruskan ke hub. Pola ini menghasilkan arsitektur federasi multi-region yang tangguh: data tetap diproses dekat sumber, dan sinkronisasi terjadi tanpa mengganggu latensi lokal.
Episode 14 membawa NATS ke skala terdistribusi: cluster multi-server dengan Raft consensus untuk JetStream, gateway untuk menghubungkan cluster antar region, toleransi kehilangan node yang ditentukan jumlah replika, serta leaf nodes untuk menjangkau edge, IoT, dan federasi multi-region.
Inti yang harus dibawa pulang:
Di episode 15 selanjutnya kita akan membahas integrasi & best practice — NATS sebagai broker MQTT untuk perangkat IoT lewat blok konfigurasi mqtt, lalu rangkuman subject naming convention, backpressure, timeouts, dan pola event-driven yang benar untuk microservices. Inilah jembatan menuju optimasi lanjutan.