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复制集时,就会得到复制集的名称、以及复制集成员的地址信息。

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

例如通过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 collection = database.getCollection("mycoll");

通过正确的Connection String来连接MongoDB复制集时,客户端会自动检测复制集的主备关系,当主备关系发生变化时,自动将写切换到新的主上,以保证服务的高可用。

常用连接参数

如何实现读写分离?

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

如何限制连接数?

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

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

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

MongoDB Driver:使用正确的姿势连接复制集相关推荐

  1. MongoDB系列:五、MongoDB Driver使用正确的姿势连接复制集

    MongoDB复制集(Replica Set)通过存储多份数据副本来保证数据的高可靠,通过自动的主备切换机制来保证服务的高可用.但需要注意的时,连接副本集的姿势如果不对,服务高可用将不复存在. 使用复 ...

  2. 【mongoDB运维篇③】replication set复制集

    介绍 replicattion set 多台服务器维护相同的数据副本,提高服务器的可用性,总结下来有以下好处: 数据备份与恢复 读写分离 MongoDB 复制集的结构以及基本概念 正如上图所示,Mon ...

  3. mongodb复制集部署

    部署复制集 由三个节点组成的 复制集 为网络故障或是其他的系统故障提供了足够的冗余.该复制集也有足够的分布式读操作的能力.复制集应该保持奇数个节点,这也就保证了 选举 可以正常的进行 用3台已有的 m ...

  4. mongodb踩坑:复制集(尤其是单台服务器多个mongo服务的)服务节点挂载问题

    如果帮助了你,希望可以点赞.评论,你的点赞与评论是我最大的创作动力! 问题 我在一台服务器上开了3个mongo服务组成一个mongo的复制集,这也是网上常见的教授搭建复制集的方式.然后我再另一台服务器 ...

  5. MongoDB的正确使用姿势

    本文来自网易云社区,转载务必请注明出处. MongoDB是一个非常有前途的数据库,MongoDB官方对自己的定位是通用数据库,其实这个定位跟MySQL有些像.虽其流行度还远未达到MySQL的水平,但笔 ...

  6. Computer:如何将表格以正确地姿势从Excel文件复制粘贴到word文件中(保证两个数据源一致)

    Computer:如何将表格以正确地姿势从Excel文件复制粘贴到word文件中(保证两个数据源一致) 目录 如何将表格以正确地姿势从Excel文件复制粘贴到word文件中(保证两个数据源一致) 表格 ...

  7. Centos下安装MongoDB复制集

    2019独角兽企业重金招聘Python工程师标准>>> 在一台Centos下模拟安装MongoDB的复制集 准备三份配置文件: mongod.conf bind_ip=0.0.0.0 ...

  8. java mongodb 关闭连接_如何在mongodb上使用java驱动程序保持连接池关闭?

    我正在从 java驱动程序2.12.3升级到3.3.0.奇怪的是,收集池似乎突然"起作用". 我的设置如下: Connection在主线程中建立: mongoClient = ne ...

  9. Redis 作者 Antirez 讲如何实现分布式锁?Redis 实现分布式锁天然的缺陷分析Redis分布式锁的正确使用姿势!...

    Redis分布式锁基本原理 采用 redis 实现分布式锁,主要是利用其单线程命令执行的特性,一般是 setnx, 只会有一个线程会执行成功,也就是只有一个线程能成功获取锁:看着很完美. 然而-- 看 ...

最新文章

  1. 腾讯产品经理的一天是啥样的?
  2. 俄罗斯小方块游戏html,通过h5的canvas手写一个俄罗斯方块小游戏
  3. 工作中常用的kafka命令
  4. kernel中对文件的读写【学习笔记】【原创】
  5. 【Java】用键盘输入若干数字,以非数字字符结束,计算这些数的和和平均值
  6. LogBack 打印 ES的DSL日志信息
  7. Nexus 安装 使用说明
  8. HTTP性能测试工具wrk安装及使用
  9. 有关Silverlight TabControl组件的研究——Silverlight学习笔记(5)
  10. 如何编写 maptalks plugin
  11. 怎么把知网的外文文献翻译成中文_方法一:外文文献翻译法原理:知网论文反抄袭检测系统和万方数据...
  12. bootstrap-table导出excel科学计数法bug,数字过长变成科学计数法
  13. Excel如何在不同日期后面插入空行
  14. python 全栈开发,Day113(方法和函数的区别,yield,反射)
  15. 他如何从一位专车司机成功变身CEO?
  16. 日元兑人民币用计算机怎么算,日元兑换人民币是以什么计算?谢谢我有日元 – 手机爱问...
  17. 用python实现简单画画
  18. 模拟退火算法(Simulated Annealing,SA)MATLAB案例详细解析
  19. C/C++黑魔法-利用include宏读文件
  20. Android PopupWindow监听点击外部事件

热门文章

  1. linux 权限模式,Linux权限模式
  2. 转 : 深入解析Java锁机制
  3. 手动添加ubuntu服务
  4. 秒杀多线程第六篇 经典线程同步 事件Event
  5. Bootsrap基本应用
  6. 彻底弄懂css3的flex弹性盒模型
  7. LocalDB连接失败
  8. SSAS : 使用.NET为SSAS编写自定义程序集(四)
  9. github上传代码
  10. 隔壁大爷都会网络布线啦、搞起来搞起来