1、shard allocation的介绍
两种node:master node,data node
master node的一个很重要的功能,比如说,你现在创建了一个索引,然后这个索引是不是有很多的shard,可能你自己指定了几个primary shard,每个primary shard还有一些replica shard。master node,其实就是决定哪些shard分配给哪些node,以及什么时候在node之间移动shard,来让集群达到rebalance。对于shard allocation而言,有很多设置,都可以控制这个过程:
(1)cluster level shard allocation,可以在集群层面来控制shard allocation和rebalance的过程
(2)disk-based shard allocation,es会在shard分配的时候,考虑可用的磁盘空间
(3)shard allocation awareness,控制shard如何在不同的机架上进行分布
(4)shard allocation filter,可以控制有些node不参与allocation的过程,这样的话,这些node就可以被安全的下线
2、cluster level shard allocation
shard allocation,就是将shard分配给node的一个过程,这个过程可能会在集群启动初始化进行恢复的时候发生,也会发生在replica shard被分配的时候,集群进行rebalance的时候,或者是有新的node加入,有旧的node被下线的时候。
(1)shard allocation settings
cluster.routing.allocation.enable
all,默认,对所有类型的shard都允许分配
primaries,仅仅允许primary shard被分配
new_primaries,仅仅对新建索引的primary shard允许分配
none,不允许任何shard被分配
但是这个配置对node重启时本地primary shard的恢复没有影响,重启node的时候,如果本地有一个未被分配的primary shard,还是会立即恢复这个primary shard。
cluster.routing.allocation.node_concurrent_incoming_recoveries:在一个node上允许同时恢复多少个shard,这里的shard recovery过程,指的就是要将某个shard分配给这个node。这个设置的默认值是2.
cluster.routing.allocation.node_concurrent_outgoing_recoveries:一个node上允许同时进行多少个shard recovery outgoing,比如这个node上,有一个primary shard,现在要将replica shard分配给其他的node,那么就是outgoing shard recovery。默认值也是2.
cluster.routing.allocation.node_concurrent_recoveries:同时设置上面两个值
cluster.routing.allocation.node_initial_primaries_recoveries:如果replica shard recovery通过网络传输来分配