Membesarkan cluster dengan benar: scaling horizontal dengan menambah node, strategi alokasi shard, ukuran shard ideal 10–50 GB, arsitektur hot-warm-cold, kapan scale up vs scale out, serta pertimbangan storage SSD vs HDD.

Data kalian tumbuh, lalu lintas pencarian naik, dan suatu hari node tunggal tidak mampu lagi. Pertanyaannya bukan apakah harus membesarkan, tapi bagaimana membesarkan tanpa downtime dan tanpa membuat performa justru lebih buruk. Scaling Elasticsearch bukan sekadar menambah mesin — ada seni dalam mengatur shard, tier, dan alokasi.
Episode 18 membahas scaling cluster: scaling horizontal dengan menambah node, strategi alokasi shard, ukuran shard ideal 10–50 GB, arsitektur hot-warm-cold (dari episode 10), kapan memilih scale up vs scale out, serta pertimbangan storage SSD vs HDD.
Elasticsearch dirancang untuk scale out: menambah node berarti menambah CPU, RAM, dan disk secara paralel, tanpa mengubah aplikasi. Saat node baru bergabung, Elasticsearch otomatis menyeimbangkan shard yang ada ke node baru.
GET /_cat/nodes?vPerhatikan kolom heap.percent, ram.percent, dan cpu — sesudah menambah node, pastikan beban tersebar merata. Jika satu node tetap jadi titik panas, kemungkinan ada masalah distribusi shard (atau hot spot karena routing).
Tip
Menambah node tidak selalu membuat cluster lebih cepat — dan bisa membuatnya lebih lambat jika pencarian harus menjangkau lebih banyak node untuk shard yang sama. Pencarian (search) menjalankan query ke semua shard; menambah node mempercepat jika bottleneck-nya CPU/memori, tapi menambah latency jika shard terlalu banyak untuk data yang sedikit.
Alokasi shard diatur oleh allocator Elasticsearch, dengan aturan yang bisa kalian kendalikan. Beberapa setting penting:
| Setting | Fungsi |
|---|---|
cluster.routing.allocation.enable | Aktifkan/nonaktifkan alokasi (berguna saat maintenance) |
cluster.routing.allocation.total_shards_per_node | Batas shard per node untuk mencegah overload |
cluster.routing.allocation.awareness.attributes | Alokasi sadar zona (misalnya availability zone) |
cluster.routing.allocation.disk.watermark | Ambang disk: low (85%), high (90%), flood (95%) |
PUT /_cluster/settings{
"persistent": {
"cluster.routing.allocation.disk.watermark.low": "80%",
"cluster.routing.allocation.disk.watermark.high": "85%",
"cluster.routing.allocation.disk.watermark.flood_stage": "90%"
}
}Disk watermark sangat penting: ketika disk node menyentuh ambang flood_stage, Elasticsearch menolak operasi tulis pada index di node itu demi mencegah disk penuh total. Ini pengaman yang harus kalian hormati, bukan lawan.
Aturan praktis yang wajib diingat: satu shard sebaiknya berukuran 10–50 GB, dengan target nyaman di kisaran 20–30 GB. Alasannya:
Perhitungan sederhana: jika total data 200 GB dengan 50 GB per shard, butuh 4 primary shards. Untuk 10 juta dokumen per hari sepanjang 30 hari, ukur estimasi dengan snapshot awal — jangan menebak.
GET /_cat/shards?v&h=index,prirep,store,docs&s=store:descKesalahan paling umum pemula: membuat 20 shards untuk data 2 GB, atau 2 shards untuk data 500 GB. Keduanya menyakitkan di lain waktu — ingat, jumlah primary shards tidak bisa diubah tanpa reindex.
Dari episode 10 kita tahu tier membedakan biaya storage. Di episode ini kita praktikkan pembagian node berdasarkan tier:
# node hot (node1)
node.roles: [data_hot, data_content]
node.attr.data_tier: hot
# node warm (node2)
node.roles: [data_warm]
node.attr.data_tier: warm
# node cold (node3)
node.roles: [data_cold]
node.attr.data_tier: coldDengan node yang tersegregasi per tier dan ILM policy (episode 10) yang memindahkan index antar tier, hardware dapat dibeli sesuai kebutuhan: SSD cepat untuk hot, HDD murah untuk cold. Ini bentuk scaling yang hemat biaya tanpa menambah total data.
Scale up (memperbesar satu node) dan scale out (menambah node) bukan kompetisi — keduanya punya tempat masing-masing:
| Kondisi | Pilih |
|---|---|
| Shard terlalu besar dan tidak bisa dipecah (cuma satu shard) | Scale up node pemilik shard |
| Bottleneck CPU/memori pada banyak node | Scale out dengan node baru |
| Data tumbuh, shard masih sehat ukurannya | Scale out |
| Perlu penyimpanan lebih besar untuk satu index kecil | Scale up |
Node utama hot menjadi titik panas | Scale out node hot |
Batas atas scale up nyata: heap maksimal 32 GB (episode 14), jadi di luar titik itu jalan satu-satunya adalah scale out. Strategi terbaik menggabungkan keduanya: scale up untuk kebutuhan per-node, scale out untuk kapasitas total.
Storage adalah keputusan paling memengaruhi performa. Aturan praktis:
Satu kebenaran penting: disk yang penuh jauh lebih berbahaya daripada disk yang lambat. Disk penuh membuat shard read-only dan menghentikan tulis. Pantau disk dengan serius (episode 21) sebelum performa jadi masalah.
Warning
Perhatikan sizing sebelum menambah node: jangan menambah node dengan spec jauh di bawah node lain — node lemah jadi bottleneck dan membuat rebalance tidak seimbang. Homogenkan spec dalam satu tier, dan tambahkan dalam kelipatan yang membuat distribusi shard merata.
Terlalu banyak shard untuk data sedikit. Overhead komunikasi naik — hitung dari 10–50 GB per shard.
Menambah node hanya karena "biar cepat". Jika bottleneck tidak di CPU/memori, node baru tidak membantu — ukur dulu (episode 21).
Semua node satu tier. Tidak ada penghematan storage — terapkan hot-warm-cold sesuai umur data.
Mengabaikan disk watermark. Tulis berhenti diam-diam saat flood — pantau disk dan atur alert.
Rebalance otomatis saat kritis. Matikan sementara alokasi saat melakukan operasi maintenance besar: cluster.routing.allocation.enable: none.
Di episode 18 kalian menguasai scaling cluster: horizontal scaling dengan menambah node dan rebalancing otomatis, strategi alokasi shard dengan disk watermark, ukuran shard ideal 10–50 GB, arsitektur hot-warm-cold dengan node per tier, keputusan scale up vs scale out, serta pilihan SSD vs HDD.
Inti yang harus dibawa pulang:
Cluster sudah besar — sekarang bagaimana membuatnya cepat dan hemat resource? Di episode 19 kita bahas performance optimization dan tuning: bulk indexing, refresh interval, translog, index sorting; optimasi search dengan caching, filter, routing; serta tuning JVM G1GC, disk I/O, dan thread pool. Sampai jumpa!