Elasticsearch--集群管理_再平衡&預熱


控制集群的再平衡

默認情況下,Elasticsearch視圖把分片和副本在集群中均衡分布。大多數情況下是好的,但有時候想人為控制此行為。

再平衡

再平衡是在集群的不同節點之間移動分片的過程。

集群的就緒

索引由分片和副本構成。主分片用於新文檔被編入索引以及更新或刪除,或者索引發生任何變化時。副本從主分片獲取數據。

當主分片都被分配到集群中的節點上,也就達到了黃色狀態,集群就已經就緒,可以對外提供服務,此時Elasticsearch會初始化副本。

集群再平衡設置

Elasticsearch允許控制再平衡過程,通過設置elasticsearch.yml文件中的幾個屬性,或使用Elasticsearch REST API。

控制再平衡何時開始

cluster.routing.allocation.allow_rebalance

該屬性的取值:

  • always:表名再平衡可以在需要時隨時開始
  • indices_primaries_active:所有主分片都初始化后,再平衡才會開始。
  • indices_all_active:默認設置,所有分片和副本都初始化后,再平衡才會開始。

控制同時在節點移動的分片數量

cluster.routing.allocation.cluster_concurrent_rebalance

指定整個集群中同時可以在節點間移動的分片數量。如果集群由很多節點組成,可以提高這個值。默認值2。

控制單個節點上同時初始化的分片數量

cluster.routing.allocation.node_concurrent_recoveries

設置Elasticsearch在單個節點上一次可以初始化多少分片。分片還原過程是非常耗I/O的,默認是2.

控制單個節點上同時初始化的主分片數量

cluster.routing.allocation.node_initial_primaries_recoveries

控制分配的分片類型

cluster.routing.allocation.enable

控制允許分配哪種類型的分片。取值如下:

  • all:默認值,所有類型的分片都可以被分配
  • primaries:只分配主分片,不要分配副本
  • new_primaries:只分配新創建的主分片
  • none:完成禁用了分片的分配

控制單個節點上的並發流數目

indices.recovery.concurrent_streams

允許控制一個節點上一次可以打開多少流,以便從目標分片中恢復一個分片。默認值是3。

控制分片和副本的分配

顯式控制分配

  1. 指定節點參數
    假設希望把更強大的編號為1和2的節點放置在一個叫zone_one的區域,編號3和4的節點資源較少,放在叫zone_two的區域。
  2. 配置
    在節點1和節點2的elasticsearch.yml配置文件中添加node.zone: zone_one屬性。在節點3和節點4的elasticsearch.yml文件中添加類似的node.zone:zone_two。
  3. 索引的創建
    現在創建shop索引。放在更強的節點:

curl -XPUT 'http://localhost:9200/shop' -d'{
"setting":{
"index":{
"routing.allocation.include.zone":"zone_one"
}
}
}'

意味着希望把shop索引放到node.zone屬性等於zone_one的節點。

promotions索引應該放在所有節點,命令如下:

curl -XPOST 'http://localhost:9200/promotions'
curl -XPUT 'http://localhost:9200/promotions/_settings' -d'{
"setting":{
"index":{
"routing.allocation.include.zone":"zone_one, zone_two"
}
}
}'

第一個命令創建索引,第二個命令更新index.routing.allocation.include.zone屬性的值。

  1. 排除節點的分配
  2. 節點需求屬性
    指定分片必須匹配某種規則才能分配到給定節點上。

index.routing.allocation.require

curl -XPOST 'http://localhost:9200/promotions/_settings' -d'{
"index.routing.allocation.require.size":"big_node",
"index.routing.allocation.require.zone":"zone_one"
}'

Elasticsearch將只會把promotions索引分片分配到node.size屬性等於big_node且node.zone屬性等於zone_one的節點上。

  1. 使用IP地址分配分片
    使用IP地址來指定應該包含排除哪些節點用來做分片和副本的分配。
  2. 基於磁盤的分片分配
    允許基於節點的磁盤使用情況來設置分配規則,因此不會有耗盡磁盤空間或類似的問題。
  • 啟動基於磁盤的分片分配:基於磁盤的分片分配默認是禁用的。可以設置cluster.routing.allocation.disk.threshold_enabled屬性為true來啟用。
  • 配置基於磁盤的分片分配

    第二和第三個屬性值也可以是一個絕對值。

集群范圍的分配


希望把所有新索引都放置在IP地址為10.1.2.10和10.1.2.11的節點上。

每個節點上的分片和副本數量

指定單一節點上為單一索引最多可以放置多少分片

curl -XPOST 'localhost:9200/shop/_settings' -d'{
"index.routing.allocation.total_shards_per_node":1
}'

該屬性可以放在配置文件中。

手動移動分片和副本

使用Elasticsearch的_cluste/reroute REST端點。
有以下可用的操作:

  • 把分片從一個節點移動到另一個節點
  • 取消分片的分配
  • 強制分片的分配

移動分片


move命令允許移動由index屬性指定的索引分片和副本。shard屬性是要移動的分片的編號。最后,from_node屬性指定從哪個節點上移動分片。

取消分片分配


上述命令將取消es_node_one節點上shop索引編號為0的分片分配。

強制分片的分配

分配一個未分配的分片到指定節點上。

預熱

Elasticsearch允許為類型和索引定義預熱查詢。

定義一個新的預熱查詢

預熱查詢和其他查詢類似,只是它存儲在Elasticsearch一個特殊的名為_warmer的索引中。

把上述查詢存儲為library索引的預熱查詢,執行以下命令:

上述命令將注冊一個名為tags_warming_query的預熱查詢。一個索引可以有多個預熱查詢,但是名字唯一。

添加一個預熱查詢后,Elasticsearch允許一個新段執行搜索之前,會在那個段上執行定義的預熱查詢。允許elasticsearch和操作系統緩存數據,以此來加快搜索。

獲取定義的預熱查詢



刪除一個預熱查詢

禁用預熱功能

查詢的選擇

通常選擇執行起來昂貴和需要填充緩存的查詢需要預熱。如:基於索引中的字段做切面和排序,父子查詢,常用的過濾器查詢。也可以通過日志查找不盡人意的查詢。


注意:過多的預熱查詢,也會影響Elasticsearch的性能


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM