连接到 Kubernetes 上的 MongoDB ReplicaSet

Connection to MongoDB ReplicaSet on Kubernetes

我已经使用 Helm 和图表 stable/mongodb-replicaset

在 Kubernetes 上部署了 MongoDB ReplicaSet

在 Kubernetes 上,我可以使用类似

的连接字符串连接到 MongoDB
mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?replicaSet=myRepl

如果我更改副本数,连接字符串也会更改,这也意味着连接到数据库的每个应用程序都需要更新。

有解决办法吗?

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

如有任何帮助,我们将不胜感激。

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

根据驱动程序,这可能会或可能不会连接到副本集(而不是直接连接到那个节点),通常有两种解决方案:

  1. 向 URI 添加 replicaSet 选项。
  2. 提供前两个节点地址。

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

Helm 图表 stable/mongodb-replicaset 还部署了 2 个无头服务:

  1. <release name>-mongodb-replicaset
  2. <release name>-mongodb-replicaset-client

<release name>-mongodb-replicaset的DNS记录returns所有副本的地址,所以,为了连接到副本集,连接字符串是

"mongodb+srv://<release name>-mongodb-replicaset.namespace.svc.cluster.local/?tls=false&ssl=false"

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