OpenStore自定義冷熱存儲引擎是阿里云Elasticsearch針對日志場景自研的彈性、高效、低成本的日志存儲引擎。本文介紹使用OpenStore自定義冷熱存儲實現海量數據存儲的方法。
背景信息
在日志全觀測場景下,通常因為業務場景或監管需求,需要長時間存儲數據或歸檔審計。在使用開源Elasticsearch的過程中,需要進行集群冷熱數據分離,將30天或者更長時間的數據通過集群快照的方式存儲在其他存儲介質上,例如對象存儲OSS等。該方式雖然能夠實現長期日志數據歸檔,但是存儲后不能直接進行查詢,查詢前需要調用相關API把快照信息恢復到集群中,等待快照中的索引初始化完成后再進行查詢,面臨著查詢復雜度大、長時間存儲成本高的問題。
OpenStore存儲引擎結合Indexing Service寫入托管服務,滿足用戶在日志場景下低成本的高并發寫入及長期數據存儲需求。
使用限制
使用OpenStore存儲時,存在以下使用限制。
類別 | 限制說明 |
是否支持新購 | OpenStore自定義冷熱存儲已不支持新購。 |
地域 | 僅開放以下地域(具體以控制臺為準):
|
實例版本 | 僅7.10版本實例支持開啟OpenStore自定義冷熱存儲。 |
實例規格 |
|
實例存儲容量 | 單節點最大存儲數據容量為30 TB。 說明 如果您有更大的單節點存儲需求,請提交工單申請,最大支持50 TB。 |
shard副本數 | 開啟OpenStore自定義冷熱存儲,冷數據存儲至OpenStore時shard副本數默認為0,數據的可靠性將由底層存儲保證。 重要 如果將OpenStore自定義冷熱存儲的索引副本數設置為1,索引將處于yellow狀態,因此不建議手動設置副本,保持默認值即可。 |
索引模板 | 開啟OpenStore自定義冷熱存儲,集群會默認提供模板openstore-index-template,模板默認使用openstore_default_ilm_policy策略。詳細信息請參見通過OpenStore自定義冷熱存儲實現海量數據存儲。 說明 手動刪除OpenStore存儲索引時,需要將索引及索引對應的別名一起刪除才可刪除成功。 |
索引生命周期配置 | 不支持在索引生命周期中自定義freeze。 |
查詢限制 |
|
前提條件
存在已購買的開啟OpenStore自定義冷熱存儲的7.10版本實例。
操作步驟
步驟一:管理OpenStore索引模板
如果您的業務存在頻繁的Put Mapping操作,為避免消耗大量計算資源,對托管服務穩定性造成影響,建議您寫數據前提前定義索引模板,降低Put Mapping操作影響集群穩定性。
方法一:通過控制臺管理索引模板
進入已開啟OpenStore存儲的目標實例,在左側導航欄選擇 。
單擊索引模板管理頁簽。
在索引模板管理頁面,管理您集群中的索引模板。
阿里云Elasticsearch為您提供了OpenStore定制索引模板,您可以查看并修改OpenStore定制的索引模板和生命周期策略,將定制模板快速應用到您的業務索引上。您也可以創建自定義的索引模板,并配置生命周期策略。具體說明如下:
說明由于OpenStore索引數據默認寫入熱節點,達到ILM周期后會遷移到OpenStore存儲,因此不支持在OpenStore索引或模板中配置index.routing.allocation.require.box_type參數。
查看并修改OpenStore定制的索引模板和生命周期策略:
單擊索引模板或生命周期策略名稱,查看OpenStore定制的索引模板和生命周期策略。
OpenStore自定義冷熱存儲對應的索引模板名稱為openstore-index-template,生命周期策略名稱為openstore_default_ilm_policy。
單擊索引模板或生命周期策略右側的修改,修改定制的索引模板和生命周期策略。
定制化的OpenStore模板默認僅對log-service-*索引進行管理。修改時可將索引模式指定為業務索引名稱,并開啟創建數據流,定制模板即可快速應用到業務索引上。
單擊確認。
創建自定義索引模板,并配置生命周期策略:
單擊創建索引模板。
在索引生命周期策略配置向導中,參考下圖配置索引生命周期策略。
詳細參數說明,請參見創建索引模板。
說明Indexing Service實例建議開啟滾動更新,保證數據滾動更新后自動取消云托管能力。
當OpenStore存儲類型為自定義冷熱存儲時,系統默認開啟冷階段和OpenStore存儲,如果您的索引需要進行冷熱生命周期配置,請勿關閉冷階段和OpenStore存儲開關。
取消托管時間默認為3天,3天后自動退出Indexing Service寫入托管服務,減少計費開銷。如果您設置的時長超過冷階段或刪除階段的開始時間,索引進入相應階段后會自動取消托管。取消托管后索引變成只讀,索引將不再通過Indexing Service進行寫入加速。
單擊保存并下一步,在索引模板配置向導中,參考下圖配置索引模板。
詳細參數說明,請參見創建索引模板。
說明Indexing Service實例開啟創建數據流后,才可在數據流管理頁面管理寫入的索引。詳細信息請參見步驟二:將數據流寫入OpenStore索引。
單擊確認。
方法二:通過API管理索引模板
從Elasticsearch 7.10版本開始,索引模板默認會使用優先級最高的配置,不會自動組合兩個索引模板內的配置。由于集群中已經存在默認的OpenStore索引模板,如果您需要再通過API自定義索引模板,而這兩個模板的配置不會自動組合,因此可能會影響OpenStore功能的正常使用,所以建議您使用Elasticsearch組合模板進行配置。
阿里云Elasticsearch不支持通過Kibana Stack Management管理OpenStore內容模板及策略,建議使用API操作或控制臺索引管理中心進行配置管理。
創建自定義冷熱分離存儲索引模板
開啟OpenStore自定義冷熱存儲后,集群中會默認添加OpenStore的組合模板component-openstore-index-template。在自定義模板時,您只需要在腳本的composed_of參數中配置依賴的組合模板,即可使用OpenStore存儲。自定義索引模板的示例腳本如下。
本文中的腳本均可在Kibana控制臺上運行,具體操作請參見登錄Kibana控制臺。
以下腳本中的
...
表示省略部分配置。實際運行時,需要刪除腳本中的注釋信息。如果您使用了自定義的組合模板和策略,請確保索引模板中配置的組合模板名稱與您自定義的組合模板名稱保持一致,即composed_of參數值配置為您自定義的組合模板名稱。
PUT _index_template/template_instance-sls
{
"index_patterns" : [
"-.*"
],
"template" : {
"settings" : {
...
},
"mappings" : {
...
}
},
# 如果您使用了自定義的組合模板和策略,此處需要配置為您自定義的組合模板名稱。
"composed_of" : ["component-openstore-index-template"],
"priority" : 100
}
獲取默認冷熱分離存儲策略
開啟OpenStore存儲的實例默認提供其依賴的內容模板和生命周期策略,您可以通過對應命令獲取配置信息:
通過
GET _component_template/component-openstore-index-template
命令獲取內容模板{ "component_templates" : [ { "name" : "component-openstore-index-template", "component_template" : { "template" : { "settings" : { "index" : { "lifecycle" : { "name" : "openstore_default_ilm_policy", "rollover_alias" : "" }, "apack" : { "cube" : { "following_index" : "true" } }, "codec" : "OpenIndex", "refresh_interval" : "1s" } } } } } ] }
通過
GET _ilm/policy/openstore_default_ilm_policy
命令獲取生命周期策略{ "openstore_default_ilm_policy" : { "version" : 2, "modified_date" : "2022-03-16T06:33:42.802Z", "policy" : { "phases" : { "hot" : { "min_age" : "0s", "actions" : { } }, "cold" : { "min_age" : "3d", "actions" : { "openstore" : { "openstore_repository" : "aliyun_auto_snapshot", "force_merge_index" : true, "user_id" : "1330710960******", "region_id" : "cn-hangzhou", "instance_id" : "es-cn-7mz2lpnaf0012****" }, "set_priority" : { "priority" : 50 } } } } } } }
以下參數均為actions中的必選參數,詳細說明如下。
參數
說明
openstore_repository
OpenStore存儲倉庫名稱,固定為aliyun_auto_snapshot,不支持其他名稱。
user_id
您阿里云賬號的ID。在控制臺上,將鼠標移至右側頭像處,獲取賬號ID。
region_id
instance_id
目標實例的ID。參見查看實例的基本信息,在實例的基本信息頁面查看實例的ID。
force_merge_index
是否執行forcemerge,必須設置為true,不能為false。設置為true,表示數據存儲至OpenStore后,將處于只讀狀態。
自定義冷熱分離存儲策略
集群中已經配置了OpenStore部分的索引模板和生命周期策略名稱,建議不要修改。如果您的業務需要自定義組合模板和策略,可以參考默認模板結構進行配置,示例如下:
索引模板
以下示例創建了名稱為zlcomponent-openstore-index-template的OpenStore索引模板,并使用了自定義的zlopenstore_default_ilm_policy策略。
PUT _component_template/zlcomponent-openstore-index-template { "template" : { "settings" : { "index" : { "lifecycle" : { "name" : "zlopenstore_default_ilm_policy" }, "apack" : { "cube" : { "following_index" : "true" } }, "codec" : "OpenIndex87", "refresh_interval" : "1s" } } } }
生命周期策略
以下示例創建了名稱為zlopenstore_default_ilm_policy的策略,并在模板的基礎上添加了delete階段的配置:
PUT _ilm/policy/zlopenstore_default_ilm_policy { "policy" : { "phases" : { "hot" : { "min_age" : "0ms", "actions" : { } }, "cold" : { "min_age" : "3d", "actions" : { "openstore" : { "openstore_repository" : "aliyun_auto_snapshot", "force_merge_index" : true, "user_id" : "1330710960******", "region_id" : "cn-hangzhou", "instance_id" : "es-cn-7mz2lpnaf0012****" }, "set_priority" : { "priority" : 50 } } }, "delete": { "min_age": "40d", "actions": { "delete": { "delete_searchable_snapshot": true } } } } } }
步驟二:將數據流寫入OpenStore索引
切換到數據流管理頁簽,單擊創建數據流。
說明僅7.10版本同時開啟Openstore和Indexing Service的實例支持在控制臺進行數據流管理。建議您使用數據流相關API(CreateDataStream、RolloverDataStream、ListDataStreams、DeleteDataStream)管理數據。
輸入與索引模板匹配的數據流名稱,單擊確定。
數據流名稱需要一個匹配的索引模板,此處需要輸入ds-您在步驟一:管理OpenStore索引模板中定義的OpenStore索引模板名稱。如果您忘記已創建的索引模板名稱,可單擊預覽已有索引模板查看。
登錄Kibana控制臺,通過bulk批量寫入數據。
在寫入數據時,您可以通過設置寫入的文檔數量超過生命周期配置中文件數限制參數設置的值進行測試。文件數限制參數設置的值,可在步驟一:管理OpenStore索引模板中查看。
切換至索引管理頁簽,查看OpenStore索引的寫入托管狀態、當前生命周期階段等信息。
說明如果是非數據流場景,數據寫入到OpenStore存儲后,索引名稱將以
openstore-*
開頭,不影響業務查詢。
常見問題
Q:索引數據存儲至OpenStore后,為什么無法寫入更新,只能讀取?
A:集群提供的openstore_default_ilm_policy的actions中指定了force_merge_index參數為true,不可更改。當索引force_merge后,索引將處于只讀狀態,無法寫入。
Q:索引數據存儲至OpenStore的過程中,集群狀態為什么會變為異常(紅色)?
A:因為在索引數據復制進OpenStore冷存儲的過程中,冷索引會處于寫入狀態,導致索引狀態變為red,所以集群狀態會變成紅色。而在該復制過程中,熱索引處于正常狀態,并且是可持續對外提供服務的。當寫入完成后,熱索引被刪除,冷索引恢復正常,此時集群也會恢復正常狀態。