1. 程式人生 > >elasticsearch技術總結(一)-叢集分片

elasticsearch技術總結(一)-叢集分片

一 分片概念以及設定

分片概念一個 分片 是一個底層的 工作單元 ,它僅儲存了全部資料中的一部分。我們往 Elasticsearch 新增資料時需要用到索引 —— 儲存相關資料的地方。索引實際上是指向一個或者多個物理 分片邏輯名稱空間。

分片分為主分片和副本,數量可以設定。

舉個例子:

假設elasticsearch叢集由6臺伺服器,分別是 node-1、node-2、node-3、node-4、node-5、node-6

分片以及副本的數量在建立索引時候設定:

PUT /index-test-1
{
    "settings" : {
        "index" : {
            "number_of_shards" : 6,
            "number_of_replicas" : 1,
            "max_result_window" : 50000
        } 
    }
}

其中分片數量設定為 6,副本數量設定成 1;即index 包含6個主分片,6個副本,均衡散落在6臺伺服器上;

下圖是kinaba檢視,可以看出該索引分片的散落位置

node -1 : 主分片 5 、副本 4               

node -2 : 副本 0 、副本 2

node -3 : 主分片 0 、副本 1

node -4 : 主分片 3 、主分片 4

node -5 : 副本 3 、副本 5                    

node -6 : 主分片 1 、主分片 2

主分片負責讀、寫,副本只負責讀。


二 分片動態變化

索引建立好之後,在每個節點上的分片或者主從關係並不是一成不變的;

比如node-3 節點因為網路原因失聯了,叢集該如何應對? (這在生產環境中實際遇見過此問題)


叢集會對分片進行再均衡,具體如下:

  1. Node-3 在網路中失聯了
  2. Master 立即注意到了這個節點的離線,它決定在叢集內提拔其他擁有 node-3 上面的主分片對應的副本分片為主分片; node-2上的副本0提拔為主分片
  3. 在副本被提拔為主分片以後,master 節點開始執行恢復操作來重建缺失的副本。叢集中的節點之間互相拷貝分片資料,網絡卡壓力劇增,叢集狀態嘗試變綠。即重新拷貝一個副本1 散落在其他節點。
  4. 由於目前叢集處於非平衡狀態,這個過程還有可能會觸發小規模的分片移動。其他不相關的分片將在節點間遷移來達到一個最佳的平衡狀態

分片動態變化保證了叢集資料的安全性;同時也會引發其他問題,比如Node-3是偶爾失聯,幾分鐘之內有回來了,那麼這些操作也會不會被終止,恰巧如果叢集資料量巨大,那麼這個機制會引發大量的IO操作,以至於叢集卡死。這樣的結果肯定不是我們想要的。如何解決這個問題,我們將在另外一篇文章叢集管理進行解答。

參考:

《Elasticsearch權威指南》