阿里云数据库ApsaraDB 关注
手机版

MongoDB Driver:使用正确的姿势连接分片集群

  1. 云栖社区>
  2. 阿里云数据库ApsaraDB>
  3. 博客>
  4. 正文

MongoDB Driver:使用正确的姿势连接分片集群

张友东 2017-02-09 19:25:29 浏览4853 评论3

摘要: 云数据库 MongoDB 版 基于飞天分布式系统和高性能存储,提供三节点副本集的高可用架构,容灾切换,故障迁移完全透明化。

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

使用分片集群时你需要知道的

  • 用户访问 mongos 跟访问单个 mongod 类似
  • 所有 mongos 是对等关系,用户访问分片集群可通过任意一个或多个mongos
  • mongos 本身是无状态的,可任意扩展,集群的服务能力为『Shard服务能力之和』与『mongos服务能力之和』的最小值。
  • 访问分片集群时,最好将应用负载均匀的分散到多个 mongos 上

正确连接分片集群的姿势

要正确连接复制集,需要先了解下MongoDB的Connection String URI所有官方的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的地址信息。

mongos2

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

mongos

例如通过java来连接,更多的DEMO

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 仍然是共享的)。

_2017_02_09_7_23_01

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

常用连接参数

如何实现读写分离?

在options里添加readPreference=secondaryPreferred即可实现,读请求优先到Secondary节点,从而实现读写分离的功能,更多读选项参考Read preferences

如何限制连接数?

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

如何保证数据写入到大多数节点后才返回?

在options里添加w= majority即可保证写请求成功写入大多数节点才向客户端确认,更多写选项参考Write Concern

基于飞天分布式系统和高性能存储,提供三节点副本集的高可用架构,容灾切换,故障迁移完全透明化。并提供专业的数据库在线扩容、备份回滚、性能优化等解决方案。

用云栖社区APP,舒服~

【云栖快讯】青年们,一起向代码致敬,来寻找第83行吧,云栖社区邀请大神彭蕾、多隆、毕玄、福贝、点评Review你的代码,参与互动者将选取50位精彩回复赠送“向代码致敬”定制T恤1件,最终成为“多隆奖”的小伙伴还将获得由阿里巴巴提供的“多隆奖”荣誉证书和奖杯。  详情请点击

网友评论

1F
外拓科技

免费启用中文后缀域名如:.com【互联网】,.cn【中国】,.net【网络】
《互联网域名中文输入简化协议》
中文3.0时代
爆发了!

.cn 翻译为【中国】
.com 翻译为【互联网】、【国际互联网】
.com.cn 翻译为:【中国互联网】
.net 翻译为:【国际网络】、【网络】
.net.cn 翻译为:【中国网络】
.org 翻译为:【国际公益】;【公益】
.org.cn 翻译为:【中国公益】;【公益】
.gov.cn 翻译为:【中国政府】;【政府】
.edu.cn 翻译为:【中国教育】;【教育】

例如:【超密】bbs.aliyun【互联网】;https://bbs.aliyun.com
将http:// 翻译为【超文】加上对应的后缀用中文全角分号标准“;”
如 【超文】外拓科技【公益】;http://www.waituo.org

这是免费的!只为母语而生!

将文本内容保存到域名根目录的
zwdns.html

《互联网域名中文输入简化协议》

内容
【超密】bbs.aliyun【互联网】;https://www.bbs.aliyun.com

当支持【中文协议】的浏览器地址栏网址为https://www.bbs.aliyun.com时显示【超密】bbs.aliyun【互联网】

将文本内容保存到域名根目录的
zwurl.html

《互联网域名中文输入简化协议》
内容

【超密】bbs.aliyun【互联网】:《互联网域名中文输入简化协议》;https://bbs.aliyun.com/read/305217.html?displayMode=1&ordertype=asc

当支持【中文协议】的浏览器地址栏网址为https://bbs.aliyun.com/read/305217.html?displayMode=1&ordertype=asc
时显示
【超密】bbs.aliyun【互联网】:《互联网域名中文输入简化协议》
用户在支持【中文协议】的浏览器地址栏输入【超密】bbs.aliyun【互联网】:《互联网域名中文输入简化协议》
会解析到https://bbs.aliyun.com/read/305217.html?displayMode=1&ordertype=asc
还等什么呢!行动起来吧!
我们已为阿里开通【淘宝】中文商标域名后缀,【天猫】中文商标域名后缀。 【淘宝】的中文DNS查询地址是zwdns.taobao.com 自行管理审核,【天猫】的是zwdns.tmall.com 自行管理审核。
如您的淘宝网店是
外拓科技 网址是 https://waituo.taobao.com
您可 在支持【中文协议】的客户端上输入 外拓科技【淘宝】
系统会查询【淘宝】店铺的 外拓科技 给你解析 如:【超密】外拓科技【淘宝】;https://waituo.taobao.com

快快关注【中文协议】吧;http://www.waituo.org

2F
诗坤

为什么不在增加一个延迟备份节点?

3F
1231783689382481

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

怎么分散呢?轮询?hash?

张友东
文章91篇 | 关注462
关注
基于飞天分布式系统和高性能存储,提供三节点副本集的高可用架构,容灾切换,故障迁移完全透明化。... 查看详情
提供海量、安全和高可靠的云存储服务。RESTful API的平台无关性,容量和处理能力的弹性... 查看详情
快速、完全托管的TB/PB级数据仓库解决方案,向用户提供了完善的数据导入方案以及多种经典的分... 查看详情
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效... 查看详情
520表白

520表白