我需要在我的应用程序中连接到mongodb的副本集,所以我需要在代码的配置中提供副本集的mongo实例的ip地址。 Ips是短暂的,所以他们将来可能会改变。如何以编程方式获取mongo实例的ips,以便配置可以推断出它们,而无需在每次ip更改时更新代码。
或者是将ips放入代码并手动更新的方法?
我认为这是做到这一点的方法: https://cloud.google.com/compute/docs/metadata#querying
但是这个网址http://metadata.google.internal/computeMetadata/v1/似乎不存在我无法查询任何内容......
我可以使用gcloud compute instances list
从代码执行shell命令并手动过滤以获取ips,但我想知道是否有更清洁的方法。
我的应用程序将在与mongo实例分开的实例中运行。
答案 0 :(得分:4)
是的,最好的方法是使用gcloud compute命令。
您只能从实例查询元数据服务器,而不能从Google云服务外部查询。
您应该考虑执行以下命令的实例中的cron作业,返回外部IP并将其发送到您的应用程序:
curl "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip" -H "Metadata-Flavor: Google"
答案 1 :(得分:4)
您提到您的应用程序在单独的实例中运行,但您没有提及有关网络的信息。所以,我的建议是:
在这两种情况下,您应始终使用名称来配置mongo副本集(而不是IP),原因与上述相同:如果您的实例重新启动并更改其IP,则您的mongo RS在你重新配置它之前不会工作。
希望它有所帮助。