如何从 Consul 集群中彻底删除一个节点?

如何从 Consul 集群中彻底删除一个节点?

在我删除这个位于另一个 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 协议,但我觉得我的搜索可能已经开始偏离主题了。任何指导都值得赞赏,无论是评论还是答案。

更准确地说,如何让prd0Consul 服务器节点拥有自己独立的 KV 存储和与alpha0Consul 服务器节点不同的 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

相关内容