1. 程式人生 > >Elasticsearch模組功能之-索引分片分配(Index shard allocation)

Elasticsearch模組功能之-索引分片分配(Index shard allocation)

1、分片分配

           包含或者排除filters可以來控制基於節點的索引分配。filters可以在索引級別和叢集級別進行設定。如下使用叢集級別舉例:

           設定有4個節點,每個的節點指定一個屬性tag(可以隨意修改),並賦予特定值,比如節點1設定為node.tag:value1,節點二設定為node.tag:value2等等。建立索引時將index.routing.allocation.include.tag屬性設定為value1和value2後,我們將會建立一個只部署在節點1和節點2的索引。命令如下:

curl -XPUT localhost:9200/test/_settings -d '{
    "index.routing.allocation.include.tag" : "value1,value2"
}'

             如果不想將索引新增到上述兩個節點上,可以使用index.routing.allocation.exclude.tag屬性。如下:

curl -XPUT localhost:9200/test/_settings -d '{
    "index.routing.allocation.exclude.tag" : "value1,value2"
}'

             index.routing.allocation.require.*用於指定幾個規則,滿足這些規則則會被分配到該節點上。

include,exclude和require的值也支援簡單的萬用字元,比如value1*,另外,_ip,_name,_id和_host這些屬於特定的屬性名稱,他們分別匹配節點的IP地址,名稱,ID和主機名。以上的索引配置可以使用

API進行實時的更新。

2、節點分片總數

           index.routing.allocation.total_shards_per_node設定可以控制es節點上每個索引最大能分配的分片個數。該配置可以使用API進行動態更新。

3、基於磁碟的分片分配

                   (該配置在es1.3.0後才有效)

           Elasticsearch可以根據節點磁碟的使用情況來配置分片分配。該配置預設開啟你,可以下面命令進行禁用:

curl -XPUT localhost:9200/_cluster/settings -d '{
    "transient" : {
        "cluster.routing.allocation.disk.threshold_enabled" : false
    }
}'

  Elasticsearch使用兩個配置引數決定分片是否能存放到某個節點上。

cluster.routing.allocation.disk.watermark.low控制磁碟使用的低水位。預設為85%,意味著如果節點磁碟使用超過85%,則ES不允許在分配新的分片。當配置具體的大小如100MB時,表示如果磁碟空間小於100MB不允許分配分片。

cluster.routing.allocation.disk.watermark.high控制磁碟使用的高水位。預設為90%,意味著如果磁碟空間使用高於90%時,ES將嘗試分配分片到其他節點。

         上述兩個配置可以使用API動態更新,ES每隔30s獲取一次磁碟的使用資訊,該值可以通過cluster.info.update.interval來設定。