阿里云Elasticsearch內核增強版的高級特性Indexing Service索引構建服務和Openstore智能混合存儲,廣泛應用于海量存儲日志場景。本文從實踐應用入手,幫助您快速使用阿里云ES內核增強版的高級特性功能。
相關文檔
建議您優先完成最佳實踐,熟悉整個操作流程。
分類 | 文檔 |
高級特性介紹 | 7.10內核增強版實例支持開啟高級特性。高級特性包括:
|
最佳實踐 |
|
遷移 |
說明 ES數據遷移到OpenStore存儲前,需提前在源集群中將索引segment forcemerge為1,否則數據遷移到OpenStore后查詢性能降低。 |
內核增強版實例使用須知
索引存儲到Openstore自定義冷熱存儲后,將處于只讀狀態。不再支持將新數據寫入Openstore索引,并且不支持通過修改index.blocks.write參數為
null
控制索引寫入,否則索引將異常。在Indexing Service實例中數據托管不支持自定義分詞類插件、IK詞典、同義詞詞典等的應用。
內核增強版存儲及托管服務按照寫入流量、存儲空間進行按量計費。詳細信息,請參見ES計費項。
您可以在實例詳情頁的基本信息頁面的節點可視化區域,查看Indexing Service當天寫入總流量、托管總數據量、OpenStore截止到昨日存儲用量和OpenStore存儲當前實時預估用量等離線監控數據,一般1小時統計一次數據。
OpenStore存儲一般無空間上限限制,建議OpenStore存儲按照單節點最大存儲數據容量30 TB規劃集群存儲的總數據量。更多限制說明,請參見智能混合存儲使用限制和自定義冷熱存儲使用限制。
購買內核增強版實例后,建議在接入生產流量前提前配置好集群,避免集群應用生產后因頻繁修改配置需要多次重啟。具體操作請參考業務依賴集群YML配置和內核增強版必配。
使用內核增強版實例推薦使用datastream配置ILM rollover控制索引流創建,降低創建索引頻率,減少小索引個數。頻繁索引或小索引較多,會加重主節點數據管理能力,影響實例穩定性。
業務數據寫入Indexing Service前,請結合業務寫入情況評估實例級別寫入流量、Put Mapping操作和單分片級別的最大寫入流量,如果寫入流量超過限定值,將返回429狀態碼。您可以參考以下情況進行優化。更多限制說明,請參見Indexing Service使用限制。
不帶主鍵寫入流量最大為10 MB/s
帶主鍵寫入流量最大為5 MB/s
執行
GET _cat/tasks?v
命令時可能會看到apack/cube/metadata/sync
相關任務,該任務為Indexing Service數據同步任務,禁止取消該任務,如被清理,請盡快使用POST /_cube/meta/sync
命令恢復,否則影響業務寫入。日志場景一般管理的索引數、數據量比較大,而大批量刪除索引或數據(如減少TB級別索引副本數),可能會影響節點穩定性,建議避免一次性大批量刪除索引,結合ILM管理索引生命周期,將大數據量索引建議拆分成小索引。
索引存儲到Openstore智能混合存儲后,將處于只讀狀態。少量寫入場景且集群壓力未達到瓶頸時,可將index.blocks.write修改為
null
實現新數據寫入,寫完后請將索引置為只讀。
限流 | 限流值 | 優化建議 |
實例級別限流 | 寫入流量最大為200 MB/s | 建議業務控制寫入流量,如果您有更大的使用需求,請提交工單。 |
Put Mapping操作 | Put Mapping最大為50 tps/s | 建議您提前定義索引模板,在模板中指定Mapping,降低Put Mapping操作,否則大量的字段創建、更新極易觸發限流。具體操作,請參見配置內容模板。 |
單分片流量 | 按照整體業務流量及寫入索引分片總數評估單分片流量,可適當增加主分片數提高索引流量。 |
內核增強版實例必配
購買阿里云ES內核增強版實例后,請進行以下配置:
Openstore混合存儲在可維護窗口期內采用藍綠變更方式進行升級,您可以在實例基本信息頁面指定業務低峰為可維護時間段。
如果需要通過Kibana訪問ES實例,需配置ES私網白名單。具體操作,請參見配置Kibana公網或私網訪問白名單。
內存大于32 GB的實例需要手動將默認的CMS垃圾回收器修改為G1垃圾回收器,以提高GC回收效率。具體操作,請參見配置垃圾回收器。
說明內存大于32GB的內核增強版實例包括:
開啟OpenStore智能混合或自定義冷熱存儲的實例.
Indexing Service數據節點大于32 GB的實例。
實例開啟自動創建索引或通過API按需配置自動創建索引范圍。更多信息,請參見配置YML參數。
PUT /_cluster/settings { "persistent": { "action": { "auto_create_index": "true" } } } //僅對test開頭的業務索引開啟自動創建功能 PUT /_cluster/settings { "persistent": { "action": { "auto_create_index": "+.*,+test*,-*" } } }
針對不同存儲類型的內核增強版實例,請按照以下要求配置索引生命周期策略和索引模板。具體操作,請參見創建索引模板。
Indexing Service+云盤存儲:按照功能提示,完成索引生命周期策略配置(取消托管時間)和索引模板配置(Settings,Mapping,Aliases)。
說明數據寫入實例后,索引默認處于托管狀態,索引Settings中的index.apack.cube.following_index參數為true。
如果您通過API自定義創建模板,請務必將index.apack.cube.following_index參數設置為true。
如果您不想托管索引,請將index.apack.cube.following_index參數設置為false。
Indexing Service+OpenStore智能混合存儲:按照功能提示,完成索引生命周期策略配置(取消托管時間)和索引模板配置(Settings,Mapping,并關聯組合內容模板
component-hybrid-openstore-index-template
)。Indexing Service+OpenStore自定義冷熱存儲:按照功能提示,完成索引生命周期策略配置(取消托管時間)和索引模板配置(Settings,Mapping,并關聯組合內容模板
openstore-index-template
)。
說明請務必配置好索引模板,否則數據將不會被托管或轉存到OpenStore中。
強烈建議在索引模板中指定Mapping,否則大量的字段創建、更新極易觸發限流。
如果寫入的索引中沒有相關依賴信息,索引將不會轉存到OpenStore存儲。
實例提供的默認內容模板中均已配置好OpenStore存儲相關的依賴,您可以直接調用組合內容模板。禁止對默認組合模板進行修改,如果需要自定義組合模板可直接復制默認組合模板中的內容。
如果開啟OpenStore智能混合存儲,shard副本數須大于等于1,用于保證本地存儲寫入加速的可靠性。詳細信息,請參見智能混合存儲使用限制。
配置集群一鍵報警(磁盤,CPU,內存等)和指標報警(集群分片數,節點個數等),當資源達到警戒值時,請及時擴容或限流。具體操作請參見配置集群報警和配置指標報警。
ES 7.x版本實例的單機分片數限制為1000,如果分片數超過
1000*數據節點個數
,將無法創建新索引,可通過調整參數max_shards_per_node
解決。PUT _cluster / settings { "persistent": { "cluster": { "max_shards_per_node": "5000" } } }
提升實例性能的方法
寫入場景中如果指定主鍵ID寫入,會消耗大量的計算資源,建議您將主鍵值存儲為獨立的字段,讓ES自動添加主鍵。
集群segment數(例如20萬)越多,對查詢性能越不利,內核增強版實例內存為64 GB,建議按照單機5000評估segment數,當超過5000時可適當縮短取消托管任務時間。例如:從默認的3天調整為2天觸發取消托管,降低segment數,提高查詢性能。
關注fielddata監控指標。如果fielddata內存超過1 GB,排查fielddata內存使用率較高的原因,優化查詢語句,定期清理fielddata緩存。更多信息,請參見fielddata內存使用率高問題的排查與處理方法。
清理fielddata緩存的腳本示例如下,其中
<password>
和<host>
需要替換為您的ES實例的密碼和私網地址。###在同vpc網絡的ECS服務器上配置crontab定時任務,在業務低峰期執行清理fielddata緩存。 vimclear_fielddata.sh #!/bin/bash curl-XPOST-u elastic:<password> http://<host>/_cache/clear?fielddata=true" #為腳本賦予可執行權限 chmoda+xclear_fielddata.sh #腳本執行交由crontab執行 crontab-e 00***sh/home/elastic/clear_fielddata.sh>/dev/null&2>&1
內核增強版實例相比商業版實例在存儲量級和成本上有優勢,在查詢場景,建議通過range控制查詢落在熱節點索引上,提高查詢性能。
如果業務查詢中存在range和sort,建議在索引或索引模板中指定sort.field和sort.order,并配置
points.same_sort_order_as_index_sort
參數,寫入階段提前實現預排序,提高查詢性能。range字段和sort排序字段要一致,最好指定一個時間字段。
創建索引模板時,mapping中提前指定要排序的時間字段。
示例如下,其中
points.same_sort_order_as_index_sort
主要實現bkd排序順序和index sort順序一致,提高range查詢性能。說明僅7.10版本且內核1.8.0及以上的實例提供points.same_sort_order_as_index_sort參數。
PUT /_index_template/test-template { "index_patterns" : ["test*"], "priority" : 1, "template": { "settings" : { "number_of_shards" : 2, "sort.field" : [ "timestamp" ], "sort.order" : [ "desc" ], "points.same_sort_order_as_index_sort" : "true" }, "mappings": { "properties": { "age": { "type": "integer" }, "email": { "type": "keyword" }, "timestamp": { "type": "date" } } } } }
更多信息,請參見index sorting官網說明。
海量寫入場景中,如果寫入的文檔沒有指定主鍵,可開啟定向路由,提高寫入性能。
PUT _cluster/settings { "persistent" : { "index.direct_routing.global.enable" : "true" } }
更多信息,請參見開啟定向路由。