1. 程式人生 > >es遷移分片,重置主節點。

es遷移分片,重置主節點。

問題描述

  • es部署後可能因為配置原因導致es節點不在叢集中,但是程序依然存在。
    現在已下面5臺機器作為測試演練
  • 一開始按照之前的es部署方案,會在5臺中選擇一臺作為主節點,當然該節點也充當了資料節點的功能。

第一步:(22,23,24,25,26分別對應圖中的06-10機器)

  • 在5臺機器上部署成功後,一開始23為主節點。(這時候23推選為主節點,也充當了資料節點。所以22,23,24,25,26節點上有資料).

第二步:

  • 我們將22,24,26上的分片手動遷移到23,25上,這個時候22,24,26上就沒有資料了。(規劃:22,24作為主節點 23,25作為資料節點 26作為協調節點。)
  • 遷移資料
    elasticsearch可以通過reroute api來手動進行索引分片的分配。
    不過要想完全手動,必須先設定cluster.routing.allocation.disable_allocation的值
    具體設定參考該值的設定以及解釋
    官網上的解釋官網配置
curl -XPUT 172.18.1.22:9200/_cluster/settings -d'{
    "transient": {
        "cluster.routing.allocation.enable": "none"
    }
}'

遷移完記得改回來該值

curl -XPUT 172.18
.1.22:9200/_cluster/settings -d'{ "transient": { "cluster.routing.allocation.enable": "all" } }'

遷移具體的分片到其他節點上去。

curl -XPOST '172.18.1.22:9200/_cluster/reroute' -d  '{
    "commands" : [
        {
            "move" : {
                "index" : "info-test", "shard" : 3,
                "
from_node" : "172.18.1.26", "to_node" : "172.18.1.25" } } ] }'

該指令意思是將26上的info-test索引的3這個分片遷移到25機器上去

  • 當所有的分片都遷移完就會出現下圖這樣

第三步:

  • 修改了配置將22,24作為主節點, 23,25作為資料節點 ,26作為協調節點,重啟服務後。
    具體的設定只是添加了node.master和node.data的值。看了下面的相信你就知道怎麼設定了。引用了別人部落格中的內容node.master詳解
在生產環境下,如果不修改elasticsearch節點的角色資訊,在高資料量,高併發的場景下叢集容易出現腦裂等問題。
預設情況下,elasticsearch叢集中每個節點都有成為主節點的資格,也都儲存資料,還可以提供查詢服務。
這些功能是由兩個屬性控制的。
node.master和node.data
預設情況下這兩個屬性的值都是true。
下面詳細介紹一下這兩個屬性的含義以及不同組合可以達到的效果。
node.master:這個屬性表示節點是否具有成為主節點的資格
注意:此屬性的值為true,並不意味著這個節點就是主節點。
因為真正的主節點,是由多個具有主節點資格的節點進行選舉產生的。
所以,這個屬性只是代表這個節點是不是具有主節點選舉資格。
node.data:這個屬性表示節點是否儲存資料。
這兩個屬性可以有四種組合:
第一種:這種組合表示這個節點即有成為主節點的資格,又儲存資料,
這個時候如果某個節點被選舉成為了真正的主節點,那麼他還要儲存資料,這樣對於這個節點的壓力就比較大了。
elasticsearch預設每個節點都是這樣的配置,在測試環境下這樣做沒問題。實際工作中建議不要這樣設定,
這樣相當於主節點和資料節點的角色混合到一塊了。
node.master: true
node.data: true
第二種:這種組合表示這個節點沒有成為主節點的資格,也就不參與選舉,只會儲存資料。
這個節點我們稱為data(資料)節點。在叢集中需要單獨設定幾個這樣的節點負責儲存資料。後期提供儲存和查詢服務。
node.master: false
node.data: true
第三種:這種組合表示這個節點不會儲存資料,有成為主節點的資格,可以參與選舉,有可能成為真正的主節點。
這個節點我們稱為master節點
node.master: true
node.data: false
第四種:這種組合表示這個節點即不會成為主節點,也不會儲存資料,
這個節點的意義是作為一個client(客戶端)節點,主要是針對海量請求的時候可以進行負載均衡。
node.master: false
node.data: false
預設情況下,每個節點都有成為主節點的資格,也會儲存資料,還會處理客戶端的請求。
在一個生產叢集中我們可以對這些節點的職責進行劃分。
建議叢集中設定3臺以上的節點作為master節點【node.master: true node.data: false】
這些節點只負責成為主節點,維護整個叢集的狀態。
再根據資料量設定一批data節點【node.master: false node.data: true】
這些節點只負責儲存資料,後期提供建立索引和查詢索引的服務,這樣的話如果使用者請求比較頻繁,這些節點的壓力也會比較大
所以在叢集中建議再設定一批client節點【node.master: false node.data: true】
這些節點只負責處理使用者請求,實現請求轉發,負載均衡等功能。
master節點:普通伺服器即可(CPU 記憶體 消耗一般)
data節點:主要消耗磁碟,記憶體
client節點:普通伺服器即可(如果要進行分組聚合操作的話,建議這個節點記憶體也分配多一點)
  • 重啟後我們會發現master節點已經變了,並且第二幅圖我們也可以看到節點充當了什麼角色

    mi主節點 di資料節點 iclient節點

注意:如果有分片遲遲無法分配,可使用es reroute api(官網說明)手動重試分配,操作如下:
curl -XPOST ‘192.168.14.148:9200/_cluster/reroute?retry_failed’

總結:如果在線上出現需要改變主節點或者主節點上有資料需要遷移到其他節點上,可以嘗試上面操作。