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 節點因為網路原因失聯了,叢集該如何應對? (這在生產環境中實際遇見過此問題)
叢集會對分片進行再均衡,具體如下:
- Node-3 在網路中失聯了
- Master 立即注意到了這個節點的離線,它決定在叢集內提拔其他擁有 node-3 上面的主分片對應的副本分片為主分片; node-2上的副本0提拔為主分片
- 在副本被提拔為主分片以後,master 節點開始執行恢復操作來重建缺失的副本。叢集中的節點之間互相拷貝分片資料,網絡卡壓力劇增,叢集狀態嘗試變綠。即重新拷貝一個副本1 散落在其他節點。
- 由於目前叢集處於非平衡狀態,這個過程還有可能會觸發小規模的分片移動。其他不相關的分片將在節點間遷移來達到一個最佳的平衡狀態
分片動態變化保證了叢集資料的安全性;同時也會引發其他問題,比如Node-3是偶爾失聯,幾分鐘之內有回來了,那麼這些操作也會不會被終止,恰巧如果叢集資料量巨大,那麼這個機制會引發大量的IO操作,以至於叢集卡死。這樣的結果肯定不是我們想要的。如何解決這個問題,我們將在另外一篇文章叢集管理進行解答。
參考:
《Elasticsearch權威指南》