本文介紹在阿里云Elasticsearch集群上,通過生命周期管理ILM(Index Lifecycle Management)功能,實(shí)現(xiàn)冷熱數(shù)據(jù)分離的實(shí)踐流程。通過本實(shí)踐,您既可以實(shí)現(xiàn)在保證集群讀寫性能的基礎(chǔ)上,自動(dòng)維護(hù)集群上的冷熱數(shù)據(jù),又能通過優(yōu)化集群架構(gòu),降低企業(yè)生產(chǎn)成本。
背景信息
階段 | 描述 |
---|---|
hot | 熱數(shù)據(jù)階段。主要處理時(shí)序數(shù)據(jù)的實(shí)時(shí)寫入,可根據(jù)索引的文檔數(shù)、大小、時(shí)長(zhǎng)決定是否調(diào)用rollover API來滾動(dòng)更新索引。 |
warm | warm階段。索引不再寫入,主要用來提供查詢。 |
cold | 冷數(shù)據(jù)階段。索引不再更新,查詢很少,查詢速度會(huì)變慢。 |
delete | 刪除數(shù)據(jù)階段。索引將被刪除。 |
您可以通過兩種方式為索引添加生命周期管理策略:
- 為索引模板添加生命周期管理策略:將策略應(yīng)用到整個(gè)別名覆蓋的索引下,本文以此為例。
- 為單個(gè)索引添加生命周期管理策略:只能覆蓋當(dāng)前索引,新滾動(dòng)的索引不再受策略影響。
在時(shí)序和冷熱數(shù)據(jù)場(chǎng)景上應(yīng)用ILM,可以大幅度節(jié)約存儲(chǔ)成本。本文以冷熱數(shù)據(jù)場(chǎng)景為例,介紹如何使用ILM功能。配置場(chǎng)景如下:
- 將索引數(shù)據(jù)實(shí)時(shí)寫入Elasticsearch。當(dāng)索引數(shù)據(jù)增加到一定量時(shí),數(shù)據(jù)自動(dòng)寫入新索引。
- 舊索引在hot階段停留30分鐘,進(jìn)入warm階段。
- warm階段完成Merge及Shrink操作后,索引等待1小時(shí)(從滾動(dòng)更新時(shí)算起),進(jìn)入cold階段。
- cold階段將熱節(jié)點(diǎn)數(shù)據(jù)遷移到冷節(jié)點(diǎn),實(shí)現(xiàn)冷熱數(shù)據(jù)分離后,索引會(huì)在2個(gè)小時(shí)(從滾動(dòng)更新時(shí)算起)后被刪除。
注意事項(xiàng)
- Elasticsearch索引生命周期策略需密切貼近業(yè)務(wù)模型。例如,對(duì)多個(gè)不同結(jié)構(gòu)的索引進(jìn)行生命周期管理,建議各個(gè)索引配置獨(dú)立的別名和生命周期策略,以便于管理。
- 使用rollover滾動(dòng)索引,初始索引應(yīng)以自增數(shù)字結(jié)尾(-000001),否則策略不生效,長(zhǎng)度要求為6。例如,定義初始索引為myindex-000001,則rollover后的索引是myindex-000002,以此類推進(jìn)行遞增。如果集群中索引名不符合規(guī)范,建議進(jìn)行索引重建。
- hot階段主要處理數(shù)據(jù)寫入。業(yè)務(wù)中需保證數(shù)據(jù)是按照時(shí)間順序?qū)懭氲模幱趙arm和cold階段的索引不建議進(jìn)行數(shù)據(jù)寫入。例如,在warm階段配置actions為shrink或read only,那么索引進(jìn)入warm階段后將處于只讀狀態(tài),數(shù)據(jù)無法寫入。
操作流程
步驟一:創(chuàng)建冷熱集群并查看節(jié)點(diǎn)的冷熱屬性
冷熱集群是指在集群中包含冷、熱兩種屬性的節(jié)點(diǎn),可以提高Elasticsearch的處理性能和服務(wù)穩(wěn)定性。兩者區(qū)別如下。
節(jié)點(diǎn)類型 | 存儲(chǔ)數(shù)據(jù)要求 | 讀寫性能要求 | 規(guī)格要求 | 存儲(chǔ)要求 |
---|---|---|---|---|
熱節(jié)點(diǎn)(hot) | 近期數(shù)據(jù),例如最近2天的日志數(shù)據(jù)。 | 高 | 高,例如32核64 GB | 建議使用SSD云盤存儲(chǔ)數(shù)據(jù),存儲(chǔ)空間大小需根據(jù)數(shù)據(jù)大小進(jìn)行設(shè)置。 |
冷節(jié)點(diǎn)(warm) | 歷史數(shù)據(jù),例如2天之前的日志數(shù)據(jù)。 | 低 | 低,例如8核32 GB |
|
步驟二:為索引配置生命周期管理策略
步驟三:驗(yàn)證數(shù)據(jù)分布
步驟四:更新ILM策略
步驟五:切換ILM策略
常見問題
Q:如何設(shè)置ILM策略周期?
A:由于索引生命周期策略默認(rèn)是10分鐘檢查一次符合策略的索引,因此在這10分鐘內(nèi)索引中的數(shù)據(jù)可能會(huì)超出指定的閾值。例如在步驟二:為索引配置生命周期管理策略時(shí),設(shè)置max_docs為1000,但doc數(shù)量在超過1000后才觸發(fā)索引滾動(dòng)更新,此時(shí)可通過修改indices.lifecycle.poll_interval參數(shù)來控制檢查頻率,使索引在閾值范圍內(nèi)滾動(dòng)更新。
注意 請(qǐng)慎重修改該參數(shù)值,避免時(shí)間間隔太短給節(jié)點(diǎn)增加不必要的負(fù)載,本測(cè)試中將其改成了1m。
PUT _cluster/settings
{
"transient": {
"indices.lifecycle.poll_interval":"1m"
}
}