關於ElasticSearch的分片問題

起因

偶然間發現有人提了這樣一個問題:ES的每個節點是否有每個索引的完整數據?乍一眼看,這個問題還蠻簡單的,但是又有點詭異,說不上是什麼地方詭異。ok話不多說,我們一起來看一下。

過程

我們先看下面這個圖:

從這個圖我發現兩個Node節點 ,5個shard分片,1個replica備份,沒毛病啊,每個節點就是有完整的信息。。。。停!作爲一個吊炸天(low到爆)的程序員,我怎麼可以輕易下結論,我再次畫了一個圖:

ok,這裏是3個node,3個shard,1份replica,發現了嗎,這邊的話每個節點並沒有完整的數據,但是任意兩個節點有完整的數據

即使一臺機器宕機,剩下兩個節點依然可以提供完整的數據,依然滿足高可用。

結論

發現規律了嗎?其實很簡單 如果每個機器上要有完整的數據 ,需要滿足 分片數*節點數的總分片數量,當然,這裏的總分片數量包含了 主分片和副本分片。因此,我們得出一個公式:副本數replica =(shardNum*nodeNum-shardNum)/shardNum。當replica大於此值時,滿足要求。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章