Consul集群故障恢复

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Consul集群故障恢复相关的知识,希望对你有一定的参考价值。

参考技术A

公司服务器突然断电宕机,通电开机后Consul集群自启动完成,但是无法注册服务,界面可以打开,但是无法一直在Loading状态,无法查看Nodes,无法查看Key/Value。

查看服务日志后发现是Master没有被选举出来,一直在报错 No cluster leader 。初步诊断为Consul集群数据不同步或Docker重启后IP变动和之前注册在raft中的不一致。

执行命令 consul operator raft list-peers 后提示500错误,无法正确展示。

排查后定位问题为 Docker重启后IP变动和之前注册在raft中的不一致 导致Consul集群无法自行选举出Master,这种问题需要手动恢复才能解决。

官方对于该问题的解决方案

这个问题解决需要用到 data/raft/peers.json 来进行手动选举与节点同步
PS:这里需要注意, peers.json 有两种格式,具体写描述可以查看 data/raft/peers.info 其中有详细的描述

如果直接按照官方的方式去做,还是会起不来的,因为各个节点之间互相不通信,每个节点都会投自己一票,结果永远会是同票数,同票数就意味着需要重新进行投票选举,就会一直陷入死循环,所以要让其他节点主动放弃自己的投票权,只保留一个节点进行投票,这样才能选举出Master。将 non_voter 设置为true就不会参与选举了。
我的是 Raft Protocol Version 3使用如下JSON。

参数解释

PS:这个文件只要放在任意一个节点上面就行了,无需所有节点都放

重启Consul,集群恢复。

以上是关于Consul集群故障恢复的主要内容,如果未能解决你的问题,请参考以下文章

consul reconnect_timeout

RabbitMQ集群恢复与故障转移的5种解决方案

ceph集群osd full紧急故障恢复

ceph集群osd full紧急故障恢复

ceph 集群故障恢复

RAC OCR盘故障导致的集群重启恢复