規(guī)格容量評估
在購買或升縮配阿里云Elasticsearch集群前,您可以根據(jù)本文提供的相對通用的評估方法,初步評估集群所需資源的規(guī)格容量,包括節(jié)點規(guī)格、節(jié)點存儲空間和節(jié)點數(shù)量。創(chuàng)建索引前或遇到節(jié)點間磁盤使用率差距很大、節(jié)點CPU使用率呈現(xiàn)明顯的負載不均衡等現(xiàn)象時,評估索引的shard存儲量和數(shù)量。
注意事項
本文根據(jù)實際測試結(jié)果和用戶使用經(jīng)驗提供評估方法。由于不同用戶在數(shù)據(jù)結(jié)構(gòu)、查詢復(fù)雜度、數(shù)據(jù)量大小、性能及數(shù)據(jù)變化等方面的需求不同,本文的評估不一定適用于所有用戶。建議您在條件允許的情況下,通過實際的數(shù)據(jù)和使用場景測試出適合自己的集群規(guī)格容量規(guī)劃。
評估集群存儲空間
影響ES集群存儲空間大小的因素主要包括:
源數(shù)據(jù)的大小。
索引的副本數(shù)量:每個索引至少需要1個副本。
索引開銷:通常比源數(shù)據(jù)大10%。
例如,存儲X-Pack組件用于異常分析的監(jiān)控類索引,主要包含:
.monitoring-es-6-*:占用空間相對比較大,默認保留最近7天的索引數(shù)據(jù)。
.monitoring-kibana-6-*:索引數(shù)越大占用空間也越大,默認保留最近7天的索引數(shù)據(jù)。
.watcher-history-3-*:占用空間相對比較小,如果開啟,需要您手動刪除。
ES實例內(nèi)部開銷:段合并、日志等內(nèi)部操作,預(yù)留20%。
存儲集群日志(包括運行日志、訪問日志和慢日志)隨著查詢或推送訪問量的增加,空間占比不斷增大,默認保留最近7天的日志,不支持修改。
操作系統(tǒng)預(yù)留空間:默認操作系統(tǒng)會保留5%的文件系統(tǒng)供您處理關(guān)鍵流程、系統(tǒng)恢復(fù)以及磁盤碎片等。
安全閾值:通常至少預(yù)留15%的安全閾值。
根據(jù)以上因素得到建議集群存儲空間:
集群存儲空間 = 源數(shù)據(jù) *(1 + 副本數(shù)量)* 索引開銷 /(1 - 操作系統(tǒng)預(yù)留空間)/(1 - ES實例內(nèi)部開銷)/(1 - 安全閾值)
= 源數(shù)據(jù) *(1 + 副本數(shù)量)* 1.7
= 源數(shù)據(jù) * 3.4
以上計算以副本數(shù)量為1為例,如果調(diào)整副本數(shù)量,請重新計算。
評估節(jié)點規(guī)格和節(jié)點數(shù)量
數(shù)據(jù)節(jié)點
最大節(jié)點數(shù)量 = 單節(jié)點CPU大小 * 5。
業(yè)務(wù)場景不同,單節(jié)點最大承載數(shù)據(jù)量也不同:
通用場景:單節(jié)點最大存儲空間 = 單節(jié)點內(nèi)存大小(GiB)* 30。
搜索場景(數(shù)據(jù)庫加速、查詢聚合等):單節(jié)點最大存儲空間 = 單節(jié)點內(nèi)存大小(GiB)* 10。
日志分析場景(日志寫入、離線分析等):單節(jié)點最大存儲空間 = 單節(jié)點內(nèi)存大小(GiB)* 50。
根據(jù)以上計算方式,得到部分節(jié)點規(guī)格的最大節(jié)點數(shù)量和單節(jié)點最大存儲空間:
節(jié)點規(guī)格 | 最大節(jié)點數(shù)量 | 單節(jié)點最大存儲空間 | ||
通用場景 | 搜索場景 | 日志分析場景 | ||
2核4 GiB | 10 | 120 GiB | 40 GiB | 200 GiB |
2核8 GiB | 10 | 240 GiB | 80 GiB | 400 GiB |
4核16 GiB | 20 | 480 GiB | 160 GiB | 800 GiB |
8核32 GiB | 40 | 960 GiB | 320 GiB | 1.5 TiB |
16核64 GiB | 80 | 1.9 TiB | 640 GiB | 3 TiB |
集群存儲空間=單節(jié)點存儲空間*節(jié)點數(shù)量
,您可以根據(jù)單節(jié)點最大存儲空間和最大節(jié)點數(shù)量選擇滿足業(yè)務(wù)要求的節(jié)點規(guī)格。
數(shù)據(jù)節(jié)點數(shù)量會影響Shard總數(shù)量,在確定實例規(guī)格前您還需要評估索引的Shard。
聚合查詢(Agg查詢)場景,數(shù)據(jù)節(jié)點規(guī)格建議選擇1:2規(guī)格族,并開啟協(xié)調(diào)節(jié)點。
專有主節(jié)點
如果集群的數(shù)據(jù)節(jié)點較多,建議您開啟專有主節(jié)點,以保證集群穩(wěn)定性。
專有主節(jié)點規(guī)格選擇:
初始規(guī)格:2 核8 GiB
超過10個數(shù)據(jù)節(jié)點:4 核16 GiB
超過30個數(shù)據(jù)節(jié)點:8 核32 GiB
超過50個數(shù)據(jù)節(jié)點:16 核64 GiB
如果您的集群索引數(shù)、分片數(shù)較多或數(shù)據(jù)變更比較頻繁,對專有主節(jié)點的依賴較重,需要適當(dāng)提高專有主節(jié)點規(guī)格。
協(xié)調(diào)節(jié)點
使用獨立的協(xié)調(diào)節(jié)點,可以對最終的結(jié)果進行reduce操作,這樣即使reduce階段出現(xiàn)GC嚴重的現(xiàn)象,也不會影響數(shù)據(jù)節(jié)點。
如果開啟協(xié)調(diào)節(jié)點,建議協(xié)調(diào)節(jié)點與數(shù)據(jù)節(jié)點個數(shù)的比例為1:5(協(xié)調(diào)節(jié)點2個起購),協(xié)調(diào)節(jié)點建議選擇1:4或1:8規(guī)格族。例如,10個8核32 GiB的數(shù)據(jù)節(jié)點,建議配置2個8核32 GiB的協(xié)調(diào)節(jié)點。
評估Shard
Shard存儲量和數(shù)量是影響阿里云ES集群穩(wěn)定性和性能的重要因素之一。ES集群中任何一個索引都需要進行合理的Shard規(guī)劃,防止因業(yè)務(wù)不明確導(dǎo)致分片龐大消耗ES本身性能,或?qū)е仑撦d不均衡,例如節(jié)點間磁盤使用率差距很大,節(jié)點CPU使用率呈現(xiàn)明顯的負載不均衡。
Shard是索引在ES中的分布式存儲單元,包括主分片和副本分片。詳細信息,請參見分片和副本。
在進行Shard規(guī)劃前,需要先考慮以下幾個問題:
當(dāng)前單個索引的數(shù)據(jù)多大?
數(shù)據(jù)是否會持續(xù)增長?
購買的實例規(guī)格多大?
是否會定期刪除索引或合并臨時索引?
基于以上問題,下文對Shard規(guī)劃提供了一些建議。這些建議僅供參考,實際業(yè)務(wù)中還需根據(jù)需求進行調(diào)整:
Shard存儲量
建議單個Shard存儲量保持在30 GiB以內(nèi)(最優(yōu)),特殊情況下可以提升到50 GiB以內(nèi)。
對于日志分析或者超大索引場景,建議單個Shard存儲量不要超過100 GiB。
Shard數(shù)量
在分配Shard前,建議對ES進行數(shù)據(jù)測試。
數(shù)據(jù)量很大時,需要減少寫入量的大小,降低ES壓力,建議選擇多主1副本。
數(shù)據(jù)量較小,且寫入量也較小時,建議使用單主多副本或者單主1副本。
說明7.x及以上版本實例默認一個索引創(chuàng)建1個主分片和1個副本分片。7.x以下版本實例默認一個索引創(chuàng)建5個主分片,并分別為每個主分片創(chuàng)建1個副本分片。
Shard存儲量低于30 GiB的業(yè)務(wù),可以使用單主多副本的策略進行負載均衡。例如,20 GiB的單索引,分布在5個數(shù)據(jù)節(jié)點中,可以考慮單主4副本的Shard規(guī)劃。
建議Shard個數(shù)(包括主分片和副本分片)盡可能等于數(shù)據(jù)節(jié)點數(shù),或者是數(shù)據(jù)節(jié)點數(shù)的整數(shù)倍。
建議單個節(jié)點上同一索引的Shard個數(shù)不要超過5個。
建議按照以下說明,評估單個節(jié)點上全部索引的Shard數(shù)量。
小規(guī)格實例參考:單個數(shù)據(jù)節(jié)點的Shard數(shù)量 = 當(dāng)前節(jié)點的內(nèi)存大小 * 30
大規(guī)格實例參考:單個數(shù)據(jù)節(jié)點的Shard數(shù)量 = 當(dāng)前節(jié)點的內(nèi)存大小 * 50
說明評估Shard數(shù)量時,還需結(jié)合數(shù)據(jù)量進行分析,建議TiB級別以下的數(shù)據(jù)量參考小規(guī)格實例進行評估。
7.x版本ES實例默認的單節(jié)點Shard上限為1000個(官方不建議調(diào)整),您可以通過增加或擴容節(jié)點數(shù)量來調(diào)整單節(jié)點的Shard數(shù)量。
Shard個數(shù)不是越多越好。主分片越多ES性能開銷也會越大,shard數(shù)量太多極易引起文件句柄耗盡,導(dǎo)致集群故障。
關(guān)于評估Shard的更多信息,請參見How to size your shards。
相關(guān)文檔
了解不同地域和版本支持的節(jié)點規(guī)格或購買ES實例,請參見購買頁。
了解不同節(jié)點規(guī)格的性能,可以參考阿里云ES實例不同規(guī)格和版本的壓測實驗結(jié)果,請參見產(chǎn)品性能。
如果您對選擇實例類型(通用商業(yè)版、內(nèi)核增強型)或?qū)嵗姹居幸蓡枺垍⒁?a href="http://m.bestwisewords.com/zh/es/product-overview/overview-6" id="82475643659ke" title="" class="xref">版本特性。
對于已存在的集群,您可以根據(jù)評估結(jié)果調(diào)整節(jié)點規(guī)格、節(jié)點存儲空間、節(jié)點數(shù)量等。具體操作和限制,請參見升配集群和降配集群。
主分片的數(shù)量只能在創(chuàng)建索引時指定,并且創(chuàng)建索引后不能更改。創(chuàng)建索引,請參見創(chuàng)建索引。
對于已存在的索引,如果Shard超過推薦存儲量,建議通過reindex重建索引。具體操作,請參見阿里云ES間跨集群reindex。
說明reindex能保證不停機,但是比較耗時。
如果開啟了自動創(chuàng)建索引功能,建議啟用索引生命周期管理,或者通過ES API腳本刪除過期的索引。
建議及時清理小索引,小索引同樣會占用ES堆內(nèi)存。