本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
OpenStore智能混合存儲引擎是阿里云Elasticsearch(簡稱ES)團隊針對日志場景自研的彈性、高效、低成本的日志存儲引擎。智能混合存儲可突破傳統冷熱分離架構,大幅降低集群數據接入復雜度的同時,進一步降低云上海量數據的存儲成本。本文介紹使用OpenStore智能混合存儲實現海量數據存儲的方法。
背景信息
在日志全觀測場景下,通常因為業務場景或監管需求,需要長時間存儲數據或歸檔審計。在使用開源Elasticsearch的過程中,需要進行集群冷熱數據分離,將30天或者更長時間的數據通過集群快照的方式存儲在其他存儲介質上。該方式雖然能夠實現長期日志數據歸檔,但是存儲后不能直接進行查詢,查詢前需要調用相關API把快照信息恢復到集群中,等待快照中的索引初始化完成后再進行查詢,面臨著查詢復雜度大、長時間存儲成本高的問題。
OpenStore智能混合存儲引擎是阿里云Elasticsearch 7.10內核增強版的重要功能,結合Indexing Service寫入托管服務,滿足用戶在日志場景下低成本的高并發寫入及長期數據存儲需求。
使用限制
購買和使用OpenStore存儲時,存在以下使用限制。
類別 | 限制說明 |
地域 | 目前僅開放以下地域(具體以控制臺為準):
|
實例版本 | 僅7.10版本實例支持開啟Openstore智能混合存儲功能。 |
實例規格 | 僅支持選擇OpenStore存儲型8核64 GB、16核64 GB規格。 |
實例存儲容量 | 單節點最大存儲數據容量為30 TB。 說明 如果您有更大的單節點存儲需求,請提交工單申請,最大支持50 TB。 |
shard副本數 | 開啟OpenStore智能混合存儲,shard副本數須大于等于1。 警告 多副本之間共享一份數據,不增加額外存儲成本。多副本用于保證本地存儲寫入加速的可靠性,如果未設置多副本可能會導致部分實時寫入數據的丟失,丟失后數據無法恢復。 |
索引模板 |
詳細信息,請參見通過OpenStore智能混合存儲實現海量數據存儲。 說明 手動刪除OpenStore存儲索引時,需要將索引及索引對應的別名一起刪除才可刪除成功。 |
索引生命周期配置 | 不支持在索引生命周期中自定義freeze。 |
查詢限制 |
|
集群分片數限制 | 建議80000以下。 |
節點分片數限制 | 建議3000以下。 |
單分片大小 | 建議40 G以下。 |
數據盤寫入吞吐 | 數據盤實際使用水位在85%以下,300 MB/s。 數據盤實際使用水位在85%以上,100 MB/s。 |
操作步驟
步驟一:開啟OpenStore存儲
您可以在創建7.10內核增強版實例時,開啟Openstore智能混合存儲功能。
- 登錄阿里云Elasticsearch控制臺。
- 在左側導航欄,單擊Elasticsearch實例。
在Elasticsearch實例頁面,單擊創建。
在購買頁面,實例類型選擇內核增強版,Elasticsearch版本選擇7.10,在內核增強特性的高級增強功能中選中Openstore智能混合存儲(日志場景)。
說明除部分地域如德國(法蘭克福)、美國(弗吉尼亞)、日本(東京)外,開啟Openstore智能混合存儲功能會同時開啟Indexing Service索引構建服務,實際以控制臺為準。
在實例規格中,選中數據節點,選擇OpenStore混合存儲型規格族的規格,規格支持8核64G和16核64G兩種。
說明每個OpenStore節點的最大存儲數據量為30 TB。如果您有更大的單節點存儲需求,請提交工單申請,最大支持50 TB。
配置其他參數后,完成實例購買。
說明其他參數的配置信息,請參見創建阿里云Elasticsearch實例。
開啟OpenStore后,建議您在控制臺關閉自動快照備份功能,具體操作請參見關閉自動備份。
步驟二:管理OpenStore索引模板
如果您的業務存在頻繁的Put Mapping操作,為避免消耗大量計算資源,對托管服務穩定性造成影響,建議您寫數據前提前定義索引模板,降低Put Mapping操作影響集群穩定性。
方法一:通過控制臺管理索引模板
進入已開啟OpenStore存儲的目標實例,在左側導航欄選擇 。
單擊索引模板管理頁簽。
在索引模板管理頁面,管理您集群中的索引模板。
阿里云Elasticsearch為您提供了OpenStore定制索引模板,您可以查看并修改OpenStore定制的索引模板和生命周期策略,將定制模板快速應用到您的業務索引上。您也可以創建自定義的索引模板,并配置生命周期策略。具體說明如下:
說明由于OpenStore索引數據默認寫入熱節點,達到ILM周期后會遷移到OpenStore存儲,因此不支持在OpenStore索引或模板中配置index.routing.allocation.require.box_type參數。
如果您需要在控制臺管理索引模板,例如修改Openstore定制索引模板、創建自定義組合模板:
1.8及以下內核版本必須在索引模板配置 > 內容模板配置 > 組合內容模板中選中
component-hybrid-openstore-index-template
模板,確保數據默認寫入OpenStore,避免業務數據量過大導致集群磁盤不夠用。1.9及以上內核不需要手動指定
component-hybrid-openstore-index-template
模板,系統將自動應用相關配置。
查看并修改OpenStore定制的索引模板和生命周期策略:
單擊索引模板或生命周期策略名稱,查看OpenStore定制的索引模板和生命周期策略。
OpenStore智能混合存儲對應的索引模板名稱為hybrid_openstore_index_template,生命周期策略名稱為hybrid_openstore_default_ilm_policy。
單擊索引模板或生命周期策略右側的修改,修改定制的索引模板和生命周期策略。
定制化的OpenStore模板默認僅對log-service-*索引進行管理。修改時可將索引模式指定為業務索引名稱,并開啟創建數據流,定制模板即可快速應用到業務索引上。
單擊確認。
創建自定義索引模板,并配置生命周期策略:
單擊創建索引模板。
在索引生命周期策略配置向導中,參考下圖配置索引生命周期策略。
詳細參數說明,請參見創建索引模板。
說明Indexing Service實例建議開啟滾動更新,保證數據滾動更新后自動取消云托管能力。
當OpenStore存儲類型為智能混合存儲時,無冷階段。
取消托管時間默認為3天,3天后自動退出Indexing Service寫入托管服務,減少計費開銷。如果您設置的時長超過冷階段或刪除階段的開始時間,索引進入相應階段后會自動取消托管。取消托管后索引變成只讀,索引將不再通過Indexing Service進行寫入加速。
單擊保存并下一步,在索引模板配置向導中,參考下圖配置索引模板。
詳細參數說明,請參見創建索引模板。
說明1.9及以上內核不需要指定
component-hybrid-openstore-index-template
模板,系統將自動應用openstore相關配置。Indexing Service實例開啟創建數據流后,才可在數據流管理頁面管理寫入的索引。詳細信息請參見將數據流寫入OpenStore索引。
以下參數無需在實例控制臺settings中指定,否則頁面報錯:
index.lifecycle.name(產品將自動配置)
index.apack.cube.following_index(產品將自動配置)
index.routing.allocation.require.box_type(日志增強版實例不支持指定該參數)
單擊確認。
方法二:通過API管理索引模板
從Elasticsearch 7.10版本開始,索引模板默認會使用優先級最高的配置,不會自動組合兩個索引模板內的配置。由于集群中已經存在默認的OpenStore索引模板,如果您需要再通過API自定義索引模板,而這兩個模板的配置不會自動組合,因此可能會影響OpenStore功能的正常使用,所以建議您使用Elasticsearch組合模板進行配置。
阿里云Elasticsearch不支持通過Kibana Stack Management管理OpenStore內容模板及策略,建議使用API操作或控制臺索引管理中心進行配置管理。
創建混合存儲索引模板
開啟OpenStore智能混合存儲后,集群中會默認添加組合模板component-hybrid-openstore-index-template。自定義模板時,請按照實例對應的內核選擇以下方式創建模板:
1.8.0及以下內核實例創建模板時需指定component-hybrid-openstore-index-template,該模板中包含了該集群的專有環境配置,涉及訪問權限控制,非必要請勿修改,以免影響集群功能。
PUT _index_template/test-template { "index_patterns" : [ "test-index-*" ], "template" : { "settings" : { "index.number_of_replicas": "1", "index.number_of_shards": "6", "index.lifecycle.name": "zlopenstore_default_ilm_policy" }, "aliases" : {} }, "composed_of" : [ # 混合存儲組合模板 "component-hybrid-openstore-index-template" ], "priority" : 100 }
1.9及以上內核小版本實例無需手動執行,默認會應用openstore模板。開啟Indexing service的實例通過API自定義模板時,必須將
index.apack.cube.following_index
設置為true,否則無法托管索引。PUT _index_template/test-template { "index_patterns" : [ # 索引模板 "test-index-*" ], "template" : { "settings" : { "index.number_of_replicas": "1", "index.number_of_shards": "6", "index.lifecycle.name": "zlopenstore_default_ilm_policy", "index.apack.cube.following_index": true }, "aliases" : {} }, "priority" : 100 }
本文中的腳本均可在Kibana控制臺上運行,具體操作請參見登錄Kibana控制臺。
以下腳本中的
...
表示省略部分配置。實際運行時,需要刪除腳本中的注釋信息。
自定義混合存儲策略
以下示例創建了名稱為zlopenstore_default_ilm_policy的生命周期策略,并在模板的基礎上添加了delete階段的配置。
PUT _ilm/policy/zlopenstore_default_ilm_policy
{
"policy" : {
"phases" : {
"hot" : {
"min_age" : "0s",
"actions" : {
"rollover" : {
"max_size" : "50gb",
"max_age" : "30d",
"max_docs" : 10000
},
"cube_unfollow" : {
"max_age" : "3d",
"force_merge" : true,
"force" : false,
"read_only" : true
},
"set_priority" : {
"priority" : 1000
}
}
},
"delete" : {
"min_age" : "30d",
"actions" : {
"delete" : {
"delete_searchable_snapshot" : true
}
}
}
}
}
}
參數 | 說明 |
rollover | 配置rollover滾動更新策略。 |
cube_unfollow | 配置Indexing Service退出托管策略。 |
delete | 配置索引過期刪除策略。 |
獲取默認混合存儲策略
開啟OpenStore智能混合存儲的實例默認提供其依賴的內容模板和生命周期策略,您可以通過對應命令獲取配置信息:
通過
GET _component_template/component-hybrid-openstore-index-template
命令獲取內容模板{ "component_templates" : [ { "name" : "component-hybrid-openstore-index-template", "component_template" : { "template" : { "settings" : { "index" : { "replication" : { "type" : "segment" }, "apack" : { "cube" : { "following_index" : "true" } }, "codec" : "OpenIndex", "allocation" : { "existing_shards_allocator" : "open_store_allocator" }, "refresh_interval" : "1s", "store" : { "type" : "openstore", "openstore" : { "endpoint" : "http://oss-cn-hangzhou-internal.aliyuncs.com", "ram_name" : "snapshot-role-133071096032****", "type" : "hybrid", "bucket_name" : "openstore-133071096032****-es-cn-2r42xjwrz0008****" } } } } } } } ] }
重要建議直接采用模板中的默認配置,盡量避免手動配置,以免影響集群使用。
通過
GET _ilm/policy/hybrid_openstore_default_ilm_policy
命令獲取生命周期策略{ "hybrid_openstore_default_ilm_policy" : { "version" : 1, "modified_date" : "2022-09-08T03:51:23.042Z", "policy" : { "phases" : { "hot" : { "min_age" : "0ms", "actions" : { "cube_unfollow" : { "max_age" : "3d", "force_merge" : true, "force" : false, "read_only" : true } } } } } } }
actions中的cube_unfollow參數用來設置Indexing Service退出寫入托管的相關配置,默認3天退出Indexing Service寫入托管。
步驟三:將數據流寫入OpenStore索引
切換到數據流管理頁簽,單擊創建數據流。
說明僅7.10版本同時開啟Openstore和Indexing Service的實例支持在控制臺進行數據流管理,單獨開啟Openstore的實例暫不支持在控制臺進行數據流管理。建議您使用數據流相關API(CreateDataStream、RolloverDataStream、ListDataStreams、DeleteDataStream)管理數據。
輸入與索引模板匹配的數據流名稱,單擊確定。
數據流名稱需要一個匹配的索引模板,此處需要輸入ds-您在步驟二:管理OpenStore索引模板中定義的OpenStore索引模板名稱。如果您忘記已創建的索引模板名稱,可單擊預覽已有索引模板查看。
登錄Kibana控制臺,通過bulk批量寫入數據。
在寫入數據時,您可以通過設置寫入的文檔數量超過生命周期配置中文件數限制參數設置的值進行測試。文件數限制參數設置的值,可在步驟二:管理OpenStore索引模板中查看。
切換至索引管理頁簽,查看OpenStore索引的寫入托管狀態、當前生命周期階段等信息。
常見問題
Q:索引數據存儲至OpenStore后,為什么無法寫入更新,只能讀取?
A:集群提供的openstore_default_ilm_policy的actions中指定了force_merge_index參數為true,不可更改。當索引force_merge后,索引將處于只讀狀態,無法寫入。
Q:如何將Elasticsearch數據遷移到OpenStore混合存儲中?
A:您可以通過OSS快照備份功能將Elasticsearch數據遷移到OpenStore混合存儲中。具體操作,請參見將Elasticsearch數據遷移到OpenStore智能混合存儲和將OSS快照數據恢復至阿里云Elasticsearch OpenStore中。