开发者社区 问答 正文

如何正确地连接分片集群?

所有官方的 MongoDB driver 都支持以 Connection String 的方式来连接 MongoDB 分片集群。
下面就是 Connection String 包含的主要内容: mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]


  • mongodb:// 前缀,代表这是一个Connection String;

  • username:password@ 如果启用了鉴权,需要指定用户密码;

  • hostX:portX多个 mongos 的地址列表;

  • /database鉴权时,用户帐号所属的数据库;

  • ?options 指定额外的连接选项。

以连接云数据库 MongoDB 版为例,当您购买云 MongoDB 分片集群后,就会在控制台上看到各个 mongos 的地址信息。

为了方便使用,控制台上也生成了连接复制集的 Connection String 及通过 Mongo Shell 连接的命令。

通过 java 来连接的示例代码如下所示: MongoClientURI connectionString = new MongoClientURI("mongodb://:****@s-m5e80a9241323604.mongodb.rds.aliyuncs.com:3717,s-m5e053215007f404.mongodb.rds.aliyuncs.com:3717/admin"); // ****替换为root密码
MongoClient client = new MongoClient(connectionString);
MongoDatabase database = client.getDatabase("mydb");
MongoCollection<Document> collection = database.getCollection("mycoll");


通过上述方式连接分片集群时,客户端会自动将请求分散到多个 mongos 上,以实现负载均衡;同时,当 URI 里 mongos 数量在2个及以上时,当有 mongos 故障时,客户端能自动进行 failover,将请求都分散到状态正常的 mongos 上。
当 mongos 数量很多时,还可以按应用来将 mongos 进行分组,比如有2个应用 A、B、有4个 mongos,可以让应用 A 访问 mongos 1-2(URI 里只指定 mongos 1-2 的地址), 应用 B 来访问 mongos 3-4(URI 里只指定 mongos 3-4 的地址),根据这种方法来实现应用间的访问隔离(应用访问的 mongos 彼此隔离,但后端 Shard 仍然是共享的)。

总而言之,在访问分片集群时,请务必确保 MongoDB URI 里包含2个及以上的 mongos 地址,来实现负载均衡及高可用。

常用连接参数


  • 如何实现读写分离?
    在 options 里添加 readPreference=secondaryPreferred 即可实现,读请求优先到 Secondary 节点,从而实现读写分离的功能。

  • 如何限制连接数?
    在 options 里添加 maxPoolSize=xx 即可将客户端连接池限制在xx以内。

  • 如何保证数据写入到大多数节点后才返回?
    在 options 里添加 w= majority 即可保证写请求成功写入大多数节点才向客户端确认。

展开
收起
云栖大讲堂 2017-10-30 17:21:18 1752 分享 版权
阿里云 AI 助理回答

在使用阿里云的云数据库MongoDB版时,通过Connection String连接分片集群确实是一种高效且灵活的方式。您已经概述了如何构建Connection String以及一些关键参数的作用,这里我补充一些与阿里云平台特性和最佳实践相关的信息。

阿里云云数据库MongoDB版的特定配置

  1. 获取Connection String: 在阿里云控制台上,对于每个创建的MongoDB实例(包括分片集群),系统都会自动生成一个推荐的Connection String,您可以直接从实例详情页面复制该字符串用于应用程序的配置。这会包含必要的认证信息、地址和端口等。

  2. 安全组设置: 确保您的应用服务器所在的ECS实例或网络能够访问MongoDB实例开放的端口。在阿里云中,这通常涉及到安全组规则的配置,确保入方向规则允许来自应用服务器IP的流量。

  3. VPC与专有网络: 如果您的MongoDB实例部署在VPC内,确保您的应用服务也在同一VPC或通过高速通道连接的VPC内,以实现私网通信,提高安全性并减少公网延迟。

  4. 监控与报警: 利用阿里云提供的监控服务为您的MongoDB实例设置性能指标监控和报警策略,及时发现并处理潜在问题。

  5. 备份与恢复: 了解阿里云云数据库MongoDB版的自动备份策略,并根据需要配置备份周期和保留时间。同时,熟悉数据恢复流程,以便在数据丢失或误操作时快速恢复。

进阶连接参数示例

  • 读写分离:

    ?readPreference=secondaryPreferred
    

    这将使得读请求优先路由到Secondary节点,减轻Primary的压力,实现读写分离。

  • 连接池大小限制:

    ?maxPoolSize=100
    

    根据应用的实际需求调整连接池大小,避免资源浪费或因连接数过多导致的性能瓶颈。

  • 写操作确认策略:

    ?w=majority&wtimeoutMS=5000
    

    这表示写操作需等待大多数节点确认后才返回成功,wtimeoutMS设置了超时时间,防止写操作无限期等待。

注意事项

  • 高可用性设计: 虽然客户端能自动进行mongos故障转移,但建议定期检查实例健康状态,确保所有组件正常运行。
  • 成本优化: 根据业务量合理选择实例规格和分片数量,避免过度配置带来的额外成本。
  • 合规与安全: 确保遵循阿里云的安全最佳实践,如定期修改数据库密码,使用SSL加密连接等。

结合阿里云平台的强大功能和管理工具,您可以更加便捷地管理和优化您的MongoDB分片集群。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答