连接到Kubernetes上的MongoDB复制集

连接到Kubernetes上的MongoDB复制集,mongodb,kubernetes,kubernetes-helm,replicaset,Mongodb,Kubernetes,Kubernetes Helm,Replicaset,我已经使用Helm和chartstable/MongoDB ReplicaSet在Kubernetes上部署了MongoDB ReplicaSet 在Kubernetes上,我可以使用类似的连接字符串连接到MongoDB mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?replicaSet=myRepl 如果我更改副本的数量,连接字符串也会更改,这也意味着连接

我已经使用Helm和chart
stable/MongoDB ReplicaSet
在Kubernetes上部署了MongoDB ReplicaSet

在Kubernetes上,我可以使用类似的连接字符串连接到MongoDB

mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?replicaSet=myRepl
如果我更改副本的数量,连接字符串也会更改,这也意味着连接到数据库的每个应用程序都需要更新

有解决办法吗

我想创建一个服务,这样就只需要更改它,但是连接字符串没有通过正则表达式验证


非常感谢您的帮助。

驱动程序将自动发现副本集的所有节点。如果仅更改总数,但第一个节点始终具有相同的地址,则可以在连接字符串中仅指定第一个节点的地址

根据驱动程序的不同,这可能连接到副本集,也可能不连接到副本集(与该节点直接相反),副本集通常有两种解决方案:

  • 将replicaSet选项添加到URI
  • 提供前两个节点地址

  • 或者,您可以设置并使用SRV URI,这就是MongoDB Atlas的工作方式。这适用于所有拓扑(包括分片群集,复制集发现不适用于这些群集)。

    Helm chart
    stable/mongodb replicaset
    还部署了两种无头服务:

  • -mongodb replicaset
  • -mongodb replicaset客户端
  • -mongodb replicaset
    的DNS记录返回所有副本的地址,因此,为了连接到replicaset,连接字符串是

    “mongodb+srv://-mongodb-replicaset.namespace.svc.cluster.local/?tls=false&ssl=false“


    请注意,tls和ssl已设置为false以进行测试,因为它们在默认情况下已启用。

    如果我错了,请更正我的错误,但除非指定所有MongoDB节点,否则您不能100%确定您所使用的主要节点是否正确?(例如,如果节点关闭,另一个节点被选为主节点)。关于SRV records选项,您是否可以详细说明(或向我指出正确的方向)如何实现此功能?驱动程序将从副本集节点提供的信息中发现主副本。如果它找不到主节点,或者部署中没有主节点,则需要主节点的操作(如写操作)将失败。答案中链接了SRV文档。感谢您的帮助@Oleg。我终于设法让它工作起来了。这个问题最终非常简单。我花了很长时间试图调试一个类似的问题,它是
    ?tls=false&ssl=false
    部分。非常感谢。