连接到 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
如果我更改副本数,连接字符串也会更改,这也意味着连接到数据库的每个应用程序都需要更新。
有解决办法吗?
我想创建一个服务,这样只需要更改它,但是连接字符串没有通过正则表达式验证。
如有任何帮助,我们将不胜感激。
驱动程序将自动发现副本集的所有节点。如果您只是更改总数但第一个始终具有相同的地址,则可以在连接字符串中仅指定第一个节点的地址。
根据驱动程序,这可能会或可能不会连接到副本集(而不是直接连接到那个节点),通常有两种解决方案:
- 向 URI 添加 replicaSet 选项。
- 提供前两个节点地址。
或者,您可以设置 SRV records 并使用 SRV URI,这就是 MongoDB Atlas 的工作方式。这适用于所有拓扑(包括分片集群,副本集发现不适用于)。
Helm 图表 stable/mongodb-replicaset
还部署了 2 个无头服务:
<release name>-mongodb-replicaset
<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 以进行测试,因为它们在默认情况下处于启用状态。
我已经使用 Helm 和图表 stable/mongodb-replicaset
在 Kubernetes 上,我可以使用类似
的连接字符串连接到 MongoDBmongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?replicaSet=myRepl
如果我更改副本数,连接字符串也会更改,这也意味着连接到数据库的每个应用程序都需要更新。
有解决办法吗?
我想创建一个服务,这样只需要更改它,但是连接字符串没有通过正则表达式验证。
如有任何帮助,我们将不胜感激。
驱动程序将自动发现副本集的所有节点。如果您只是更改总数但第一个始终具有相同的地址,则可以在连接字符串中仅指定第一个节点的地址。
根据驱动程序,这可能会或可能不会连接到副本集(而不是直接连接到那个节点),通常有两种解决方案:
- 向 URI 添加 replicaSet 选项。
- 提供前两个节点地址。
或者,您可以设置 SRV records 并使用 SRV URI,这就是 MongoDB Atlas 的工作方式。这适用于所有拓扑(包括分片集群,副本集发现不适用于)。
Helm 图表 stable/mongodb-replicaset
还部署了 2 个无头服务:
<release name>-mongodb-replicaset
<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 以进行测试,因为它们在默认情况下处于启用状态。