我们正在从 GCP 迁移到我们的裸机 Kubernetes 集群。

我需要将一些虚拟机从 GCP 提升并转移至 k8s。

其中一台虚拟机正在运行一个 docker 镜像,该镜像连接到 Atlas 上托管的 MongoDB 集群。

我将集群的 IP 范围添加到 MongoDB Atlas 上的网络访问,并且可以使用它mongosh进行连接,也可以在正在运行的容器内进行连接。

问题是在容器中运行的应用程序(使用 gem 的 rails 应用程序mongoid v7.0.5)无法连接,出现以下错误:

No server is available matching preference: #<Mongo::ServerSelector::Primary:0x44772020 tag_sets=[] max_staleness=nil> using server_selection_timeout=30 and local_threshold=0.015 (Mongo::Error::NoServerAvailable)

我注意到我们已经与 GCP 建立了网络对等连接。我一直在想网络对等连接是否与错误有关;如果是那样的话,我居然仍然可以通过 进行连接mongosh,这真是令人惊讶。

关于我可以尝试解决此问题的任何想法?

1

  • 您有时间查看我的回答吗?它帮助您解决了问题吗?如果没有,我很乐意为您提供帮助。


    – 


最佳答案
1

关于错误消息,请注意,如果计算机启用了 IPv6,则 Rails/mongoid 会尝试通过 IPv6 连接到 mongodb,但会失败。尝试在 mongoid.yaml 文件中将主机设置更改为 localhost:27017。默认情况下,Mongo 在端口 27017 上运行。

请按照以下步骤解决此错误。

  1. 将 config/mongoid.yml 更改为在 localhost:27017 运行

  2. 创建空目录 C:\data\db

  3. 然后运行 ​​mongoD 并检查它是否有效。

另请参阅此以了解有关设置 Mongoid 配置文件的更多信息。

注意:网络对等通常涉及两个网络之间的私有连接,通常是 GCP 和 MongoDB atlas 之间的私有连接。如果您的容器在裸机集群内的私有网络中运行,但您通过公共 IP 访问 Atlas,则容器可能配置为连接到与 mongosh 不同的地址。