要将新代理加入一组领事成员,需要知道至少一个现有成员的 IP。 我必须支持一个我不知道任何现有组成员的 IP 的场景。在这种情况下不可能进行人工干预,因为服务发现必须完全自动运行。
我解决这个问题的想法是:我可以通过广播或多播向网络中的其他计算机发送消息。每台计算机都托管一个我将实现的自定义服务。该服务使用 consul 正在监听的 IP 地址回复此特殊广播/多播消息(例如:“寻找现有集群成员”)。然后,该服务将从网络获取一个或多个回复,并使用其中一个 IP 地址加入集群。
有没有人有更好的主意来解决这个问题?有没有现有的库可以解决这个问题?
最佳答案
Hashicorp 提供免费服务作为 Atlas 的一部分来做到这一点:https://www.consul.io/docs/guides/atlas.html
无需自定义服务即可实现此目的的其他更简单的方法:
- 在第三方 DNS 中公开 Consul 服务器,以便服务器在加入 Consul 集群之前可以访问。或者,有一个公开的 http 服务,该服务返回要加入的 IP,并使用curl 或其他方法来获取 IP。使用 Consul 保持 IP 更新。
- 如果您在 AWS 或提供有关计算机元数据的类似服务中运行,请使用该服务来标记您的 Consul 框,然后使用该服务的查询功能执行类似“查找具有 Consul 标记且正在运行的服务器”之类的操作并将它们传递给 -join。
关于service - Consul:在不知道现有成员IP的情况下加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33673812/