Elasticsearch ILM DSL 索引生命週期管理

張衝andy發表於2023-04-24

1、冷熱叢集架構

冷熱架構也叫冷暖架構,是“Hot-Warm” Architecture的中文翻譯。

冷熱架構本質是給節點設定不同的屬性,讓每個節點具備了不同的屬性。為演示 ILM,需要首先配置冷熱架構,三個節點在 elasticsearch.yml 分別設定的屬性如下:


檢視es冷熱叢集架構

2、不同階段(Phrase)的功能點(Acitons)

 

注意:僅在 Hot 階段可以設定:Rollover 滾動。

3、各生命週期 Actions 設定

後兩節演示要用。

3.1 Hot 階段

基於:max_age=3天、最大文件數為3、最大size為:30gb rollover 滾動索引。

設定優先順序為:100(值越大,優先順序越高)。

3.2 Warm 階段

實現段合併,max_num_segments 設定為1.

副本設定為 0。

資料遷移到:warm 節點。

優先順序設定為:50。

3.3 Cold 階段

冷凍索引

資料遷移到冷節點

3.4 Delete 階段

刪除索引

關於觸發滾動的條件:

Hot 階段的觸發條件:手動建立第一個滿足模板要求的索引。

其餘階段觸發條件:min_age,索引自建立後的時間。

時間類似:業務裡面的 熱節點保留 3 天,溫節點保留 7 天,冷節點保留 30 天的概念。

4、 索引生命週期管理 ILM DSL

# step1: 前提:演示重新整理需要,將索引生命管理重新整理為1秒
 curl  -XPUT "elastic:Ntn71CrUSaTjk7TNWora@172.26.180.1:9200/_cluster/settings" -H 'Content-Type: application/json' -d'{
  "persistent": {
    "indices.lifecycle.poll_interval": "1s"
  }
}'
# step2:測試需要,值調的很小
 curl  -XPUT "elastic:Ntn71CrUSaTjk7TNWora@172.26.180.1:9200/_ilm/policy/my_test_policy"   -H 'Content-Type: application/json'  -d'{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_age": "3d",
            "max_docs": 3,
            "max_size": "30gb"
          },
          "set_priority": {
            "priority": 100
          }
        }
      },
      "warm": {
        "min_age": "50s",
        "actions": {
          "forcemerge": {
            "max_num_segments": 1
          },
          "allocate": {
            "require": {
              "box_type": "warm"
            },
            "number_of_replicas": 0
          },
          "set_priority": {
            "priority": 50
          }
        }
      },
      "cold": {
        "min_age": "50s",
        "actions": {
          "allocate": {
            "require": {
              "box_type": "cold"
            }
          },
          "freeze": {}
        }
      },
      "delete": {
        "min_age": "60s",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}'
# step3:建立模板,關聯配置的ilm_policy
 curl  -XPUT "elastic:Ntn71CrUSaTjk7TNWora@172.26.180.1:9200/_index_template/ilm_template" -H 'Content-Type: application/json' -d'{
  "index_patterns": ["ilm-*"],                 
  "template": {
    "settings": {
      "number_of_shards": 1,
      "number_of_replicas": 0,
      "index.lifecycle.name": "my_test_policy",      
      "index.lifecycle.rollover_alias": "ilm",
      "index.routing.allocation.require.box_type": "hot"
    }
  }
}'
# step4:建立起始索引(便於滾動)
 curl  -XPUT "elastic:Ntn71CrUSaTjk7TNWora@172.26.180.1:9200/ilm-000001"  -H 'Content-Type: application/json' -d'{
  "aliases": {
    "ilm": {
      "is_write_index": true
    }
  }
}'
# step5:插入資料
 curl  -XPUT "elastic:Ntn71CrUSaTjk7TNWora@172.26.180.1:9200/ilm/_doc/1"  -H 'Content-Type: application/json' -d'
{"title":"count1"}
'
 curl  -XPUT "elastic:Ntn71CrUSaTjk7TNWora@172.26.180.1:9200/ilm/_doc/2"  -H 'Content-Type: application/json' -d'
{"title":"count2"}
'
檢視索引的資料量
curl '
查案索引分片的分佈
curl '
# step6:臨界值(會滾動)
 curl  -XPUT "elastic:Ntn71CrUSaTjk7TNWora@172.26.180.1:9200/ilm/_doc/3"  -H 'Content-Type: application/json' -d'
{"title":"count3"}
' 
# 下一個索引資料寫入(max_docs 滿足條件索引會由hot -> warn -> cold & delete )
 curl  -XPUT "elastic:Ntn71CrUSaTjk7TNWora@172.26.180.1:9200/ilm/_doc/4"  -H 'Content-Type: application/json' -d'
{"title":"count4"}
'

 

索引生命週期管理效果:


核心步驟總結如下:

第一步:建立生週期 policy,定義phases與actions。

第二步:建立索引模板,模板中關聯 policy 和別名。

第三步:建立符合模板的起始索引,並插入資料。

第四步: 索引基於配置的 ilm 滾動,觸發各個階段的actions。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2948246/,如需轉載,請註明出處,否則將追究法律責任。

相關文章