控制Elasticsearch分片和副本的分配

2021-07-23 21:40:46 字數 4600 閱讀 1255

es集群中索引可能由多個分片構成,並且每個分片可以擁有多個副本。通過將乙個單獨的索引分為多個分片,我們可以處理不能在乙個單一的伺服器上面執行的大型索引,簡單的說就是索引的大小過大,導致效率問題。不能執行的原因可能是記憶體也可能是儲存。由於每個分片可以有多個副本,通過將副本分配到多個伺服器,可以提高查詢的負載能力。

為了進行分片和副本的操作,es需要確定將這些分片和副本放到集群節點的哪個位置,就是需要確定把每個分片和副本分配到哪台伺服器/節點上。

一、顯式控制分配

生產情景:

比如生產環境有三個索引分別為 man、woman、katoey

希望達到的效果:

man索引放置在一些集群節點上

woman索引又單獨放置到集群的另外一些集群節點上

katoey索引希望放置在所有放置man索引和woman索引的集群節點上

這麼做是因為katoey索引比其他兩個索引小很多,因此我們可以將它和其他兩個索引一起分配。

但是基於es預設演算法的處理方法,我們不能確定分片和副本的存放位置,但是es允許我們對其做相應的控制!

1、指定節點的引數

如上圖所示,我們將es集群劃分為兩個"空間"。當然你也可以叫做區域,隨便命名。我們將左邊的三颱es節點伺服器放置到zone_one的空間上面,將右邊的三颱es節點伺服器放到zone_two的空間上。

配置

為了做到我們需要的效果,我們需要將如下屬性配置到左邊三颱es集群節點伺服器的elasticsearch.yml配置檔案中

node.zone: zone_one
將如下屬性配置到右邊的三颱es集群節點伺服器elasticsearch.yml配置檔案中
node.zone: zone_two
索引建立當所有節點配置檔案屬性配置完成後,我們就可以根據空間名稱,我們就可以建立索引放到指定的空間。

首先我們執行如下命令,來建立man索引:

第一條命令是建立man索引;第二條命令是傳送到_settingsrest端點,用來指定這個索引的其他配置資訊。我們將index.routing.allocation.include.zone屬性設定為zone_one值,就是我們所希望的把man索引放置到node.zone屬性值為zone_one的es集群節點伺服器上。

同樣對woman索引我們做類似操作:

不同的是,這次指定woman索引放置在node.zone屬性值為zone_two的es集群節點伺服器上

最後我們需要將katoey索引放置到上面所有的es集群節點上面,配置設定命令如下:

2、分配時排除節點跟我們上面操作為索引指定放置節點位置一樣,我們也可以在索引分配的時候排除某些節點。參照之前的例子,我們新建乙個people索引,但是不希望people索引放置到zone_one的es集群節點伺服器上,我們可以執行如下命令操作:

請注意,在這裡我們使用的是index.routing.allocation.exclude.zone屬性而不是index.routing.allocation.include.zone屬性。

使用ip位址進行分配配置

除了在節點的配置中新增一些特殊的屬性引數外,我們還可以使用ip位址來指定你將分片和副本分配或者不分配到哪些節點上面。為了做到這點,我們應該使用_ip屬性,把zone換成_ip就好了。例如我們希望lucky索引分配到ip位址為10.0.1.110和10.0.1.119的節點上,我們可以執行如下命令設定:

二、集群範圍內分配

除了索引層面指定分配或者排除分配之外(上面我們所做的都是這兩種情況),我們還可以指定集群中所有索引的分配。例如,我們希望將所有的新索引分配到ip位址為10.0.1.112和10.0.1.114的節點上,我們可以執行如下命令設定:

}'集群級別的控制後續還會分享transient和persistent屬性介紹

三、每個節點上分片和副本數量的控制

除了指定分片和副本的分配,我們還可以對乙個索引指定每個節點上的最大分片數量。例如我們希望ops索引在每個節點上只有乙個分片,我們可以執行如下命令:

# curl -xput "http://esnode:9200/ops/_settings" -d ''
這個屬性也可以直接配置到elasticsearch.ym配置檔案中,或者使用上面命令在活動索引上更新。如果配置不當,導致主分片無法分配的話,集群就會處於red狀態。

四、手動移動分片和副本

接下來我們介紹一下節點間手動移動分片和副本。可以使用elasticsearch提供的_cluster/rerouterest端點進行控制,能夠進行下面操作:

a、將乙個分片從乙個節點移動到另外乙個節點

b、取消對分片的分配

c、強制對分片進行分配

移動分片

假設我們有兩個節點:es_node_one和es_node_two,elasticsearch在es_node_one節點上分配了ops索引的兩個分片,我們現在希望將第二個分片移動到es_node_two節點上。可以如下操作實現:

我們通過move命令的index屬性指定移動哪個索引,通過shard屬性指定移動哪個分片,最終通過from_node屬性指定我們從哪個節點上移動分片,通過to_node屬性指定我們希望將分片移動到哪個節點。

取消分配

如果希望取消乙個正在進行的分配過程,我們通過執行cancel命令來指定我們希望取消分配的索引、節點以及分片,如下所示:

執行上面的命令將會取消es_node_one節上ops索引的第0個分片的分配

分配分片

除了取消和移動分片和副本之外,我們還可以將乙個未分配的分片分配到乙個指定的節點上。假設ops索引上有乙個編號為0的分片尚未分配,並且我們希望elasticsearch將其分配到es_node_two上,可以執行如下命令操作:

一次http請求包含多個命令我們可以在一次http請求中包含多個命令,例如:

Elasticsearch 相關度控制

資料匯入 資料匯入指引 自定義新增資料。每個文件都有相關性評分,用乙個正浮點數字段 score來表示 score的評分越高,相關性越高。換句話說,就是 score越高,就離我們想要搜尋到的結果越相近。elasticsearch 的相似度演算法被定義為檢索詞頻率 反向文件頻率,tf idf 包括以下內...

elasticsearch筆記 相關度控制 八

lucene主要使用的評分模型是布林模型 tf idf 向量空間模型.布林模型 boolean model 只是在查詢中使用 and or 和 not 與 或和非 這樣的條件來查詢匹配的文件 布林模型舉例 乙個簡單的多詞查詢get my index doc search 在內部的實現原理 get m...

elasticsearch配置詳解

elasticsearch的config資料夾裡面有兩個配置檔案 elasticsearch.yml和logging.yml,第乙個是es的基本配置檔案,第二個是日誌配置檔案,es也是使用log4j來記錄日誌的,所以logging.yml裡的設定按普通log4j配置檔案來設定就行了。下面主要講解下e...