MongoDB系列:5、MongoDB Driver使用正确的姿式链接复制集

 

MongoDB复制集(Replica Set)经过存储多份数据副本来保证数据的高可靠,经过自动的主备切换机制来保证服务的高可用。但须要注意的时,链接副本集的姿式若是不对,服务高可用将不复存在。html

 

 

使用复制集时你须要知道的

MongoDB复制集里Primary节点是不固定的,当遇到复制集轮转升级、Primary宕机、网络分区等场景时,复制集可能会选举出一个新的Primary,而原来的Primary则会降级为Secondary,即发生主备切换。java

总而言之,MongoDB复制集里Primary节点是不固定的,不固定的,不固定的,重要的事情说3遍。

mongodb

当链接复制集时,若是直接指定Primary的地址来链接,当时可能能够正确读写数据的,但一旦复制集发生主备切换,你链接的Primary会降级为Secondary,你将没法继续执行写操做,这将严重影响到你的线上服务。数据库

因此生产环境千万不要直连Primary,千万不要直连Primary,千万不要直连Primary。网络

说了这么多,到底该如何链接复制集?app

 

正确链接复制集的姿式

要正确链接复制集,须要先了解下MongoDB的Connection String URI全部官方的driver都支持以Connection String的方式来链接MongoDB。

阿里云

下面就是Connection String包含的主要内容spa

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

 

 

例如经过java来链接,更多的DEMOhtm

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:使用正确的姿式链接复制集

相关文章
相关标签/搜索