所以我构建了一个3节点的Consul集群。现在它们仅由IP地址表示。在阅读文档时,我不清楚我如何向想要查询它的其他人公开他们的位置。
我可以将当前领导者的IP地址硬编码到其他代理中,但这似乎不是最好的主意。我可以为每个节点分配DNS名称,但如果领导者因网络问题而更改会怎样?那是问题吗?查询/写入哪个节点是否重要?
我想我没有在任何地方阅读解释这部分群集设置。当我启动需要查询Consul集群的新系统时,如何自动让它知道Consul集群的位置。
答案 0 :(得分:1)
客户需要连接主服务器而不是反之亦然,这是无法摆脱的。
如果要自动化整个群集的启动过程,则几乎没有选项:
您可以对主设备的地址进行硬编码 - 应使用静态地址(客户端可以拥有动态IP地址)。这可以在内部甚至在云环境中完成 - 例如,查找AWS VPC文档。这是最简单的方法。
您可以先启动主服务器,每当客户端启动时,您都可以为他提供主服务器的IP地址。在云中,这可以使用例如用户数据自动化。这也可以通过您的IT自动化工具自动化,例如ansible。 它需要对引导过程进行一些修改,因为您需要在引导时编辑客户端配置,但这不会限制您使用硬代码地址。这种方法可能会减慢群集启动时间,因为现在可以串行。但是,如果您将努力工作,可以避免这种情况(通过启动所有集群,并找到一种方法在运行时将主服务器IP地址传递给客户端,然后才启动客户端的consul进程)。
我认为最优雅的是#1,但这取决于你的需求。
无论如何,请确保在启动群集后主服务器的IP地址不会更改。即使重启后。这是一种不好的做法。
此外,最好将所有三个IP地址传递给客户端以获得高可用性(如果您选择3个主配置)。
答案 1 :(得分:0)
根据documentation -
"要加入群集,Consul代理只需要了解一个现有成员。加入群集后,代理人互相闲聊,传播完整的会员信息。"
因此,在您的情况下,只需在客户端配置的start_join列表中对主服务器的IP进行硬编码:
{
"server": false,
"data_dir": "/var/consul",
...
"start_join": ["192.0.x.y1", "192.0.x.y2", "192.0.x.y3"]
}