MongoDB系列:五、MongoDB Driver使用正确的姿势连接复制集
MongoDB复制集(Replica Set)通过存储多份数据副本
来保证数据的高可靠,通过自动的主备切换机制
来保证服务的高可用。但需要注意的时,连接副本集的姿势
如果不对,服务高可用将不复存在。
使用复制集时你需要知道的
MongoDB复制集里Primary节点是不固定的,当遇到复制集轮转升级、Primary宕机、网络分区等场景时,复制集可能会选举出一个新的Primary,而原来的Primary则会降级为Secondary,即发生主备切换。
总而言之,MongoDB复制集里Primary节点是不固定的,不固定的,不固定的,重要的事情说3遍。
当连接复制集时,如果直接指定Primary
的地址来连接,当时可能可以正确读写数据的,但一旦复制集发生主备切换,你连接的Primary会降级为Secondary,你将无法继续执行写操作,这将严重影响到你的线上服务。
所以生产环境千万不要直连Primary,千万不要直连Primary,千万不要直连Primary。
说了这么多,到底该如何连接复制集?
正确连接复制集的姿势
要正确连接复制集,需要先了解下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 复制集成员的ip:port信息,多个成员以逗号分割
- /database 鉴权时,用户帐号所属的数据库
- ?options 指定额外的连接选项
以连接AliCloudDB for MongoDB为例,当你购买阿里云MongoDB复制集时,就会得到复制集的名称、以及复制集成员的地址信息。
例如通过java来连接,更多的DEMO
MongoClientURI connectionString = new MongoClientURI("mongodb://root:****@dds-bp114e3f1fc441342.mongodb.rds.aliyuncs.com:3717,dds-bp114e3f1fc441341.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-677201"); // ****替换为root密码 MongoClient client = new MongoClient(connectionString); MongoDatabase database = client.getDatabase("mydb"); MongoCollection<Document> collection = database.getCollection("mycoll");
通过正确的Connection String来连接MongoDB复制集时,客户端会自动检测复制集的主备关系,当主备关系发生变化时,自动将写切换到新的主上,以保证服务的高可用。
常用连接参数
如何实现读写分离?
在options里添加readPreference=secondaryPreferred
即可实现,读请求优先到Secondary节点,从而实现读写分离的功能,更多读选项
参考Read preferences
如何限制连接数?
在options里添加maxPoolSize=xx
即可将客户端连接池限制在xx以内。
如何保证数据写入到大多数节点后才返回?
在options里添加w= majority
即可保证写请求成功写入大多数节点才向客户端确认,更多写选项
参考Write Concern
转载自:MongoDB Driver:使用正确的姿势连接复制集
转载于:https://www.cnblogs.com/DDgougou/p/10535394.html
MongoDB系列:五、MongoDB Driver使用正确的姿势连接复制集相关推荐
- MongoDB Driver:使用正确的姿势连接复制集
MongoDB复制集(Replica Set)通过存储多份数据副本来保证数据的高可靠,通过自动的主备切换机制来保证服务的高可用.但需要注意的时,连接副本集的姿势如果不对,服务高可用将不复存在. 使用复 ...
- MongoDB 教程五: MongoDB固定集合和性能优化 (索引Indexes, 优化器, 慢查询profile)
mongodb索引详解(Indexes) 索引介绍 索引在mongodb中被支持,如果没有索引,mongodb必须扫描每一个文档集合选择匹配的查询记录.这样扫描集合效率并不高,因为它需要mongod进 ...
- MongoDB 教程五: MongoDB固定集合和性能优化
MongoDB 固定集合(Capped Collections) MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环 ...
- MongoDB系列之MongoDB常用命令
一.MongoDB基本操作 1.1.软件环境准备 软件环境: MongoDB Server5.0.9 Navicat15.0.28 RoboMongo 0.9.0 Window10系统 1.2.Mon ...
- mongodb索引生成HTML页面,mongodb高阶:索引创建、聚合查询、复制集、分片、创建备份和部署...
先前我们讨论了mongodb的进阶查询:投影查询.分页查询以及对查询结果进行排序,从本节起我们开始学习mongodb相关的高级技术,首先我们会讨论mongodb如何创建索引,索引是数据库中最重要的东西 ...
- MongoDB系列之学习笔记教程汇总
1.什么是MongoDB? MongoDB系列之SQL和NoSQL的区别 MongoDB系列之什么是非关系型数据库 MongoDB系列之MongoDB基本概念 MongoDB系列之适用场景和不适用场景 ...
- MongoDB 复制集那点事儿
何以高可用? 我们以前用Mysql的时候,经常是一台服务器走天下,如果只是用于学习,是没有问题的,但是在生产环境中,这样的风险是很大的,如果服务器因为网络原因或者崩溃了,就会导致数据库一段时间了不可用 ...
- MongoDB复制集原理和配置
MongoDB高手课_MongoDB_NoSQL-极客时间极客时间推出的MongoDB高手课是帮助互联网从业者学习MongoDB.NoSQL的在线课程,极客时间是面向IT领域的知识服务产品,致力于帮助 ...
- mongodb踩坑:复制集(尤其是单台服务器多个mongo服务的)服务节点挂载问题
如果帮助了你,希望可以点赞.评论,你的点赞与评论是我最大的创作动力! 问题 我在一台服务器上开了3个mongo服务组成一个mongo的复制集,这也是网上常见的教授搭建复制集的方式.然后我再另一台服务器 ...
最新文章
- 3D视觉创新应用(三维重建)竞赛作品系列——人体三维精准量测与动作捕捉
- Python进阶之一
- BZOJ 1012 最大数
- 在Netbeans下配置Tomcat manager用户名与密码
- 散列表相关题目(线性探测再散列法)
- 跟我学OpenJPA
- 释放mysql ibdata1文件_释放MySQL ibdata1文件的空间
- SQL Server2012如何导出sql脚本并且还原数据库
- [转]面向对象的六大原则
- excel小写转大写公式_Word如何一键转PPT/Excel,来看看用对的方式操作office有多方便...
- curl http_code状态码 含义
- mongodb卸载_如何在Windows上安装MongoDB,启动,卸载
- thinkphp5--多文件入口设置
- 小米手机60帧录屏_小米手机中居然有这么强大投屏录屏功能?!我可能用了个假小米吧...
- 苹果id无法登陆_英雄联盟手游苹果id怎么绑定拳头账号?绑定教程介绍[图]-攻略...
- 大数据私房菜--Hadoop完全分布式安装
- 校招经历-java开发面试题
- 百度快照投诉技巧案例分析百度快照就是这样刷出来的
- 萝卜青菜各有所爱------TypeScript VS JavaScript
- 做设计常用的素材下载网站