为代理寻找 Consul 集群

Finding Consul cluster for agents

所以我搭建了一个3节点的Consul集群。现在它们仅由 IP 地址表示。在阅读文档时,我不清楚如何将他们的位置暴露给其他想要查询的人。

我可以将当​​前领导者的 IP 地址硬编码到其他代理中,但这似乎不是最好的主意。我可以为每个节点分配一个 DNS 名称,但是如果由于网络问题导致领导者发生变化怎么办?那是问题吗?我 query/write 到哪个节点重要吗?

我想我没有在任何地方读到解释集群设置的这一部分。当我启动一个需要查询 Consul 集群的新系统时,我如何自动让它知道 Consul 集群在哪里。

根据 documentation -

"To join a cluster, a Consul agent only needs to learn about one existing member. After joining the cluster, the agents gossip with each other to propagate full membership information."

因此,在您的情况下,只需在客户端配置的 start_join 列表中硬编码您的主人的 IP:

{
    "server": false,
    "data_dir": "/var/consul", 
    ...
    "start_join": ["192.0.x.y1", "192.0.x.y2", "192.0.x.y3"]
}

客户端需要连接主机,反之亦然。

如果您想自动执行整个集群的启动过程,有几个选项:

  1. 您可以硬编码主机的地址——应该使用静态地址(客户端可以有动态 IP 地址)。这可以在内部甚至云环境中完成——例如,查看 AWS VPC 文档。这是最简单的方法。

  2. 您可以先启动masters,每当客户端启动时,您可以向他提供masters的IP地址。例如,在云中,这可以使用用户数据自动完成。这也可以通过您的 IT 自动化工具(例如 ansible)实现自动化。 它需要对引导过程进行一些修改,因为您需要在引导时编辑客户端配置,但这不会限制您使用硬代码地址。这种方法可能会减慢您的集群启动时间,因为现在可以串行了。然而,如果你足够努力,这是可以避免的(通过启动所有集群,并找到一种方法在 运行 时间将 masters ip 地址传递给客户端,然后才启动客户端的 consul 进程) .

虽然我认为最优雅的是#1,但这取决于您的需要。

无论如何,确保master的IP地址在集群启动后不会改变。即使重启后。这是一种不好的做法。

此外,最好将所有三个 IP 地址都传递给客户端以获得高可用性(如果您选择 3 个主配置)。