Troubleshooting

Cara Mengatasi Cluster Status Yellow

Status yellow adalah peringatan paling umum di Elasticsearch. Artinya semua data masih aman dan bisa diakses, tetapi sebagian replica shard belum teralokasi sehingga cluster kehilangan redundansi. Panduan ini membahas arti yellow, penyebab, langkah diagnosis, dan solusinya melalui nusabet88.

Apa Arti Status Yellow?

Elasticsearch memakai tiga warna kesehatan cluster: green, yellow, dan red. Warna ditentukan oleh kondisi shard.

StatusPrimary shardReplica shardDampak
GreenSemua aktifSemua aktifSehat penuh, redundansi terjaga.
YellowSemua aktifSebagian/seluruhnya unassignedData utuh & bisa diakses, tetapi tanpa salinan cadangan.
RedAda yang hilangSebagian data tidak tersedia.
Yellow berarti primary aman. Yang belum teralokasi hanyalah replica — salinan untuk ketahanan dan distribusi beban baca. Tidak ada data yang hilang pada status yellow.

Penyebab Umum

Cluster single node

Penyebab paling sering. Elasticsearch menolak menaruh replica di node yang sama dengan primary, jadi pada satu node semua replica pasti unassigned.

Disk melewati watermark

Jika disk node melewati high watermark (default 90%), alokasi shard baru ke node tersebut diblokir sehingga replica gantung.

Allocation dinonaktifkan

Setelah maintenance, cluster.routing.allocation.enable kadang tertinggal di none atau primaries, sehingga replica tak pernah dialokasikan.

Replica > node tersedia

Menyetel number_of_replicas lebih besar dari jumlah data node yang tersedia membuat sebagian replica tidak punya tempat.

Langkah 1 — Diagnosis Kesehatan

Mulai dari ringkasan cluster. Jalankan perintah ini di konsol REST nusabet88.

# ringkasan kesehatan cluster
GET /_cluster/health?pretty

Contoh keluaran saat yellow:

{
  "cluster_name": "nusabet-prod",
  "status": "yellow",
  "number_of_nodes": 1,
  "number_of_data_nodes": 1,
  "active_primary_shards": 12,
  "active_shards": 12,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 12,
  "active_shards_percent_as_number": 50.0
}
Untuk melihat status per index, gunakan GET /_cluster/health?level=indices&pretty agar tahu index mana yang yellow.

Langkah 2 — Temukan Shard Bermasalah

# daftar shard + alasan unassigned
GET /_cat/shards?v&h=index,shard,prirep,state,node,unassigned.reason

Contoh keluaran:

index        shard prirep state      node    unassigned.reason
logs-2026.06 0     p      STARTED    es-01
logs-2026.06 0     r      UNASSIGNED         INDEX_CREATED
orders       0     p      STARTED    es-01
orders       0     r      UNASSIGNED         CLUSTER_RECOVERED
unassigned.reasonArti
INDEX_CREATEDIndex baru dibuat, replica belum dapat node.
CLUSTER_RECOVEREDCluster baru restart, replica belum pulih.
NODE_LEFTNode penyimpan shard meninggalkan cluster.
ALLOCATION_FAILEDPercobaan alokasi gagal (cek allocation explain).
NODE_LEFT / diskTersangkut watermark disk pada node tujuan.

Langkah 3 — Cari Akar Masalah

Perintah allocation/explain memberi penjelasan paling presisi kenapa sebuah shard tidak bisa dialokasikan.

# penjelasan shard unassigned pertama yang ditemukan
GET /_cluster/allocation/explain
{
  "index": "orders",
  "shard": 0,
  "primary": false
}

Contoh penjelasan untuk single node:

{
  "can_allocate": "no",
  "allocate_explanation": "cannot allocate because allocation is not permitted to any of the nodes",
  "node_allocation_decisions": [{
    "node_name": "es-01",
    "deciders": [{
      "decider": "same_shard",
      "decision": "NO",
      "explanation": "a copy of this shard is already allocated to this node"
    }]
  }]
}
Decider same_shard NO mengonfirmasi penyebab single node: tidak ada node lain untuk menampung replica.

Langkah 4 — Solusi per Penyebab

A. Single node (dev) — set replica ke 0

# hapus replica untuk seluruh index
PUT /_all/_settings
{ "index": { "number_of_replicas": 0 } }

# atau jadikan default untuk index baru via template
PUT /_index_template/single-node
{
  "index_patterns": ["*"],
  "template": { "settings": { "number_of_replicas": 0 } }
}

B. Produksi — tambah data node

Cara terbaik di produksi: tambahkan satu atau lebih data node. Begitu node baru bergabung, Elasticsearch otomatis mengalokasikan replica dan status berubah ke green tanpa intervensi.

C. Allocation dinonaktifkan — aktifkan kembali

# cek nilai sekarang
GET /_cluster/settings?include_defaults=true&filter_path=**.allocation.enable

# aktifkan alokasi semua shard
PUT /_cluster/settings
{ "transient": { "cluster.routing.allocation.enable": "all" } }

D. Retry alokasi yang gagal

# paksa coba ulang shard ALLOCATION_FAILED
POST /_cluster/reroute?retry_failed=true
Jika penyebabnya disk penuh, jangan paksa reroute. Bebaskan disk dulu (lihat panduan Disk Watermark) agar replica punya ruang.

Pencegahan

  • Sesuaikan number_of_replicas dengan jumlah data node: replica = node - 1 untuk redundansi penuh tanpa shard gantung.
  • Pantau disk agar tidak menyentuh high watermark 90% yang memblokir alokasi.
  • Setelah maintenance, selalu kembalikan cluster.routing.allocation.enable ke all.
  • Pasang pemantauan status cluster agar yellow berkepanjangan segera terdeteksi sebelum berisiko ke data.

FAQ Cluster Status Yellow

Apakah cluster status yellow berbahaya?

Tidak langsung berbahaya. Status yellow berarti semua primary shard aktif sehingga data utuh dan dapat dibaca/ditulis, tetapi sebagian replica shard belum teralokasi. Risikonya adalah ketahanan (resilience): jika node yang menyimpan primary mati saat status yellow, data shard tersebut bisa hilang karena tidak ada salinan.

Kenapa cluster single node selalu yellow?

Karena Elasticsearch tidak pernah menempatkan replica shard pada node yang sama dengan primary-nya. Pada cluster satu node, semua replica otomatis unassigned sehingga status tetap yellow. Solusinya tambah node, atau set number_of_replicas menjadi 0 untuk lingkungan dev/single node.

Bagaimana cara cepat tahu shard mana yang bermasalah?

Jalankan GET /_cat/shards?v&h=index,shard,prirep,state,unassigned.reason lalu cari baris dengan state UNASSIGNED. Untuk akar masalahnya gunakan GET /_cluster/allocation/explain yang menjelaskan persis kenapa shard tidak bisa dialokasikan.

Apakah aman menurunkan number_of_replicas ke 0?

Aman untuk lingkungan development atau single node, tetapi tidak disarankan untuk produksi karena Anda kehilangan redundansi. Di produksi sebaiknya tambah data node agar replica bisa dialokasikan ke node berbeda.

Disk Anda penuh dan memblokir alokasi?

Status yellow sering dipicu disk yang melewati watermark. Pelajari cara mengatasi disk watermark dan flood stage agar shard kembali teralokasi.

Panduan Disk Watermark