ES7 选主去掉了minimum_master_nodes

ES7 选主去掉了minimum_master_nodes

一个cluster 中的所有的 node 都有相同的 cluster.name 属性,当一个node加入或离开cluster,这个消息会分发到所有的node上。

针对一个节点的加入和离开,elasticsearch 通过自动更新 voting 配置来维护一个最优的容错状态。其中的 voting 配置就是 master-eligible 节点的集合,可以根据这些节点的数量的个数来决定能否进行新 master的选举以及提交一个新的集群状态。

通常推荐的是在一个Elasticsearch 集群中有一个比较小的固定大小的 master-eligible 节点,通过增加或减少非主节点的个数来实现 cluster的扩容或缩容。

加入一个主节点

如果想要加入一个 master-eligible node,只要配置好这个cluster的其他 master-eligible 节点列表。该node主动发送join request ,就会自动加入cluster。

删除一个主节点

当删除一个 master-eligible 节点时,重要的是不能一次性删除太多的节点。比如,当前的cluster中有7个master-eligible节点,而你要减少到3个。那么如果同时删除4个,而保留3个master-eligible node,导致的结果是可用的master-eligible node少于 voting 配置的 7 个的一半 4个,该cluster将不能工作。

如果确实发生了上述的操作,那么首先应该将关闭的node重新启动,超过半数之后cluster才会恢复正常。

目标不变,还是保存3个master-eligible node,一个普遍的规则是依次删除一个master-eligible node,然后等集群自动更新了 voting 配置,之后接着再删除下一个 master-eligible node,直到还剩下3个master eligible node。

如果 master-eligible node只有 2个,那么就不能使用上面的方式缩容,因为每一个 master-eligible都是必须的,少了一个cluster就不能正常工作了。在这种情况下,首先要做的是:告诉cluster 某一个 node将会在 voting 配置中移除,实现是将一个node配置到 voting 移除列表中。操作成功后,该节点就可以安全的在cluster中移除了。一个在 voting 移除列表中的node,也会正常工作。但是cluster意图要移除该node,所以该node的选举也没有作用了。

可以通过下面的API 实现添加 到 cluster voting移除列表:

# 根据 node_names 来添加,默认时间时 30s
POST /_cluster/voting_config_exclusions?node_names=node_name

POST /_cluster/voting_config_exclusions?node_names=node_name&timeout=1m

#也可以通过 node_id 进行排除操作
POST /_cluster/voting_config_exclusions?node_ids=node_id

一旦请求返回成功,那么就可以安全的移除对应的master-eligible node了。

对于多节点的缩容,比如将 7节点缩为 3节点也可以通过该API将4个node添加到 voting移除列表中,然后同时删除4个node,也是可以的。(对于多节点只有同时删除的 node 超过当前 voting 配置的一半时才应该使用,如果少于一半,同时删除也没什么大不了的)。

通过 下面的 API可以查看voting 移除列表中的内容:

GET /_cluster/state?filter_path=metadata.cluster_coordination.voting_config_exclusions

该配置的最大数通过 cluster.max_voting_config_exclusions 控制,默认是 10 。并且该配置是持久化的, 重要的是加入到 voting移除列表中的node 不会自动清除。就算是对应的node已经被删除了仍然还在cluster配置中。通过下面的API进行清空(只能全部清空,没有条件删除) :

# 等结果返回
DELETE /_cluster/voting_config_exclusions

# 不等结果
DELETE /_cluster/voting_config_exclusions?wait_for_removal=false

结论

在7.x之前的版本中,用户需要手工配置minimum_master_nodes, 来明确告诉集群过半节点数应该是多少,并在集群扩缩容时调整他。现在,集群可以自行维护。在取消了discovery.zen.minimum_master_nodes 配置后,现在的做法不再记录“quorum”法定数量的具体数值,取而代之的是记录一个节点列表,这个列表中保存所有具备master资格的节点(有些情况下不是这样,例如集群原本只有1个节点,当增加到2个的时候,这个列表维持不变,因为如果变成2,当集群任意节点离线,都会导致无法选主。这时如果再增加一个节点,集群变成3个,这个列表中就会更新为3个节点),称为VotingConfiguration,他会持久化到集群状态中。

**在节点加入或离开集群之后,Elasticsearch 会自动对VotingConfiguration 做出相应的更改,以确保集群具有尽可能高的弹性。**在从集群中删除更多节点之前,等待这个调整完成是很重要的。你不能一次性停止半数或更多的节点。(感觉大面积缩容时候这个操作就比较感人了,一部分一部分缩)。

参考

https://cloud.tencent.com/developer/article/1826426

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值