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集群故障恢复的主要内容,如果未能解决你的问题,请参考以下文章