0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Elasticsearch索引生命周期常見(jiàn)的階段

馬哥Linux運(yùn)維 ? 來(lái)源:馬哥Linux運(yùn)維 ? 作者:馬哥Linux運(yùn)維 ? 2022-10-13 10:38 ? 次閱讀

引入索引生命周期的作用

在 Elasticsearch的日常管理中,有很多如系統(tǒng)日志,行為數(shù)據(jù)等方面的應(yīng)用場(chǎng)景,這些場(chǎng)景的特點(diǎn)是數(shù)據(jù)量非常大,并且隨著時(shí)間的增長(zhǎng)索引的數(shù)量也會(huì)持續(xù)增長(zhǎng),然而這些場(chǎng)景基本上只有最近一段時(shí)間的數(shù)據(jù)有使用價(jià)值或者會(huì)被經(jīng)常使用(熱數(shù)據(jù)),而歷史數(shù)據(jù)幾乎沒(méi)有作用或者很少會(huì)被使用(冷數(shù)據(jù)),這個(gè)時(shí)候就需要對(duì)索引進(jìn)行一定策略的維護(hù)管理甚至是刪除清理,否則隨著數(shù)據(jù)量越來(lái)越多除了浪費(fèi)磁盤與內(nèi)存空間之外,還會(huì)嚴(yán)重影響 Elasticsearch 的性能。

在 Elastic Stack 6.6 版本后推出了新功能 Index Lifecycle Management(索引生命周期管理),支持針對(duì)索引的全生命周期托管管理,并且在 Kibana 上也提供了一套UI界面來(lái)配置策略。

索引生命周期常見(jiàn)的階段

hot: 索引還存在著大量的讀寫操作。

warm:索引不存在寫操作,還有被查詢的需要。

cold:數(shù)據(jù)不存在寫操作,讀操作也不多。

delete:索引不再需要,可以被安全刪除。

注意:以上只是索引生命周期階段的常見(jiàn)定義,具體策略可以根據(jù)實(shí)際業(yè)務(wù)情況來(lái)定義。

部署Elasticsearch集群

部署一個(gè)由2個(gè)hot節(jié)點(diǎn),2個(gè)warm節(jié)點(diǎn),2個(gè)cold節(jié)點(diǎn)組成的Elasticsearch集群,并且部署了Kibana和Cerebro方便調(diào)試和觀察。docker-compose.yaml文件如下:

version:'2.2'
services:
cerebro:
image:lmenezes/cerebro:0.8.3
container_name:hwc_cerebro
ports:
-"9000:9000"
command:
--Dhosts.0.host=http://elasticsearch:9200
networks:
-hwc_es7net
kibana:
image:docker.elastic.co/kibana/kibana:7.1.0
container_name:hwc_kibana7
environment:
#-I18N_LOCALE=zh-CN
-XPACK_GRAPH_ENABLED=true
-TIMELION_ENABLED=true
-XPACK_MONITORING_COLLECTION_ENABLED="true"
ports:
-"5601:5601"
networks:
-hwc_es7net
elasticsearch:
image:docker.elastic.co/elasticsearch/elasticsearch:7.1.0
container_name:es7_hot1
environment:
-cluster.name=cr7-hwc
-node.name=es7_hot1
-node.attr.box_type=hot
-bootstrap.memory_lock=true
-"ES_JAVA_OPTS=-Xms512m-Xmx512m"
-discovery.seed_hosts=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2
-cluster.initial_master_nodes=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2
ulimits:
memlock:
soft:-1
hard:-1
volumes:
-hwc_es7data_hot1:/usr/share/elasticsearch/data
ports:
-9200:9200
networks:
-hwc_es7net
elasticsearch2:
image:docker.elastic.co/elasticsearch/elasticsearch:7.1.0
container_name:es7_warm1
environment:
-cluster.name=cr7-hwc
-node.name=es7_warm1
-node.attr.box_type=warm
-bootstrap.memory_lock=true
-"ES_JAVA_OPTS=-Xms512m-Xmx512m"
-discovery.seed_hosts=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2
-cluster.initial_master_nodes=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2
ulimits:
memlock:
soft:-1
hard:-1
volumes:
-hwc_es7data_warm1:/usr/share/elasticsearch/data
networks:
-hwc_es7net
elasticsearch3:
image:docker.elastic.co/elasticsearch/elasticsearch:7.1.0
container_name:es7_cold1
environment:
-cluster.name=cr7-hwc
-node.name=es7_cold1
-node.attr.box_type=cold
-bootstrap.memory_lock=true
-"ES_JAVA_OPTS=-Xms512m-Xmx512m"
-discovery.seed_hosts=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2
-cluster.initial_master_nodes=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2
ulimits:
memlock:
soft:-1
hard:-1
volumes:
-hwc_es7data_cold1:/usr/share/elasticsearch/data
networks:
-hwc_es7net
elasticsearch4:
image:docker.elastic.co/elasticsearch/elasticsearch:7.1.0
container_name:es7_hot2
environment:
-cluster.name=cr7-hwc
-node.name=es7_hot2
-node.attr.box_type=hot
-bootstrap.memory_lock=true
-"ES_JAVA_OPTS=-Xms512m-Xmx512m"
-discovery.seed_hosts=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2
-cluster.initial_master_nodes=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2
ulimits:
memlock:
soft:-1
hard:-1
volumes:
-hwc_es7data_hot2:/usr/share/elasticsearch/data
networks:
-hwc_es7net
elasticsearch5:
image:docker.elastic.co/elasticsearch/elasticsearch:7.1.0
container_name:es7_warm2
environment:
-cluster.name=cr7-hwc
-node.name=es7_warm2
-node.attr.box_type=warm
-bootstrap.memory_lock=true
-"ES_JAVA_OPTS=-Xms512m-Xmx512m"
-discovery.seed_hosts=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2
-cluster.initial_master_nodes=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2
ulimits:
memlock:
soft:-1
hard:-1
volumes:
-hwc_es7data_warm2:/usr/share/elasticsearch/data
networks:
-hwc_es7net
elasticsearch6:
image:docker.elastic.co/elasticsearch/elasticsearch:7.1.0
container_name:es7_cold2
environment:
-cluster.name=cr7-hwc
-node.name=es7_cold2
-node.attr.box_type=cold
-bootstrap.memory_lock=true
-"ES_JAVA_OPTS=-Xms512m-Xmx512m"
-discovery.seed_hosts=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2
-cluster.initial_master_nodes=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2
ulimits:
memlock:
soft:-1
hard:-1
volumes:
-hwc_es7data_cold2:/usr/share/elasticsearch/data
networks:
-hwc_es7net

volumes:
hwc_es7data_hot1:
driver:local
hwc_es7data_warm1:
driver:local
hwc_es7data_cold1:
driver:local
hwc_es7data_hot2:
driver:local
hwc_es7data_warm2:
driver:local
hwc_es7data_cold2:
driver:local

networks:
hwc_es7net:
driver:bridge

執(zhí)行docker-compose up -d命令即可啟動(dòng)Elasticsearch集群。(前提安裝好docker和docker-compose)

修改IML刷新時(shí)間

將ILM刷新時(shí)間設(shè)定為1秒,便于實(shí)驗(yàn)演示(默認(rèn)為10分鐘):

PUT_cluster/settings
{
"persistent":{
"indices.lifecycle.poll_interval":"1s"
}
}

設(shè)置Index Lifecycle Policies

設(shè)置hot/warm/cold和delete四個(gè)階段:

hot:超過(guò)5個(gè)文檔以后rollover。

warm:20s后進(jìn)入warm階段,將索引設(shè)置為只讀。

cold:40s后進(jìn)入warm階段,將副本分別從1縮小為0。

delete:60s后進(jìn)入delete階段,刪除索引。

PUT/_ilm/policy/log_ilm_policy
{
"policy":{
"phases":{
"hot":{
"actions":{
"rollover":{
"max_docs":5
}
}
},
"warm":{
"min_age":"20s",
"actions":{
"allocate":{
"include":{
"box_type":"warm"
}
},
"readonly":{}
}
},
"cold":{
"min_age":"40s",
"actions":{
"allocate":{
"include":{
"box_type":"cold"
},
"number_of_replicas":0
}
}
},
"delete":{
"min_age":"60s",
"actions":{
"delete":{}
}
}
}
}
}

創(chuàng)建第一個(gè)索引

將索引分配到hot節(jié)點(diǎn),并且調(diào)用之前設(shè)置的IML策略log_ilm_policy,設(shè)置rollover的別名為ilm_alias,設(shè)置主分片為1,副本分片為1。設(shè)置"is_write_index": true在rollover的時(shí)候,alias會(huì)包含所有rollover文檔。

PUTilm_index-000001
{
"settings":{
"number_of_shards":1,
"number_of_replicas":1,
"index.lifecycle.name":"log_ilm_policy",
"index.lifecycle.rollover_alias":"ilm_alias",
"index.routing.allocation.include.box_type":"hot"
},
"aliases":{
"ilm_alias":{
"is_write_index":true
}
}
}

創(chuàng)建文檔

連續(xù)執(zhí)行5次POST,創(chuàng)建5個(gè)文檔。

POSTilm_alias/_doc
{
"name":"cr7",
"age":15
}

觀察

剛開(kāi)始可以看到總共有5個(gè)doc。5a6d60f8-4a37-11ed-a3b6-dac502259ad0.png

當(dāng)達(dá)索引iml_index-000001到5個(gè)doc時(shí),做了rollover操作,新建了新的索引iml_index-000002。

5a7c987a-4a37-11ed-a3b6-dac502259ad0.png

等待20s后,將索引iml_index-000001移動(dòng)到warm節(jié)點(diǎn)。

5a88fbb0-4a37-11ed-a3b6-dac502259ad0.png

等待40s后,將索引iml_index-000001移動(dòng)到cold節(jié)點(diǎn),并且將副本數(shù)從1縮小為0。

5a977afa-4a37-11ed-a3b6-dac502259ad0.png

等待60s后,索引iml_index-000001被刪除。

5aa446ae-4a37-11ed-a3b6-dac502259ad0.png

由于在warm階段設(shè)置了readonly,在warm和cold階段如果嘗試往iml_index-000001寫入或修改數(shù)據(jù),將會(huì)收到以下報(bào)錯(cuò):

{
"error":{
"root_cause":[
{
"type":"cluster_block_exception",
"reason":"blockedby:[FORBIDDEN/8/indexwrite(api)];"
}
],
"type":"cluster_block_exception",
"reason":"blockedby:[FORBIDDEN/8/indexwrite(api)];"
},
"status":403
}

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7030

    瀏覽量

    89038
  • ui界面
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    1574
  • Elasticsearch
    +關(guān)注

    關(guān)注

    0

    文章

    29

    瀏覽量

    2834

原文標(biāo)題:Elasticsearch 索引生命周期管理

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于Rust語(yǔ)言中的生命周期

    Rust是一門系統(tǒng)級(jí)編程語(yǔ)言具備高效、安和并發(fā)等特,而生命周期是這門語(yǔ)言中比較重要的概念之一。在這篇教程中,我們會(huì)了解什么是命周期、為什么需要生命周期、如何使用生命周期,同時(shí)我們依然會(huì)
    的頭像 發(fā)表于 09-19 17:03 ?907次閱讀

    Traveo II B-H中的SECURE和SECURE_WITH_DEBUG生命周期階段有何不同?

    Traveo II B-H 中的 SECURE 和 SECURE_WITH_DEBUG 生命周期階段有何不同?
    發(fā)表于 05-21 07:07

    AutoScaling 生命周期掛鉤功能

    摘要: AutoScaling 伸縮組實(shí)例管理功能全面升級(jí),新上線生命周期掛鉤(LifecycleHook)功能,方便用戶更加靈活地管理伸縮組內(nèi)實(shí)例。使用生命周期掛鉤可以在伸縮組發(fā)生伸縮活動(dòng)時(shí)將伸縮
    發(fā)表于 06-27 17:13

    在S32G2 RM中有“生命周期”,生命周期的完整含義是什么?

    在S32G2 RM中,有“生命周期”。生命周期的完整含義是什么,我們應(yīng)該如何使用它?
    發(fā)表于 04-23 10:37

    貫穿于全生命周期的功能安全

    簡(jiǎn)要介紹了功能安全在SIS 全安全生命周期的主要活動(dòng),敘述了全生命周期的功能安全管理。簡(jiǎn)要闡述了貫穿于整體安全生命周期的功能安全進(jìn)行的主要階段,同時(shí)提出了在設(shè)計(jì)SIS
    發(fā)表于 12-19 15:50 ?15次下載

    貫穿于全生命周期的功能安全

    簡(jiǎn)要介紹了功能安全在SIS 全安全生命周期的主要活動(dòng),敘述了全生命周期的功能安全管理。簡(jiǎn)要闡述了貫穿于整體安全生命周期的功能安全進(jìn)行的主要階段,同時(shí)提出了在設(shè)計(jì)SIS 時(shí)
    發(fā)表于 01-06 17:11 ?6次下載

    一文讀懂Android Activity生命周期

    正常情況下Activity的生命周期: Activity的生命周期大概可以歸為三部分 整個(gè)的生命周期:onCreate()可以設(shè)置所有的“全局”狀態(tài), onDestory()可以釋放所有的資源 可見(jiàn)
    發(fā)表于 05-30 01:03 ?1587次閱讀

    基于延長(zhǎng)WSN生命周期的LEACH算法的改進(jìn)

    基于延長(zhǎng)WSN生命周期的LEACH算法的改進(jìn)(開(kāi)關(guān)電源技術(shù)與設(shè)計(jì)pdf百度云)-基于延長(zhǎng)WSN生命周期的LEACH算法的改進(jìn)? ? ? ? ? ? ? ? ? ??
    發(fā)表于 09-15 11:17 ?14次下載
    基于延長(zhǎng)WSN<b class='flag-5'>生命周期</b>的LEACH算法的改進(jìn)

    了解產(chǎn)品制造生命周期中的安全風(fēng)險(xiǎn)問(wèn)題

    列的 第一篇文章 所解釋的,IC 生命周期的最后兩個(gè)階段,即電路板組裝和電路板測(cè)試,由原始設(shè)備制造商 (OEM) 擁有和控制。 點(diǎn)擊查看完整大小的圖片 圖 1:OEM 負(fù)責(zé)確保 IC 生命周期的最后
    的頭像 發(fā)表于 07-13 18:03 ?2850次閱讀
    了解產(chǎn)品制造<b class='flag-5'>生命周期</b>中的安全風(fēng)險(xiǎn)問(wèn)題

    深入分析芯片生命周期管理平臺(tái)

    (SLM)平臺(tái),通過(guò)收集芯片上各個(gè)階段的有用數(shù)據(jù),并在其整個(gè)生命周期中對(duì)這些數(shù)據(jù)進(jìn)行智能化分析,優(yōu)化芯片生命周期中每個(gè)階段
    的頭像 發(fā)表于 08-02 10:43 ?2269次閱讀

    Vue入門Vue的生命周期

    .生命周期 4.1生命周期是什么 Vue的生命周期, 就是Vue實(shí)例從創(chuàng)建到銷毀的過(guò)程.
    的頭像 發(fā)表于 02-06 16:16 ?863次閱讀
    Vue入門Vue的<b class='flag-5'>生命周期</b>

    編譯器的標(biāo)準(zhǔn)生命周期

    編譯器的標(biāo)準(zhǔn)生命周期
    發(fā)表于 03-14 19:06 ?0次下載
    編譯器的標(biāo)準(zhǔn)<b class='flag-5'>生命周期</b>

    編譯器的標(biāo)準(zhǔn)生命周期

    編譯器的標(biāo)準(zhǔn)生命周期
    發(fā)表于 07-05 19:32 ?1次下載
    編譯器的標(biāo)準(zhǔn)<b class='flag-5'>生命周期</b>

    鴻蒙開(kāi)發(fā):【PageAbility的生命周期

    PageAbility生命周期是PageAbility被調(diào)度到INACTIVE、ACTIVE、BACKGROUND等各個(gè)狀態(tài)的統(tǒng)稱。PageAbility生命周期流轉(zhuǎn)及狀態(tài)說(shuō)明見(jiàn)如下圖1、表1所示。
    的頭像 發(fā)表于 06-17 10:05 ?706次閱讀
    鴻蒙開(kāi)發(fā):【PageAbility的<b class='flag-5'>生命周期</b>】

    鴻蒙開(kāi)發(fā)組件:DataAbility的生命周期

    應(yīng)用開(kāi)發(fā)者可以根據(jù)業(yè)務(wù)場(chǎng)景實(shí)現(xiàn)data.js/data.ets中的生命周期相關(guān)接口。DataAbility生命周期接口說(shuō)明見(jiàn)下表。
    的頭像 發(fā)表于 06-20 09:39 ?444次閱讀