Tools & Kalkulator

Kalkulator & Panduan Ukuran Shard

Memilih jumlah shard yang tepat menentukan performa, stabilitas, dan biaya cluster Elasticsearch Anda. Halaman ini menyajikan aturan praktis, rumus, serta tabel skenario nyata agar Anda bisa menghitung jumlah primary shard dan replica secara manual dengan percaya diri.

Aturan Praktis yang Wajib Diingat

Target 10-50 GB per shard

Jaga ukuran tiap shard di rentang ini. Untuk data umum, target sekitar 40 GB seimbang antara performa kueri dan kecepatan recovery.

Hindari shard terlalu kecil

Shard di bawah beberapa GB membuang memori. Tiap shard adalah instance Lucene dengan biaya overhead heap, file handle, dan thread tersendiri.

~20 shard per 1 GB heap

Batasi jumlah shard pada tiap node maksimal sekitar 20 shard untuk setiap 1 GB heap JVM. Node heap 30 GB → jaga di bawah ~600 shard.

Angka-angka ini adalah pedoman, bukan hukum mutlak. Selalu uji dengan beban kerja nyata Anda. Indeks time-series (log, metrik) cenderung memakai shard lebih besar; indeks pencarian latensi rendah cenderung lebih kecil.

Rumus Inti

Dua rumus berikut menjadi dasar semua perhitungan kapasitas shard.

1. Jumlah primary shard

primary_shards = ceil( perkiraan_total_data_primary / target_ukuran_per_shard )

2. Total shard & kebutuhan disk (dengan replica)

total_shards   = primary_shards × (1 + jumlah_replica)
total_disk     = perkiraan_total_data_primary × (1 + jumlah_replica)
Selalu hitung dengan perkiraan data masa depan, bukan hanya data hari ini. Jika data tumbuh 30% per tahun, masukkan pertumbuhan itu sebelum membagi.

Langkah Hitung Manual

  1. Perkirakan total ukuran data primary

    Misal indeks log akan menampung 300 GB data primary (belum termasuk replica). Tambahkan margin pertumbuhan bila perlu.

  2. Tetapkan target ukuran per shard

    Pilih 40 GB sebagai target umum yang aman untuk data campuran.

  3. Bagi lalu bulatkan ke atas

    300 GB ÷ 40 GB = 7,5 → dibulatkan ke atas menjadi 8 primary shard. Ukuran efektif tiap shard = 300 / 8 = 37,5 GB (masih dalam rentang sehat).

  4. Tentukan jumlah replica

    Untuk HA produksi, pilih 1 replica. Total shard = 8 × 2 = 16 shard; kebutuhan disk = 300 GB × 2 = 600 GB.

  5. Cek terhadap kapasitas node

    Pastikan total shard di seluruh indeks tetap di bawah batas ~20 shard per 1 GB heap pada tiap node, dan disk per node tidak melewati watermark.

Tabel Skenario Perhitungan

Beberapa contoh nyata menggunakan rumus di atas. Kolom "ukuran/shard" adalah hasil aktual setelah pembulatan.

Total data primaryTarget/shardPrimary shardUkuran/shard aktualReplicaTotal shardTotal disk
50 GB40 GB225 GB14100 GB
120 GB40 GB340 GB16240 GB
300 GB40 GB837,5 GB116600 GB
500 GB50 GB1050 GB1201 TB
1 TB50 GB21~48,8 GB1422 TB
2 TB50 GB41~50 GB21236 TB
Pada skenario 2 TB dengan 2 replica, kebutuhan disk membengkak menjadi 6 TB (3x data). Replica berlipat memang memberi HA lebih kuat dan throughput baca lebih tinggi, tetapi biaya penyimpanan ikut naik linier.

Over-Sharding vs Under-Sharding

Over-sharding (terlalu banyak)

  • Setiap shard memakan heap, file handle, dan thread — ribuan shard kecil membebani master node.
  • Cluster state membengkak, rebalancing lambat, dan kueri tersebar ke terlalu banyak segmen kecil.
  • Gejala: heap tinggi, banyak indeks mungil, status sering yellow.

Under-sharding (terlalu sedikit)

  • Shard raksasa (di atas 50 GB) lambat di-recovery dan sulit dipindah saat rebalancing.
  • Paralelisme kueri terbatas karena tiap shard hanya bisa diproses satu thread per kueri.
  • Gejala: indeks tunggal berukuran ratusan GB dengan 1 primary shard, latensi tulis/baca tinggi.

Cara Mengecek Shard yang Berjalan

Gunakan _cat API untuk inspeksi cepat dari panel nusabet88 atau terminal.

# daftar semua shard: ukuran, status, node penampung
GET /_cat/shards?v&h=index,shard,prirep,state,docs,store,node&s=store:desc

# distribusi disk & jumlah shard per node
GET /_cat/allocation?v

# ringkasan ukuran per indeks
GET /_cat/indices?v&s=store.size:desc

# jumlah total shard di cluster
GET /_cluster/health?level=shards
Kolom prirep bernilai p untuk primary dan r untuk replica. Kolom store menunjukkan ukuran disk shard — ini angka yang Anda cocokkan dengan target 10-50 GB.

ILM & Rollover untuk Data Time-Series

Untuk log dan metrik yang terus bertambah, jangan tebak ukuran indeks di awal. Biarkan ILM (Index Lifecycle Management) dan rollover menjaga ukuran shard otomatis.

  • Rollover berbasis ukuran: buat indeks baru ketika shard utama mencapai ambang, mis. max_primary_shard_size: 50gb atau max_age: 1d.
  • Satu primary shard per indeks rollover sering cukup untuk volume sedang — rollover yang menambah jumlah indeks, bukan ukuran tiap shard.
  • Gunakan alias tulis sehingga aplikasi selalu menulis ke alias dan rollover berpindah indeks secara transparan.
  • Fase ILM: hot → warm → cold → delete. Pada fase warm/cold Anda bisa shrink dan force-merge untuk menghemat sumber daya.
  • Targetkan 10-50 GB per shard; gunakan 40 GB sebagai titik awal yang aman.
  • primary_shards = ceil(total data / target ukuran shard), selalu sertakan pertumbuhan.
  • Replica menambah HA dan throughput baca, tetapi melipatgandakan kebutuhan disk.
  • Jaga total shard di bawah ~20 per 1 GB heap; pantau via /_cat/shards dan /_cat/allocation.
  • Untuk data time-series, serahkan ukuran shard ke ILM + rollover, bukan tebakan manual.

FAQ Ukuran & Jumlah Shard

Berapa ukuran shard yang ideal di Elasticsearch?

Aturan praktis yang aman adalah menjaga ukuran setiap shard antara 10 GB dan 50 GB. Untuk indeks log yang dikelola dengan ILM, banyak tim menargetkan sekitar 30-50 GB per shard. Hindari shard yang terlalu kecil (di bawah beberapa GB) karena menambah overhead, dan shard yang terlalu besar (di atas 50 GB) karena memperlambat recovery dan rebalancing.

Bagaimana rumus menghitung jumlah primary shard?

Jumlah primary shard = perkiraan total ukuran data primary dibagi target ukuran per shard, dibulatkan ke atas. Contoh: 300 GB data dengan target 40 GB per shard menghasilkan 300 / 40 = 7,5 yang dibulatkan menjadi 8 primary shard. Selalu perhitungkan pertumbuhan data ke depan.

Apakah replica dihitung sebagai shard juga?

Ya. Total shard = primary x (1 + jumlah replica). Indeks dengan 8 primary dan 1 replica memakai 16 shard total dan kira-kira dua kali ruang disk. Replica meningkatkan ketersediaan (HA) serta throughput baca, tetapi tidak menambah throughput tulis.

Apa batas jumlah shard per node?

Aturan praktis lama: jaga jumlah shard di bawah sekitar 20 shard per 1 GB heap JVM pada tiap node. Node dengan heap 30 GB sebaiknya tidak melebihi sekitar 600 shard. Sejak versi 7.x ada batas lunak 1.000 shard per node (cluster.max_shards_per_node) yang bisa dinaikkan, tetapi sebaiknya tetap konservatif.

Bagaimana cara mengecek jumlah dan ukuran shard saat ini?

Gunakan endpoint _cat. Jalankan GET /_cat/shards?v untuk melihat daftar shard beserta ukuran dan node-nya, dan GET /_cat/allocation?v untuk melihat distribusi disk per node. Untuk indeks tertentu pakai GET /_cat/shards/nama-indeks?v.

Siapkan Cluster untuk Produksi

Setelah menentukan jumlah shard yang tepat, periksa kesiapan menyeluruh cluster Anda dengan checklist produksi lengkap.

Buka Checklist Produksi