MongoDB副本集实例通过多个数据副本来保证数据的高可靠,通过自动的主备切换机制来保证服务的高可用。需要注意的是,您需要使用正确的方法连接副本集实例来保障高可用,您也可以通过设置来实现读写分离。

使用前须知

  • 副本集实例的Primary节点不是固定的。当遇到副本集轮转升级、Primary节点宕机、网络分区等场景时可能会触发主备切换,副本集可能会选举一个新的Primary节点,原先的Primary节点会降级为Secondary节点。
  • 若使用Primary节点的地址直接连接Primary节点,所有的读写操作均在Primary节点完成,造成该节点压力较大,且一旦副本集发生主备切换,您连接的Primary会降级为Secondary,您将无法继续执行写操作,将严重影响到您的业务使用。

Connection String连接说明

要正确连接副本集实例,您需要先了解下MongoDB的Connection String URI,所有官方的driver都支持以Connection String的方式来连接MongoDB。

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
说明:
  • mongodb:// :前缀,代表这是一个Connection String。
  • username:password@:登录数据库的用户和密码信息,如果启用了鉴权,需要指定密码。
  • hostX:portX:副本集成员的IP地址:端口信息,多个成员以逗号分割。
  • /database:鉴权时,用户帐号所属的数据库。
  • ?options:指定额外的连接选项。
说明 更多关于Connection String请参见MongoDB文档 Connection String URI

副本集实例Connection String URI连接示例

云数据库MongoDB提供了Connection String URI连接方式。

  1. 获取副本集实例Connection String URI 连接信息,详情请参见副本集实例连接说明
  2. 应用程序设置使用Connection String URI来连接实例,详情请参见程序代码连接实例
    说明

    要实现读写分离,需要在Connection String URI的options里添加readPreference=secondaryPreferred,设置读请求为Secondary节点优先。

    更多读选项请参见Read preferences

    示例:
    mongodb://root:xxxxxxxx@dds-xxxxxxxxxxxx:3717,xxxxxxxxxxxx:3717/admin?replicaSet=mgset-xxxxxx&readPreference=secondaryPreferred

通过上述Connection String来连接MongoDB副本集实例,读请求将优先发给Secondary节点实现读写分离。同时客户端会自动检测节点的主备关系,当主备关系发生变化时,自动将写操作切换到新的Primary节点上,以保证服务的高可用。