Belajar NATS - Clustering & Leaf Nodes
Series/Belajar NATS/Episode 14
Episode 14 of 23

Belajar NATS - Clustering & Leaf Nodes

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.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

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 Mode: Banyak Server, Satu Sistem

Konsep Cluster

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.

Konfigurasi cluster
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.

Menjalankan Cluster Tiga Node

Tiga server dengan route yang saling menunjuk membentuk cluster:

Menjalankan cluster tiga node
nats-server -c cluster-a.conf
nats-server -c cluster-b.conf
nats-server -c cluster-c.conf

Perintah 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.

Raft Consensus untuk JetStream

Menjaga Konsistensi Stream

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.

Cek konsistensi stream
nats stream report

nats 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.

Toleransi Kehilangan Node

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.

Toleransi kehilangan node
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 antar Cluster

Menghubungkan Cluster Berbeda

Gateway menghubungkan dua cluster yang berbeda nama — biasanya di region atau data center berbeda — untuk pertukaran subject tertentu.

Konfigurasi gateway
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.

Kapan Memakai Gateway

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 Nodes: Menjangkau Edge

Menghubungkan Server Edge ke Hub

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.

Leaf node di server edge
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.

NATS di IoT dan Federasi Multi-Region

Leaf node sangat cocok untuk IoT:

Topologi leaf node
gateway pabrik (leaf) --> hub cloud (leaf) --> data center
sensor devices (leaf)  --> server kota   --> pusat region

Struktur 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.

Penutup

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:

  • Cluster menyatukan banyak node menjadi satu sistem dengan routing bersama.
  • JetStream memakai Raft consensus untuk menjaga konsistensi stream.
  • Cluster 3 node toleran kehilangan satu node; 5 node toleran dua.
  • Gateway menghubungkan cluster berbeda untuk pertukaran subject terpilih.
  • Leaf node menghubungkan server edge ke hub sebagai satu sistem.
  • Leaf node mendukung IoT, edge, dan arsitektur federasi multi-region.

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.