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节点上,以保证服务的高可用。