ES 搜索引擎的分片數(shù)、副本數(shù)分配算法

名詞定義

分片

一個 分片 是一個底層的 工作單元 ,它僅保存了全部數(shù)據(jù)中的一部分。 在分片內(nèi)部機(jī)制中,我們將詳細(xì)介紹分片是如何工作的,而現(xiàn)在我們只需知道一個分片是一個 Lucene 的實例,以及它本身就是一個完整的搜索引擎。 我們的文檔被存儲和索引到分片內(nèi),但是應(yīng)用程序是直接與索引而不是與分片進(jìn)行交互。

Elasticsearch 是利用分片將數(shù)據(jù)分發(fā)到集群內(nèi)各處的。分片是數(shù)據(jù)的容器,文檔保存在分片內(nèi),分片又被分配到集群內(nèi)的各個節(jié)點(diǎn)里。 當(dāng)你的集群規(guī)模擴(kuò)大或者縮小時, Elasticsearch 會自動的在各節(jié)點(diǎn)中遷移分片,使得數(shù)據(jù)仍然均勻分布在集群里。

一個分片可以是 主 分片或者 副本 分片。 索引內(nèi)任意一個文檔都?xì)w屬于一個主分片,所以主分片的數(shù)目決定著索引能夠保存的最大數(shù)據(jù)量。

副本分片

一個副本分片只是一個主分片的拷貝。副本分片作為硬件故障時保護(hù)數(shù)據(jù)不丟失的冗余備份,并為搜索和返回文檔等讀操作提供服務(wù)。

副本分片的主要目的就是為了故障轉(zhuǎn)移,如果持有主分片的節(jié)點(diǎn)掛掉了,一個副本分片就會晉升為主分片的角色。在索引寫入時,副本分片做著與主分片相同的工作。新文檔首先被索引進(jìn)主分片然后再同步到其它所有的副本分片。增加副本數(shù)并不會增加索引容量。

在索引建立的時候就已經(jīng)確定了主分片數(shù),但是副本分片數(shù)可以隨時修改。


ES集群核心參數(shù)

ES集群的服務(wù)器個數(shù),

ES集群的總CPU核心個數(shù),

ES集群的總內(nèi)存

預(yù)估要存入ES總數(shù)據(jù)量(數(shù)據(jù)+索引)


通俗理解

分片數(shù)(number_of_shards)就是主分片個數(shù)

副本數(shù)(number_of_replicas) 可以理解成主分片的拷貝個數(shù)

如果主分片數(shù)是5,則每個副本都有5個分片

因此ES集群總的分片數(shù) = 分片數(shù) * (副本數(shù) + 1)


副本數(shù)分配算法:

?副本數(shù) <=? ES集群的服務(wù)器個數(shù) - 1?

副本除了提升查詢效率,主要目的為了容災(zāi),數(shù)據(jù)冗余存儲,保證數(shù)據(jù)安全,因此,副本數(shù)應(yīng)跟據(jù)ES集群中的數(shù)據(jù)庫數(shù)量(N-1)進(jìn)行配置,如果ES集群中有3臺服務(wù)器,則副本數(shù)設(shè)置為2,減 1 因為主分片本身也算一份。副本數(shù)設(shè)置為2,數(shù)據(jù)實際上有3份,分散到3臺服務(wù)器中。


?預(yù)估要存入ES總數(shù)據(jù)量 * (副本數(shù)+1)? <= ES集群的總內(nèi)存 / 2?

存入ES搜索引擎 的數(shù)據(jù)可以預(yù)估,比如預(yù)估存入的數(shù)據(jù)有 100G,則實際上會占用的內(nèi)存為?100G * (副本數(shù)+1)?加 1 因為計入了主分片,數(shù)量里超限了也可以存入,只要磁盤夠大,但是計算時就可能用到了磁盤,磁盤的IO性能會讓整個ES集群性能大副下降。

ES集群的總內(nèi)存只取了一半,因為考虛 ES 的 java. 程序本身占用的內(nèi)存,數(shù)據(jù)聚合運(yùn)算消耗的內(nèi)存,如果實際項目中大量復(fù)雜運(yùn)算,占用的內(nèi)存需要更多。


分片數(shù)分配算法:

?分片數(shù) * (副本數(shù) + 1) <= ES集群的總CPU核心個數(shù)?

分片內(nèi)的檢索運(yùn)算聚合需要 CPU, 為了充分發(fā)揮多核CPU的性能,且又避免CPU頻繁調(diào)度,因此,ES集群內(nèi)總的分片數(shù)應(yīng)小于等于總的CPU核心個數(shù)。


以上是個人理解,因水平有限,難免有不妥之處,不可全信,歡迎交流切磋,歡迎指正。

本文原始網(wǎng)址:https://www.liu12.com/article/es-number-of-rshards-and-eplicas,轉(zhuǎn)載請保留出處

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容