如何连接副本集实例实现读写分离和高可用
更新时间:2022-11-30
MongoDB副本集实例通过多个数据副本来保证数据的高可靠,通过主从切换机制来保证服务的高可用。需要注意的是,您需要使用正确的方法连接副本集实例来保障高可用,您也可以通过设置来实现读写分离。
使用须知
- 副本集实例的Primary节点并不是固定的。当遇到副本集轮流升配、Primary节点宕机、网络分区等场景时可能会发生主从切换来保障整体的可用性,副本集可能会选举一个新的Primary节点,原先的Primary节点会降级为Secondary节点。
- 若只使用Primary节点的地址直接连接Primary节点,所有的读写操作均在Primary节点完成,造成该节点压力较大。而且如果副本集实例发生主从切换,您连接节点的角色将发生变化,从而会对写入操作造成影响。
Connection String连接说明
要正确连接副本集实例,您需要先了解下MongoDB的Connection String URI。
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
说明:
mongodb://
:前缀,代表这是一个Connection String。username:password@
:登录数据库的用户和密码信息,初始账号为root。如果启用了鉴权,需要指定密码。hostX:portX
:副本集成员节点的连接地址:端口信息,多个成员以逗号分割。/database
:鉴权数据库名,即数据库账号所属的数据库。当数据库账号为root时,对应的数据库为admin。?options
:指定额外的连接选项。
使用Connection String连接示例
云数据库MongoDB实例提供了Connection String URI连接方式。
1.获取副本集实例Connection String URI 连接信息,详情请参见通过MongoShell连接副本集实例
2.业务应用程序设置使用Connection String URI来连接实例,详情请参见通过程序代码连接MongoDB实例
说明:要实现读写分离,需要在Connection String URI的options里添加readPreference选项,例如设置读请求为Secondary节点优先。更多读选项请参见Read preferences。
示例
mongo "mongodb://root:****@XQgIftoqm.mongodb.bj.baidubce.com:27017,XQgIft8n4.mongodb.bj.baidubce.com:27017/admin?replicaSet=rep-zNo2RD&readPreference=secondaryPreferred"
通过上述Connection String URI来连接MongoDB副本集实例,读请求将优先发给Secondary节点实现读写分离。同时业务应用程序会自动检测节点的主从关系,当主从关系发生变化时,自动将写操作切换到新的Primary节点上,以保证服务的高可用。