Troubleshooting

Cara Mengatasi Cluster Status Red

Status red berarti satu atau lebih primary shard hilang atau belum teralokasi — sebagian data Anda tidak tersedia. Ini situasi serius. Panduan ini membahas penyebab, diagnosis presisi, dan jalur pemulihan dari yang paling aman hingga upaya terakhir yang berisiko kehilangan data.

Apa Arti Status Red?

Setiap index dibagi menjadi shard. Tiap shard punya satu primary dan nol atau lebih replica. Selama primary aktif, data shard bisa dibaca dan ditulis. Jika primary suatu shard hilang dan tidak ada salinan yang bisa dipromosikan, shard tersebut unassigned dan cluster menjadi red.

Penting: hanya index yang kehilangan primary yang terganggu. Index lain mungkin tetap green. Selalu periksa per index agar tahu cakupan dampak.

Penyebab Umum

Node mati permanen

Node yang menyimpan satu-satunya salinan shard (mis. index dengan 0 replica) mati atau hilang dari cluster.

Korupsi shard / disk

Korupsi file segmen Lucene akibat crash mendadak atau kerusakan disk membuat shard gagal dibuka.

Disk penuh (flood stage)

Disk melewati flood stage 95% sehingga pemulihan shard terhenti dan primary baru gagal dialokasikan.

Restart cluster parsial

Saat full restart, jika tidak menunggu semua master/data node bergabung, sebagian primary bisa sementara red.

Langkah 1 — Konfirmasi & Lokalisasi

# status keseluruhan
GET /_cluster/health?pretty

# status per index untuk tahu mana yang red
GET /_cluster/health?level=indices&pretty

Contoh keluaran red:

{
  "status": "red",
  "active_primary_shards": 10,
  "unassigned_shards": 2,
  "indices": {
    "orders": { "status": "red", "active_shards": 0, "unassigned_shards": 1 }
  }
}
# cari primary yang UNASSIGNED
GET /_cat/shards?v&h=index,shard,prirep,state,unassigned.reason | grep UNASSIGNED

Langkah 2 — Jelaskan Kegagalan Alokasi

GET /_cluster/allocation/explain
{
  "index": "orders",
  "shard": 0,
  "primary": true
}

Contoh saat node hilang:

{
  "index": "orders",
  "shard": 0,
  "primary": true,
  "current_state": "unassigned",
  "unassigned_info": {
    "reason": "NODE_LEFT",
    "details": "node_left [a1B2c3D4]"
  },
  "can_allocate": "no_valid_shard_copy",
  "allocate_explanation": "cannot allocate because all found copies of the shard are either stale or corrupt"
}
PenjelasanTindakan yang tepat
NODE_LEFT + node bisa kembaliHidupkan node — shard pulih otomatis.
no_valid_shard_copyRestore snapshot, atau allocate_stale/empty (upaya terakhir).
Disk flood stageBebaskan disk lalu reroute?retry_failed=true.
ALLOCATION_FAILEDPeriksa log node, lalu retry reroute.

Langkah 3 — Pemulihan (dari Paling Aman)

  1. Hidupkan kembali node yang mati

    Cara teraman. Begitu node penyimpan primary bergabung lagi, Elasticsearch memulihkan shard tanpa kehilangan data. Cek dengan GET /_cat/nodes?v.

  2. Bebaskan disk bila flood stage

    Hapus index lama / snapshot, lalu reset blokir read-only dan retry: POST /_cluster/reroute?retry_failed=true.

  3. Restore dari snapshot

    Bila node tidak bisa kembali dan salinan rusak, restore index dari snapshot terbaru.

  4. Reroute paksa (upaya terakhir)

    Hanya jika tidak ada snapshot dan node tidak akan kembali. Berisiko kehilangan data.

Restore snapshot

# tutup/hapus index red dulu bila perlu, lalu restore
POST /_snapshot/repo_s3/snap_2026_06_20/_restore
{
  "indices": "orders",
  "rename_pattern": "orders",
  "rename_replacement": "orders-restored"
}

Upaya Terakhir: Reroute Paksa

Peringatan kehilangan data. Perintah berikut dapat menghapus dokumen yang belum tersalin. Pakai hanya bila Anda sudah pasti tidak ada node yang bisa kembali dan tidak ada snapshot. Backup direktori data node dulu bila memungkinkan.
# promosikan salinan basi jadi primary (kehilangan tulisan terbaru)
POST /_cluster/reroute
{
  "commands": [{
    "allocate_stale_primary": {
      "index": "orders", "shard": 0,
      "node": "es-02",
      "accept_data_loss": true
    }
  }]
}
# buat shard kosong baru (SELURUH data shard ini HILANG)
POST /_cluster/reroute
{
  "commands": [{
    "allocate_empty_primary": {
      "index": "orders", "shard": 0,
      "node": "es-02",
      "accept_data_loss": true
    }
  }]
}
allocate_stale_primary mempertahankan data lama (kehilangan hanya tulisan terbaru). allocate_empty_primary membuang seluruh isi shard — gunakan hanya agar cluster kembali operasional saat data shard itu memang sudah tak terselamatkan.

Pencegahan

  • Selalu jalankan minimal 1 replica untuk index penting agar kehilangan satu node tidak langsung red.
  • Jadwalkan snapshot rutin ke S3/R2 — ini jaring pengaman utama melawan red permanen.
  • Pantau disk agar tidak menyentuh flood stage 95% yang menghentikan pemulihan.
  • Gunakan dedicated master node dan jumlah master ganjil untuk mencegah split-brain saat restart.

FAQ Cluster Status Red

Apa bedanya status red dengan yellow?

Yellow berarti semua primary shard aktif (data utuh) tetapi sebagian replica belum teralokasi. Red berarti ada primary shard yang hilang atau belum teralokasi, sehingga sebagian data benar-benar tidak tersedia untuk dibaca maupun ditulis. Red adalah kondisi serius yang menuntut tindakan segera.

Apakah status red berarti data saya hilang permanen?

Belum tentu. Sering kali primary hanya tidak tersedia sementara karena node mati atau allocation diblokir. Jika node bisa dihidupkan kembali atau snapshot tersedia, data dapat dipulihkan utuh. Kehilangan permanen baru terjadi bila semua salinan shard rusak/hilang dan tidak ada snapshot.

Apa itu allocate_stale_primary dan kapan dipakai?

Itu perintah reroute yang memaksa Elasticsearch mengaktifkan salinan primary yang basi (stale) ketika salinan terbaru hilang permanen. Ini upaya terakhir dan berisiko kehilangan data terbaru yang belum sempat tersalin. Gunakan hanya jika node asli tidak mungkin kembali dan tidak ada snapshot.

Bagaimana cara tercepat memulihkan cluster red?

Urutan terbaik: (1) hidupkan kembali node yang mati agar shard pulih otomatis, (2) jika tidak bisa, restore dari snapshot terbaru, (3) jalankan reroute retry_failed, (4) sebagai upaya terakhir gunakan allocate_stale_primary atau allocate_empty_primary dengan kesadaran risiko kehilangan data.

Lindungi diri dengan snapshot rutin

Restore snapshot adalah cara paling aman keluar dari status red. Siapkan backup snapshot otomatis ke storage S3-compatible.

Panduan Snapshot ke S3