我使用Consul部署了Helm chart服务器,这给了我一个三节点集群。我可以查看节点的IP地址和ID:
$ consul catalog nodes
Node ID Address DC
consul-server-0 065ab1e4 10.60.1.11 dc1
consul-server-1 46eca681 10.60.0.16 dc1
consul-server-2 fb5fa37d 10.60.2.8 dc1
作为测试,我强制删除了这三个节点,如下所示:
kubectl delete pods -n consul --force --grace-period=0 consul-server-0 consul-server-1 consul-server-2
三个新的Pod提出了不同的IP但具有相同的ID,加入了集群并再次达成共识:
$ consul catalog nodes
Node ID Address DC
consul-server-0 065ab1e4 10.60.1.12 dc1
consul-server-1 46eca681 10.60.2.9 dc1
consul-server-2 fb5fa37d 10.60.0.17 dc1
领事要依靠什么来从这种情况中恢复过来?由于ID相同,是否可以再次形成仲裁,然后在它们之间确定IP已更改?还是保持一致的节点名称也是自动恢复的要求?
我看到如下日志消息:
consul: removed server with duplicate ID: 46eca681-b5d6-21e7-3df5-cf228ffdd02c
因此,似乎IP地址的更改正在导致将新节点添加到群集,但是Consul认为需要将其删除。因此,我希望在一个点上有6个节点,而3个节点不可用,从而导致群集丢失仲裁且无法自动恢复,但这不会发生。
答案 0 :(得分:1)
我们还在docker swarm中运行consul,失败后的恢复不是一个小问题。因为出现故障的服务器显然会在具有不同IP的新容器中重新创建。领事出现很多关于筏的错误和信息。但是我没有看到严重的问题。我只是过滤这种日志,而不转换为Elasticsearch中的长寿命索引。
我们使用下一个配置来更快地恢复服务器:
{
"skip_leave_on_interrupt" : true,
"leave_on_terminate" : true,
"disable_update_check": true,
"autopilot" : {
"cleanup_dead_servers": true,
"last_contact_threshold": "1s"
}
}
您可以查看参数here