在我删除这个位于另一个 DC 的 Consul Server 节点之后,它仍然会在一段时间内继续加入。
目标:
DC 中的 5 个 Consul Server 集群alpha0
,Vault 集群使用其 KV 存储alpha0
作为存储后端:
alpha0consulserver1.alpha0
alpha0consulserver2.alpha0
alpha0consulserver3.alpha0
alpha0consulserver4.alpha0
alpha0consulserver5.alpha0
DC 中的 5 个 Consul Server 集群prd0
,Vault 集群使用其 KV 存储prd0
作为存储后端:
prd0consulserver1.prd0
prd0consulserver2.prd0
prd0consulserver3.prd0
prd0consulserver4.prd0
prd0consulserver5.prd0
WAN 连接正常。但我担心,如果他们同步 KV 存储,这可能会影响两个独立的 HashiCorp Vault 集群,每个集群都将它们用作后端。
问题:
我编写的一个未经充分测试的 Puppet 脚本导致一个 Consul 节点prd0consulserver5
连接到不同 DC 中的另一个节点alpha0consulserver1
。
我已经完全清除并重新安装了 prd0consulserver5 的 Consul,但alpha0consulserver1
仍保持与它的连接。
下面是其中一个配置文件的示例,具体来说是 alpha0consulserver1.alpha0 的配置文件:
nathan-basanese-zsh8 % sudo cat /etc/consul/config.json
{
"bind_addr": "192.176.100.1",
"client_addr": "0.0.0.0",
"data_dir": "/opt/consul",
"domain": "consul.basanese.com",
"bootstrap_expect": 5,
"enable_syslog": true,
"log_level": "DEBUG",
"datacenter": "bts0",
"node_name": "alpha0consulserver1",
"ports": {
"http": 8500,
"https": 8501
},
"recursors": ["192.176.176.240", "192.176.176.241"],
"server": true,
"retry_join": ["192.176.100.3", "192.176.100.2", "192.176.100.1"]
}
以下是来自的一些相关日志prd0consulserver5
,但我可以根据要求发布更多:
2017/05/26 23:38:00 [DEBUG] memberlist: Stream connection from=192.176.100.1:47239
2017/05/26 23:38:00 [INFO] serf: EventMemberJoin: alpha0consulserver2.alpha0 192.176.100.2
2017/05/26 23:38:00 [INFO] serf: EventMemberJoin: alpha0consulserver1.alpha0 10.240.112.3
2017/05/26 23:38:00 [INFO] consul: Handled member-join event for server "alpha0consulserver2.bts0" in area "wan"
2017/05/26 23:38:00 [INFO] serf: EventMemberJoin: alpha0consulserver3.alpha0 192.176.100.3
2017/05/26 23:38:00 [INFO] consul: Handled member-join event for server "alpha0consulserver1.bts0" in area "wan"
2017/05/26 23:38:00 [INFO] consul: Handled member-join event for server "alpha0consulserver3.bts0" in area "wan"
最终,我得到了这个:
2017/05/26 23:39:02 [DEBUG] memberlist: Initiating push/pull sync with: 192.176.100.2
我关闭了该节点,因为我不希望写入alpha0
节点上的 KV 存储的键出现在prd0
节点上。
到目前为止我已经尝试过:
我尝试了以下方法:
https://www.consul.io/api/agent.html#graceful-leave-and-shutdown
我没有尝试force-leave
因为它不适用于配置的 DC 之外的节点。
我也尝试过从主机prod0
上取消注册所有主机alpha0
。
https://www.consul.io/api/catalog.html#deregister-entity
我已经束手无策了,似乎找不到办法
我已经在搜索引擎上搜索过它,使用了这个查询和许多类似的查询:https://duckduckgo.com/?q=totally+deregister+consul+node&t=hc&ia=software
以下两个结果似乎存在稍微相似的问题,但并不像将一个由 5 个 Consul 服务器组成的集群与另一个由 5 个 Consul 服务器组成的集群分开那么简单。
https://github.com/hashicorp/consul/issues/1188 https://groups.google.com/forum/#!msg/consul-tool/bvJeP1c3Ujs/EvSZoYiZFgAJ
我认为这可以通过"join_wan":
配置设置来解决,但似乎没有办法明确关闭它。另外,这似乎是解决这个问题的一种不成熟的方法。
我也考虑过IPTables。
无论如何,我觉得缺少了一些东西。我已经开始深入研究 Raft 协议,但我觉得我的搜索可能已经开始偏离主题了。任何指导都值得赞赏,无论是评论还是答案。
更准确地说,如何让prd0
Consul 服务器节点拥有自己独立的 KV 存储和与alpha0
Consul 服务器节点不同的 Consul Leader?
答案1
仅在尝试了此处的标准删除过程后:
$ consul leave
$ consul force-leave <node>
您应该转到下面的操作,这将从集群中完全删除该节点:
$ consul operator raft remove-peer
答案2
//,对于我的具体情况,我在中找到了答案consul operator raft remove-peer
。
但我迫切地等待有关问题如何发生的信息,如下:
https://github.com/hashicorp/consul/issues/3218#issuecomment-312721634