es7添加新节点和下线节点
es集群是由一群相同 cluster.name 节点组成。当有新的节点加入或者有节点离开集群,集群会重新均衡数据在可用节点。
当你的集群只有单实例的时候,所有的主分片都是分布在一台节点上,副本分片无法分配,所以你的集群状态是yellow。这样状态的集群功能齐全但是会有丢数据的风险。

添加节点到集群,可以增加集群的容量和可靠性。默认每个节点是同时具备data node和master-eligible node角色。你也可以自己定制每个node的角色。
当你添加更多节点到一个集群,集群会自动分配副本分片。当所有的主副分片状态都为active,集群状态会变为yellow。

Master-eligible nodes
当添加或删除节点时,es集群会通过更新集群的voting configuration来保持一个最佳的容错状态。voting configuration是指es集群的master-eligible node集合,这是在es7中才有的概念,当集群做出一些决策时比如选举master节点时会收集 voting configuration的响应。
官方推荐一个集群有固定数量的master-eligible node,这样的话扩容或缩容集群只需要增加或删除master-ineligible node就好了。
添加 master-eligible nodes
当需要添加节点到集群时,只需要配置这个新节点去发现目标集群并启动。es集群会自动添加节点到voting configuration。
在集群选举或者加入一个现有集群时,节点会发送一个join请求给master来正式加入集群。你可以配置 cluster.join.timeout 这个参数,这个参数的意思是节点发送join请求后会等待多久,默认是30s。
下线 master-eligible nodes
下线 master-eligible node时,需要注意千万不要一次下线太多。比如一个集群有7个master-eligible node,你希望能减少到3个。如果一次性下掉4台 master-eligible node,只剩下3台master-eligible node,数量小于voting configuration的一半,这样会导致集群瘫痪。
换句话说,如果你一次性下掉了一半及以上数量的 master-eligible node,集群就会不可用。如果发生这种情况只需要把下掉的节点启动就好。
你要是有至少3个master-eligible nodes,你最好一次下线一个节点,这样能给集群足够的时间调整voting configuration。
如果那只有两个 master-eligible nodes ,你就不能随便下线一台 master-eligible node,因为这达到了一半的 voting configuration。es7中有个概念是 voting configuration exclusion list,节点如果被移到这里面是可以继续正常工作的,但是集群会忽略这个节点的投票响应。更重要的是,集群不会主动将这个节点从 voting configuration exclusion list 移回 voting configuration。一旦你成功的将节点移入 voting configuration exclusion list,你就可以安全地将这个节点下线。将节点移入 voting configuration exclusion list 的api如下:
POST /_cluster/voting_config_exclusions?node_names=node_name
# 添加超时时间,默认30s
POST /_cluster/voting_config_exclusions?node_names=node_name&timeout=1m
如果你的请求失败了,可以放心重试。如果你要移除的节点是master node,那集群会在挑选目前还存活的voting configuration 里的 master-eligible node 重新发起选举。
这个api同样可以一次性移除多个 master-eligible node,比如上面举的7个节点的例子,就可以一次性移除4台到 voting configuration exclusion list,等待集群确认成功移除后,就可以安全下线这4台集群。
注意:这个api主要是用来同时下线大于等于一半 master-eligible nodes时使用。如果你只是下线 master-ineligible nodes或者小于一半 master-eligible nodes时,无需使用这个api。
目前的被排除列表时存储在集群状态里,并可以通过下面api查看:
GET /_cluster/state?filter_path=metadata.cluster_coordination.voting_config_exclusions
这个list大小默认是10,可以通过 cluster.max_voting_config_exclusions 这个配置修改。因为这个list是持久的并且被限制大小,所以必须及时清理。通常只有维护集群的时候,才需要有这个移除列表。所以在正常情况下,集群是不应该有voting configuration exclusion list 存在。
一个节点只有被永久下线,才会被移到排除列表里。删除集群里的排除列表可以使用下面的api:
# 等待这里的节点被下线后,才会从这个列表里移除 DELETE /_cluster/voting_config_exclusions # 直接将节点从列表里释放,返回到 voting configuration DELETE /_cluster/voting_config_exclusions?wait_for_removal=false

浙公网安备 33010602011771号