Saat melakukan restart atau memperbarui kluster Elasticsearch, operasi tersebut dapat gagal dengan error berikut:
Operasi tidak dapat dilakukan karena kluster tidak sehat atau berisi indeks dalam status close. Kami menyarankan agar Anda mengulangi operasi setelah kluster menjadi sehat atau indeks diaktifkan kembali.
Error ini terjadi ketika kluster memenuhi satu atau beberapa kondisi berikut:
Kluster berisi indeks dalam status close.
Status kesehatan kluster adalah red atau yellow.
Kluster sehat tetapi heavily loaded.
Bagian berikut menjelaskan cara mendiagnosis dan mengatasi setiap kondisi tersebut.
Indeks yang ditutup (Closed indexes)
Indeks dalam status close akan menghalangi restart dan pembaruan kluster. Jalankan perintah berikut untuk memeriksa status indeks:
GET /_cat/indices?vContoh output:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size dataset.size
green open my-index-01 30h1EiMvS5uAFr2t5CEVoQ 5 1 820 0 14mb 7mb 7mb
close my-index-02 BJxfAErbTtu5HBjIXJV_7A 1 1
green open my-index-03 _8C6MIXOSxCqVYicH3jsEA 1 1 7 0 24.3kb 12.1kb 12.1kbPada contoh ini, my-index-02 berada dalam status close. Buka kembali indeks tersebut dengan perintah berikut:
POST /my-index-02/_openGanti my-index-02 dengan nama indeks yang ditutup. Jika terdapat beberapa indeks yang ditutup, buka masing-masing secara individual sebelum mencoba kembali operasi restart atau pembaruan.
Status kluster red atau yellow
Status red berarti satu atau lebih primary shard tidak ditugaskan (unassigned). Pencarian dan pengindeksan pada indeks yang terdampak mungkin gagal. Status yellow berarti semua primary shard telah ditugaskan, tetapi satu atau lebih replica shard tidak ditugaskan, sehingga meningkatkan risiko kehilangan data.
Mendiagnosis masalah
Periksa status kesehatan kluster:
GET /_cat/health?vJika statusnya red atau yellow, identifikasi shard yang tidak ditugaskan:
GET /_cat/shards?v&h=index,shard,prirep,state,node,unassigned.reason&s=stateUntuk memahami alasan spesifik mengapa suatu shard tidak dapat dialokasikan, jalankan:
GET _cluster/allocation/explainPerintah ini akan mengembalikan error jika tidak ada shard yang tidak ditugaskan di kluster. Hal ini merupakan perilaku yang diharapkan.
Contoh output:
{
"index": "my-index-02",
"shard": 0,
"primary": true,
"current_state": "unassigned",
"can_allocate": "no",
"allocate_explanation": "cannot allocate because allocation is not permitted to any of the nodes"
}Gunakan bidang allocate_explanation untuk mengidentifikasi akar penyebabnya. Bagian berikut mencakup penyebab umum beserta solusinya.
Retry alokasi shard telah habis
Shard dialokasikan secara otomatis dengan maksimal 5 kali retry. Jika seluruh retry telah habis, alokasikan ulang shard secara manual:
POST /_cluster/reroute?retry_failed=truePrimary dan replica shard berada di node yang sama
Jika penjelasan alokasi berisi pesan "the shard cannot be allocated to the same node on which a copy of the shard already exists", artinya primary dan replica shard dari suatu indeks ditugaskan ke node yang sama. Untuk mengatasinya:
Atur jumlah replica shard menjadi 0:
PUT /my-index/_settings { "index": { "number_of_replicas": 0 } }Setelah status kluster kembali menjadi green, atur kembali jumlah replica menjadi 1:
PUT /my-index/_settings { "index": { "number_of_replicas": 1 } }
Batas maksimum alokasi shard simultan tercapai
Jika kluster telah mencapai batas alokasi shard-nya, tunggu hingga alokasi saat ini selesai. Jika shard masih belum ditugaskan setelah beberapa menit, periksa penjelasan alokasi:
GET _cluster/allocation/explainNode terputus (Disconnected nodes)
Satu atau beberapa node mungkin terputus dari kluster. Periksa status node:
GET _cat/nodes?vJika ada node yang tidak muncul dalam output, restart node tersebut melalui Konsol Elasticsearch.
Penggunaan disk tinggi
Elasticsearch tidak akan mengalokasikan shard ke node yang penggunaan disk space-nya melebihi 85%. Setelah penggunaan disk pada node yang terdampak turun di bawah 85%, restart node tersebut untuk memulihkan alokasi shard secara normal.
Untuk memeriksa penggunaan disk per node:
GET _cat/allocation?vUntuk mengurangi penggunaan disk:
Hapus indeks historis yang tidak lagi diperlukan.
Tingkatkan kapasitas disk node.
Sementara waktu, atur jumlah replica shard menjadi 0.
Penggunaan heap memory tinggi
Ketika penggunaan heap memory tinggi, kluster mungkin menangguhkan operasi. Untuk membebaskan memori:
Terapkan pembatasan kecepatan (throttling) untuk mengurangi traffic masuk.
Tutup indeks historis untuk mengurangi konsumsi memori.
Penyebab lainnya
Jika tidak ada penyebab di atas yang berlaku, periksa utilisasi CPU dan penggunaan heap memory di Konsol Elasticsearch. Untuk shard yang tidak ditugaskan, jalankan perintah berikut untuk penjelasan lebih rinci:
GET _cluster/allocation/explainBeban kluster tinggi (Heavy cluster load)
Meskipun kluster sehat (status green), operasi restart atau pembaruan dapat gagal jika kluster sedang heavily loaded. Periksa metrik berikut untuk mengidentifikasi dan mengatasi masalah beban.
Penggunaan disk mencapai 85%
Diagnosis:
Periksa data pemantauan penggunaan disk di Konsol Elasticsearch.
Jalankan
GET _cat/allocationuntuk melihat alokasi disk per node.Jalankan
GET _cluster/allocation/explainuntuk memeriksa masalah alokasi.Periksa log kluster untuk peringatan terkait disk.
Dampak: Saat penggunaan disk mencapai 85%, Elasticsearch berhenti mengalokasikan shard baru ke node yang terdampak.
Solusi:
Hapus indeks historis yang tidak lagi diperlukan.
Tingkatkan kapasitas disk.
Sementara waktu, atur jumlah replica shard menjadi 0.
Setelah tindakan diambil, verifikasi bahwa penggunaan disk telah turun di bawah 85% melalui data pemantauan.
Utilisasi CPU mencapai 85%
Diagnosis:
Periksa data pemantauan utilisasi CPU di Konsol Elasticsearch.
Tinjau informasi hot thread untuk mengidentifikasi operasi yang intensif CPU.
Dampak: Utilisasi CPU tinggi menurunkan stabilitas kluster.
Solusi:
Periksa QPS baca dan QPS tulis di data pemantauan, lalu kurangi traffic jika memungkinkan.
Lakukan scale out kluster dengan menambahkan data node.
Tingkatkan konfigurasi kluster menggunakan tipe instans yang lebih besar.
Penggunaan heap memory pada atau di atas 75%
Diagnosis:
Periksa data pemantauan penggunaan heap memory di Konsol Elasticsearch.
Tinjau log kluster untuk peringatan garbage collection (GC).
Periksa metrik old gc collection count dan old gc collecting.ms untuk mendeteksi jeda GC yang panjang.
Dampak: Penggunaan heap memory tinggi menurunkan stabilitas kluster dan dapat menyebabkan operasi hang.
Solusi:
Kurangi traffic baca dan tulis.
Tingkatkan konfigurasi kluster.
Tutup indeks historis untuk membebaskan heap memory.
Beban node melebihi jumlah vCPU
Diagnosis:
Periksa metrik NodeLoad_1m(value) di Konsol Elasticsearch.
Nilai yang lebih besar dari jumlah vCPU pada node menunjukkan beban berat.
Dampak: Node yang kelebihan beban dapat menjadi tidak responsif dan memengaruhi operasi kluster.
Solusi:
Periksa QPS baca, QPS tulis, dan throughput disk di data pemantauan.
Kurangi traffic baca atau tulis.
Lakukan scale out kluster dengan menambahkan data node.
Tingkatkan konfigurasi kluster.