You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot应用无法连接谷歌云MongoDB三节点PSA副本集问题咨询

故障根因

MongoDB副本集的连接逻辑是:客户端首次通过URI中填写的种子节点建立连接后,会主动从副本集配置中拉取所有成员的访问地址,后续和集群的交互会直接使用拉取到的成员地址,而非继续使用种子IP。
从你提供的rs.status()输出可以看到,副本集所有成员的name字段都是GCP虚拟机的内部主机名(如mongodb-dev-servers-vm-0),这些内部主机名无法在应用所在的公网环境被DNS解析,因此抛出UnknownHostException报错。
而你使用单节点URI连接时,驱动不会触发副本集成员列表拉取逻辑,直接使用填写的公网IP连接,因此可以正常访问。

解决方案

根据你的使用场景,可以选择以下任意一种方案解决:

方案1:修改副本集成员配置为公有IP(推荐)

直接修改MongoDB副本集的成员地址为公网IP,所有访问副本集的客户端无需额外配置即可正常连接,操作步骤如下:

  1. 连接到MongoDB主节点的Mongo Shell
  2. 执行以下命令导出当前副本集配置:
cfg = rs.conf()
  1. 依次修改所有成员的host属性为对应节点的公网IP(需替换为你实际的仲裁节点公网IP):
cfg.members[0].host = "34.25.16.18:27017"
cfg.members[1].host = "34.05.83.26:27017"
cfg.members[2].host = "[仲裁节点公网IP]:27017"
  1. 保存新的副本集配置:
rs.reconfig(cfg)

配置生效后,再次执行rs.status()即可看到成员名称已更新为公网IP,此时使用原副本集连接URI即可正常访问。

提示:建议提前将GCP MongoDB节点的公网IP设置为静态IP,避免IP变动后需要重新修改副本集配置。

方案2:配置客户端hosts映射

如果暂时不想修改MongoDB集群配置,可在运行Spring Boot应用的机器上配置hosts映射,将内部主机名指向对应公网IP:

  • Windows系统hosts文件路径:C:\Windows\System32\drivers\etc\hosts
  • Linux/macOS系统hosts文件路径:/etc/hosts
    在文件末尾添加以下内容(需替换为实际的仲裁节点公网IP):
34.25.16.18 mongodb-dev-servers-vm-0
34.05.83.26 mongodb-dev-servers-vm-1
[仲裁节点公网IP] mongodb-dev-arbiters-vm-0

该方案仅对修改了hosts的机器生效,适合临时开发测试场景使用。

方案3:同VPC内使用内网访问

如果你的Spring Boot应用也部署在同一个GCP VPC网络内,不需要走公网访问MongoDB,可直接将连接URI中的公网IP替换为副本集成员的内网IP,或直接使用内部主机名连接,GCP内网默认可解析这些主机名,安全性也更高。


内容的提问来源于stack exchange,提问作者Ashish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:27:02