MongoDB分片集群(Sharded Cluster)通过将数据分散存储到多个分片(Shard)中,以实现高可扩展性。实现分片集群时,MongoDB 引入 Config Server 来存储集群的元数据,引入 mongos 作为应用访问的入口,mongos 从 Config Server 读取路由信息,并将请求路由到后端对应的 Shard 上。

  • 用户访问 mongos 跟访问单个 mongod 类似。
  • 所有 mongos 是对等关系,用户访问分片集群可通过任意一个或多个 mongos 。
  • 访问分片集群时,最好将应用负载均匀地分散到多个 mongos 上。

要正确连接分片集群实例,您需要先了解下MongoDB的Connection String URI,所有官方的都支持以 Connection String URI 的方式来连接MongoDB数据库。

Connection String URI 示例:

  • 前缀,代表这是一个Connection String URI 。
  • username:password@ 登录数据库的用户和密码信息。
  • 多个 mongos 的地址列表。
  • /database鉴权时,用户帐号所属的数据库。

云数据库MongoDB提供了 Connection String URI 连接方式。使用 Connection String URI 连接方式进行连接,可实现负载均衡及高可用。

  • 获取分片集群实例的 Connection String URI 连接信息,详情请参考分片集群实例连接说明Connection String URI连接信息
  • 应用程序中设置使用 Connection String URI 来连接实例,详情请参考。
    通过 java 来连接的示例代码如下所示。

说明
通过上述方式连接分片集群时,客户端会自动将请求分散到多个 mongos 上,以实现负载均衡。同时,当 URI 里 mongos 数量在2个及以上时,当有 mongos 故障时,客户端能自动进行切换,将请求都分散到状态正常的 mongos 上。

当 mongos 数量很多时,您可以按应用将 mongos 进行分组。例如有2个应用 A、B,实例有4个 mongos,可以让应用 A 访问 mongos 1-2(URI 里只指定 mongos 1-2 的地址), 应用 B 来访问 mongos 3-4(URI 里只指定 mongos 3-4 的地址)。根据这种方法来实现应用间的访问隔离。

  • 如何实现读写分离
    在 Connection String URI 的options里添加readPreference=secondaryPreferred,设置读请求为Secondary节点优先。

    示例

  • 如何限制连接数
    在 Connection String URI 的options里添加 ,即可将客户端连接池中的连接数限制在xx以内。