對Elasticsearch生命周期的思考
點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號”
優(yōu)質(zhì)文章,第一時間送達(dá)
? 作者?|??一寸HUI
來源 |? urlify.cn/zYNFzq
66套java從入門到精通實(shí)戰(zhàn)課程分享
什么是es索引的生命周期?有啥用?可以怎么用?用了有什么好處呢?
在現(xiàn)實(shí)的生產(chǎn)環(huán)境中有沒有覺得自己剛開始設(shè)計的索引的分片數(shù)剛剛好,但是隨著時間的增長,數(shù)據(jù)量增大,增長速度增大的情況下,你的es索引的設(shè)計是否還合理呢?
在現(xiàn)實(shí)的生產(chǎn)存儲中,有沒有一些數(shù)據(jù)時間長了就沒價值了,沒必要浪費(fèi)存儲了,就可以刪除了,有些數(shù)據(jù)變得不再重要了,可以存放在低性能的磁盤上,節(jié)約公司的機(jī)器硬件成本呢?
es生產(chǎn)環(huán)境,有沒有經(jīng)歷過通過人工去管理索引的中部分?jǐn)?shù)據(jù)的刪除呢,知道es刪除數(shù)據(jù)原理的都知道,這樣對性能有很大的影響,剛開始并沒有真正的刪除數(shù)據(jù)。
這篇文章純屬于個人通過別人的博客和官網(wǎng)的學(xué)習(xí),結(jié)合自己公司業(yè)務(wù)場景的一個思考,有些是沒有實(shí)際驗證的。本篇也是基于elasticsearch7.8.1的一個版本的知識點(diǎn)。
一、引發(fā)思考的背景
1、首先業(yè)務(wù)場景,es的業(yè)務(wù)場景是真的廣泛,目前我們只是用來做搜索查詢,雖然現(xiàn)在在研究elk,對日志的進(jìn)行索引,但是肯能還只是用到es的一點(diǎn)點(diǎn)的功能
2、在es安裝的時候,如何設(shè)計節(jié)點(diǎn),如何根據(jù)現(xiàn)有的機(jī)器做es的集群,配置好集群后,怎么設(shè)計索引,一般都會有一個時間的字段,根據(jù)數(shù)據(jù)量的大小和增長速度可以根據(jù)天,月,年等時間間隔切分索引,使用別名管理,那么多索引,但是又如何去管理這些索引呢,還要根據(jù)自己公司的業(yè)務(wù)場景,而不是純粹的設(shè)計理論,我覺的符合公司情況,符合業(yè)務(wù)場景的設(shè)計才是最好的設(shè)計吧,但是不是一味的強(qiáng)耦合的只考慮單個業(yè)務(wù),應(yīng)該考慮多個,能夠做到模板化,這樣就能很好的做擴(kuò)展了,以及要考慮對未來的規(guī)劃和數(shù)據(jù)增長的容忍度吧
3、當(dāng)然我們目前沒有巨量的數(shù)據(jù),但是很多事情也必須考慮進(jìn)去,根據(jù)公司業(yè)務(wù),比如數(shù)據(jù)只有一年的經(jīng)常使用,后面的數(shù)據(jù)基本不用,三年前的數(shù)據(jù)可以刪除,機(jī)器設(shè)備性能,有些機(jī)器磁盤性能好ssd,有些一般吧機(jī)械硬盤,還有cpu,內(nèi)存的因素都要考慮。
4、公司管理人員少,怎么去管理這些呢,也沒這個精力去開發(fā)索引的管理界面,很多因素都要考慮進(jìn)去
二、冷熱架構(gòu)
冷熱架構(gòu)就是有冷的有熱的(這是玩笑話),就是經(jīng)常需要使用(熱)和不經(jīng)常使用的數(shù)據(jù)(冷),有了這樣的卻別,存儲方面肯定也要區(qū)別對待吧,把熱數(shù)據(jù)存放在性能好的機(jī)器上,把冷的數(shù)據(jù)存放在性能較差的機(jī)器上,這個就是所謂的合理利用資源,節(jié)約公司硬件成本,也就是在硬件成本一定的條件下,提升集群的性能。但是描述是這么描述了,怎么實(shí)現(xiàn)熱數(shù)據(jù)就存在好的機(jī)器上,冷數(shù)據(jù)就存在差點(diǎn)的機(jī)器上呢,可以映射呀,打標(biāo)簽呀,方法很多嘛,es就是打標(biāo)簽。----如上描述都是個人理解(這里只說個人的)
好,接下來就給每個es集群的節(jié)點(diǎn)打標(biāo)簽咯,說A集群性能好,用來存熱數(shù)據(jù),說B機(jī)器性能差一些,用來存冷數(shù)據(jù),在他們每個機(jī)器上掛個牌牌,方便數(shù)據(jù)根據(jù)自己的冷熱程度對號入座。es是這么打標(biāo)簽的:
在elasticsearch.yml文件中增加
node.attr.{attribute}:?{value}
比如可以給機(jī)器配置冷熱的標(biāo)簽:
node.attr.temperature:?hot?//熱節(jié)點(diǎn)
node.attr.temperature:?warm?//冷節(jié)點(diǎn)現(xiàn)在是機(jī)器的標(biāo)簽打好了,那索引數(shù)據(jù)怎么打標(biāo)簽,并且一一對應(yīng)呢?就是對索引有如下的設(shè)置(_settings)就可以對應(yīng)好啦:
index.routing.allocation.include.{attribute}???//表示索引可以分配在包含多個值中其中一個的節(jié)點(diǎn)上。
index.routing.allocation.require.{attribute}???//表示索引要分配在包含索引指定值的節(jié)點(diǎn)上(通常一般設(shè)置一個值)。
index.routing.allocation.exclude.{attribute}???//表示索引只能分配在不包含所有指定值的節(jié)點(diǎn)上。詳細(xì)的部署這里不說了,大概只聊聊思想,部署可以參考下其他博主的博客:
https://www.elastic.co/guide/en/elasticsearch/reference/7.8/shard-allocation-filtering.html??
https://zhuanlan.zhihu.com/p/97098781
https://www.cnblogs.com/caoweixiong/p/11988457.html
三、生命周期
聊了背景,說了冷熱架構(gòu),那我們怎么怎么自動的管理呢?這樣生命周期就派上用處了,比如一個索引的數(shù)據(jù)經(jīng)過10天就從熱數(shù)據(jù)轉(zhuǎn)為了冷數(shù)據(jù),這樣可以通過一系列的action和設(shè)置進(jìn)行操作,自動根據(jù)時間把冷數(shù)據(jù)轉(zhuǎn)移到性能較差的機(jī)器上。這樣豈不是很方便,接下來我們就了解下索引的生命周期,以及怎么使用。
二話不說,上官網(wǎng):https://www.elastic.co/guide/en/elasticsearch/reference/7.8/index-lifecycle-management.html
可以配置索引生命周期管理(ILM)策略,以根據(jù)您的性能、彈性和保留需求自動管理索引。比如當(dāng)索引達(dá)到一定大小或文檔數(shù)量時,旋轉(zhuǎn)新索引,每天、每周或每月創(chuàng)建一個新索引,并歸檔以前的索引,刪除過時的索引以執(zhí)行數(shù)據(jù)保留標(biāo)準(zhǔn)。可以通過API配置和kibana配置進(jìn)行生命周期的管理。
ES索引生命周期管理分為4個階段:hot、warm、cold、delete,其中hot主要負(fù)責(zé)對索引進(jìn)行rollover操作,warm、cold、delete分別對rollover后的數(shù)據(jù)進(jìn)一步處理(前提是配置了hot)
階段 | 描述 |
hot | 主要處理時序數(shù)據(jù)的實(shí)時寫入 |
warm | 索引不再被更新,但仍在被查詢 |
cold | 索引不再被更新,并且很少被查詢。這些信息仍然需要可搜索 |
delete | 索引不再需要,可以安全地刪除 |
那這些索引是根據(jù)什么條件去從一個階段轉(zhuǎn)到另一個階段的呢?比如可以根據(jù)時間呀,文檔數(shù)據(jù)呀,索引大小呀作為判斷條件轉(zhuǎn)到下一個階段。
1、當(dāng)索引達(dá)到50GB時,將鼠標(biāo)移至新索引。
2、將舊索引移至熱階段,將其標(biāo)記為只讀,然后將其縮小為單個碎片。
3、7天后,將索引移至冷階段,然后將其移至較便宜的硬件上。
4、達(dá)到所需的30天保留期后,刪除索引那我們在索引的每一個階段可以做什么樣的操作呢,比如增加索引的設(shè)置,修改副本數(shù)量等。
階段 | 操作(action) |
Hot | Set Priority,Unfollow,Rollover |
Warm | Set Priority,Unfollow,Read-Only,Allocate,Shrink,F(xiàn)orce Merge |
Cold | Set Priority,Unfollow,Allocate,F(xiàn)reeze |
Delete | Wait For Snapshot,Delete |
具體如上的每一個動作(action)是什么,大家參考官網(wǎng)https://www.elastic.co/guide/en/elasticsearch/reference/7.8/ilm-actions.html
我們知道索引生命的周期的階段,也知道根據(jù)什么條件從一個周期跳轉(zhuǎn)到另一個階段,也知道在每一個階段可以做什么操作了,那么就成了呀,更具自己的業(yè)務(wù)場景設(shè)計索引的生命周期吧!!!接下來就看看什么實(shí)用呢?
來,官網(wǎng):https://www.elastic.co/guide/en/elasticsearch/reference/7.8/set-up-lifecycle-policy.html
https://www.elastic.co/guide/en/elasticsearch/reference/7.8/getting-started-index-lifecycle-management.html
通過索引生命周期策略管理索引的基本步驟如下:
1. 創(chuàng)建定義適當(dāng)階段和操作的生命周期策略
2. 創(chuàng)建索引模板,將策略應(yīng)用于每個新索引
3. 引導(dǎo)一個索引作為初始寫索引
4. 驗證索引按預(yù)期在生命周期階段中移動
如上四個步驟根據(jù)官網(wǎng)來一步一步操作很簡單,如果要結(jié)合冷熱架構(gòu)的話,可以在某一個階段根據(jù)自己的需求通過索引的設(shè)置(_settings)指定打好標(biāo)簽機(jī)器的標(biāo)簽就好了
當(dāng)然索引的生命周期還可以通過kibana進(jìn)行配置:

?
?根據(jù)圖一步一步的操作很簡單的!
生命周期管理策略真的是一個很好管理索引的技術(shù),很靈活,能夠減少人工的介入。都可以根據(jù)公司的業(yè)務(wù)場景好好使用,本文的冷熱架構(gòu)這里沒有實(shí)踐過,但是索引的生命周期還是實(shí)踐過,挺好用的,特別是一些日志數(shù)據(jù),保留7天或者一個月就夠了,可以通過生命周期策略配置自動刪除滿足條件的數(shù)據(jù),這樣集群的數(shù)據(jù)也不會無限的增長,也不需要人工管理。


??? ?
感謝點(diǎn)贊支持下哈?
