深入了解Elasticsearch Yellow狀態

一、什麼是Elasticsearch Yellow狀態

Elasticsearch是一款流行的開源分散式全文搜索和分析引擎,由Elasticsearch BV開發和維護。Elasticsearch Yellow狀態指的是在集群中主分片(number_of_replicas設置為1)和至少一個副本分片都存在,但是有一些部分出現問題,例如少量分片未分配、投票離線的節點或磁碟空間低於設置的閾值。它表示在數據丟失或分片不可恢復之前還有時間來修復問題。

二、導致Elasticsearch Yellow狀態的原因

1、未分配分片: 當Elasticsearch在集群中加入新節點或有節點關閉時,由於數據遷移可能導致未分配分片。當未分配分片>0時,數據就不能良好地分布在節點上,數據訪問就可能會出現問題。

2、投票的離線節點:Elasticsearch將集群中的節點視為主節點或數據節點的一部分,並通過投票選出主節點。當主節點離線時,投票選出其他節點成為新的主節點。事情變得更糟糕的是,在集群結構不穩定的情況下,可能出現投票分歧而沒有達成consensus。這些情況都會導致集群狀態的黃色警報。

3、磁碟空間低於設置的閾值:磁碟空間的不充足可能會導致數據丟失和停機。默認情況下,Elasticsearch將不允許將分片分配到空間低於5%的節點上。如果某個節點低於這個閾值,狀態將被標記為黃色。

三、如何診斷Elasticsearch Yellow狀態

1、通過健康檢查API:使用curl命令或瀏覽器中的HTTP請求連接到Elasticsearch的API地址,然後發送GET請求來檢查集群的狀態。輸出結果中將包含活躍分片數(active_shards),分配分片(unassigned_shards)的數量以及節點數。如果活動分片數小於期望值或分配的分片數大於零,則檢查分片分配是否正常或是否有分配失敗的索引。

$ curl -XGET 'http://localhost:9200/_cat/health?pretty'
{
  "cluster_name" : "elasticsearch",
  "status" : "yellow",
  "timed_out" : false,
  "number_of_nodes" : 3,
  "number_of_data_nodes" : 2,
  "active_primary_shards" : 10,
  "active_shards" : 20,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 3,
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 86.95652173913044
}

2、通過分片和節點API:使用curl命令或瀏覽器中的HTTP請求連接到Elasticsearch的API地址,然後發送GET請求以獲得與每個索引,節點,分片和狀態相關的信息。

$ curl -XGET 'http://localhost:9200/_cat/shards?v' 

四、如何解決Elasticsearch Yellow狀態

1、增加節點:通過添加額外的節點,可以將負載分散到更多的節點中,從而使每個節點處理的數據更少。這可以提高性能和穩定性,並為磁碟故障提供更好的保護。默認情況下,Elasticsearch 中包含一個單獨的主節點,負責協調集群。將數據節點和觀察節點部署到集群將提供更多的彈性和更好的性能。

2、重新分配分片: 重新分配失敗的分片或重新分配未分配的分片可以解決由於節點故障引起的丟失的數據和索引。

curl -XPOST 'http://localhost:9200/_cluster/reroute' -d '{
    "commands": [
          {
              "allocate_replica": {
                  "index": "your_index",
                  "shard": 0,
                  "node": "your_new_node",
                  "allow_primary": true
              }
          }
      ]
}'

3、調整副本數量:根據使用情況,可以在不同的節點之間設置更多副本,以減少數據丟失的風險。

PUT /my_index/_settings
{
    "index": {
        "number_of_replicas": 2
    }
}

4、清理不必要的分片:清理無用的分片和索引,可以釋放磁碟空間並提高性能。

DELETE /my_index

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/184986.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-26 05:03
下一篇 2024-11-26 05:03

相關推薦

  • Elasticsearch API使用用法介紹-get /_cat/allocation

    Elasticsearch是一個分散式的開源搜索和分析引擎,支持全文檢索和數據分析,並且可伸縮到上百個節點,處理PB級結構化或非結構化數據。get /_cat/allocation…

    編程 2025-04-28
  • Elasticsearch Scroll Java的使用指南

    本文旨在詳細介紹如何使用Elasticsearch Scroll Java。Elasticsearch Scroll Java是一種高效的遍歷大型數據集的方法。通過它,我們可以逐個…

    編程 2025-04-27
  • 深入解析Vue3 defineExpose

    Vue 3在開發過程中引入了新的API `defineExpose`。在以前的版本中,我們經常使用 `$attrs` 和` $listeners` 實現父組件與子組件之間的通信,但…

    編程 2025-04-25
  • 深入理解byte轉int

    一、位元組與比特 在討論byte轉int之前,我們需要了解位元組和比特的概念。位元組是計算機存儲單位的一種,通常表示8個比特(bit),即1位元組=8比特。比特是計算機中最小的數據單位,是…

    編程 2025-04-25
  • 深入理解Flutter StreamBuilder

    一、什麼是Flutter StreamBuilder? Flutter StreamBuilder是Flutter框架中的一個內置小部件,它可以監測數據流(Stream)中數據的變…

    編程 2025-04-25
  • 深入探討OpenCV版本

    OpenCV是一個用於計算機視覺應用程序的開源庫。它是由英特爾公司創建的,現已由Willow Garage管理。OpenCV旨在提供一個易於使用的計算機視覺和機器學習基礎架構,以實…

    編程 2025-04-25
  • 深入了解scala-maven-plugin

    一、簡介 Scala-maven-plugin 是一個創造和管理 Scala 項目的maven插件,它可以自動生成基本項目結構、依賴配置、Scala文件等。使用它可以使我們專註於代…

    編程 2025-04-25
  • 深入了解LaTeX的腳註(latexfootnote)

    一、基本介紹 LaTeX作為一種排版軟體,具有各種各樣的功能,其中腳註(footnote)是一個十分重要的功能之一。在LaTeX中,腳註是用命令latexfootnote來實現的。…

    編程 2025-04-25
  • 深入探討馮諾依曼原理

    一、原理概述 馮諾依曼原理,又稱「存儲程序控制原理」,是指計算機的程序和數據都存儲在同一個存儲器中,並且通過一個統一的匯流排來傳輸數據。這個原理的提出,是計算機科學發展中的重大進展,…

    編程 2025-04-25
  • 深入了解Python包

    一、包的概念 Python中一個程序就是一個模塊,而一個模塊可以引入另一個模塊,這樣就形成了包。包就是有多個模塊組成的一個大模塊,也可以看做是一個文件夾。包可以有效地組織代碼和數據…

    編程 2025-04-25

發表回復

登錄後才能評論