日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

通過_shrink API快速減少主分片數

在Elasticsearch集群中創建索引時,如果您無法評估實際數據量,可能導致設置的主分數很大,但實際業務的數據量并不多,此時您需要減少主分片數,防止因主分片數太多導致集群資源消耗過大或影響查詢寫入速率等。本文為您介紹如何通過_shrink API快速減少主分片數。

背景信息

使用Elasticsearch需要密切關注集群分片總數及索引分片數設置。集群分片總數越多,對應分片會占用大量的文件句柄耗用大量的集群資源。同樣,索引分片數設置不合理,會對查詢和寫入均造成潛在的影響。

在創建索引時,如果您無法評估實際數據量,可能導致設置的索引主分數很大,但實際業務數據量并不多。通過reindex減少主分片數耗時太久,elastic提供了_shrink API可快速減少索引主分片數。shrink操作不會在原索引上直接縮小分片,基本流程如下:

  1. 創建一個和原索引配置相同的新索引,新索引主分片比原索引少,所有分片需匯集在一個節點,該節點預留的磁盤空間需要大于原索引主分片上的數據大小。

  2. 從原索引到新索引創建segments硬鏈接。

  3. 對新索引執行恢復操作,類似關閉的索引執行打開操作。

reindex與_shrink API的性能測試信息如下:

  • 測試環境:

    • 數據節點:數量為5個,規格為8核16 GB。

    • 索引數據:數據量為182 GB。

    • 分片數:原主分片數為30,目標分片數為5,副本數為0。

  • 測試結果

    方式

    耗時

    資源占用

    reindex

    3小時22分鐘

    集群中有大量的寫QPS,索引所占節點資源高。

    _shrink API

    15分鐘

    shrink節點計算資源較高。

前提條件

  • Elasticsearch集群狀態健康,且負載處于正常水位。

  • 根據集群數據節點個數、集群磁盤容量等因素,合理評估索引可減少的分片數。詳細信息請參見評估Shard

  • 原索引必須處于green狀態。

  • 原索引的文檔總數不能超過2,147,483,519。

  • Elasticsearch集群中沒有新索引的同名索引。

操作步驟

  1. 登錄目標阿里云Elasticsearch實例的Kibana控制臺,根據頁面提示進入Kibana主頁。
    登錄Kibana控制臺的具體操作,請參見登錄Kibana控制臺
    說明 本文以阿里云Elasticsearch 7.10.0版本為例,其他版本操作可能略有差別,請以實際界面為準。
  2. 單擊右上角的Dev tools
  3. Console中,執行如下命令,將原索引設置為禁止寫狀態,副本置為0,且將分片匯集到集群中的一個節點上。

    以下示例以原索引shrink5為例,使用時需要替換為您的業務索引名。

    PUT shrink5/_settings
    {
        "index.routing.allocation.require._name": "es-cn-zvp25yhyy000y****-1ab7****-0001",
        "index.blocks.write": true,
        "index.number_of_replicas": 0
    }
                            

    參數

    說明

    index.routing.allocation.require._name

    設置分片匯集的目標節點name。節點name可通過GET _cat/nodes?v命令獲取。

    說明

    在通過_shrink API減少主分片數之前,原索引的每個分片必須匯集到集群中的一個節點上。

    index.blocks.write

    是否禁用對索引的寫操作,必須為true,即禁止寫操作。

    說明

    在通過_shrink API減少主分片數之前,必須設置原索引為禁止寫狀態。

    index.number_of_replicas

    索引的副本分片數。

  4. 通過_shrink API減少主分片數。

    以下示例以將原索引shrink5的主分片數從30減少到5,并生成新索引shrink_hk5e_cn。使用時請替換索引名。

    POST shrink5/_shrink/shrink_hk5e_cn
    {
      "settings": {
        "index.blocks.write": null,
        "index.number_of_shards": 5,
        "index.number_of_replicas": 0,
        "index.routing.allocation.require._name": null
      }
    }

    參數

    說明

    index.blocks.write

    是否禁用對索引的寫操作。在通過_shrink API減少主分片數后,需要將新索引的index.blocks.write置為null,即清除從原索引復制的配置。

    index.number_of_shards

    新索引的主分片數。

    重要
    • 觸發shrink后,shrink_node節點CPU使用率和load_1m將比較高,建議在業務低峰期操作。

    • 原索引的主分片數一定要大于新索引,新索引的主分片數必須可被原索引的主分片數整除。例如,原索引的主分片數為8,則可以減少到4、2、1;原索引的主分片數為15,則可以減少到5、3、1。如果原索引的主分片數是質數,則只能減少到1。

    index.number_of_replicas

    新索引的副本分片數。

    index.routing.allocation.require._name

    設置將分片匯集的目標節點。在通過_shrink API減少主分片數后,需要將新索引的index.routing.allocation.require._name置為null清除從原索引復制的配置,或者刪除原索引。

  5. 查看結果。

    通過_cat recovery API查看shrink進度,當無shrink相關的recovey,且集群狀態健康,則shrink完成。

    • 查看shrink進度

      GET _cat/recovery?v&active_only

      當返回結果的index列沒有等待shrink的索引時,說明無shrink相關的recovey。

    • 查看集群健康狀態

      GET _cluster/health

      當返回結果中包含"status" : "green"時,說明集群狀態健康。

常見問題

Q:為什么要使用硬鏈接,而不使用軟鏈接?

A:通過軟鏈接創建索引,待數據寫入,將原索引刪除后,目標索引數據也會被刪除,而硬鏈接會保證索引的獨立性。