最近更新时间:2020-07-28 17:45:12
MongoDB副本集实例通过多个数据副本来保证数据的高可靠,通过自动的主备切换机制来保证服务的高可用。需要注意的是,您需要使用正确的方法连接副本集实例来保障高可用,您也可以通过设置来实现读写分离。
要正确连接副本集实例,您需要先了解下MongoDB的Connection String URI,所有官方的driver都支持以Connection String的方式来连接MongoDB。
官方推荐的连接格式如下:
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
常见参数解释如下:
参数 | 解释 | 备注 |
---|---|---|
mongodb:// | 前缀,代表这是一个Connection String | 必须填写 |
username:password@ | 登录mongodb服务的名称和密码 | 必须填写 |
hostX:port | 副本集成员的IP地址:端口信息,多个节点用逗号隔开 | 主从节点都填写 |
database | 认证的数据库 | 金山云 MongoDB指定为admin |
authSource=admin | 通过admin库对登录的用户名和密码进行认证 | 金山云 MongoDB指定为admin,必须填写 |
readPreference | 读操作的主从优先级 | 默认为primary |
options | 其他可配置的参数 | 可根据实际需要配置 |
其他可配置的参数详见Connection String URI
readPreference设置读操作的主从优先级,详见Read Preference可有几下几种设置:
- readPreference=Primary 只读主节点,默认方式
- readPreference=primaryPreferred 主节点优先,如主节点不可用,则读从节点
- readPreference=secondary只读从节点,如从节点不可用会报错
- readPreference=secondaryPreferred从节点优先,如从节点不可用,则读主节点
副本集实例的Primary节点不是固定的。当遇到副本集轮转升级、Primary节点宕机、网络分区等场景时可能会触发主备切换,副本集可能会选举一个新的Primary节点,原先的Primary节点会降级为Secondary节点。
若使用Primary节点的地址直接连接Primary节点,所有的读写操作均在Primary节点完成,造成该节点压力较大,且一旦副本集发生主备切换,您连接的Primary会降级为Secondary,您将无法继续执行写操作,将严重影响到您的业务使用。
为保实例高可用及实现读写分离,请设置成readPreference=secondaryPreferred
规范示例如下:
mongodb://username:password@10.0.0.1:27017,10.0.0.2:27017/dbname?authSource=admin&replicaSet="xxxxxxxxxxxxxxxxxxx"&readPreference=secondaryPreferred
注意:replicaSet="xxxxxxxxxxxxxxxxxxx"在金山云指的是副本集实例的ID.(可以在控制台实例列表页/详情页获取)
通过上述 Connection String 来连接MongoDB副本集实例,读请求将优先发给Secondary节点实现读写分离。同时客户端会自动检测节点的主备关系,当主备关系发生变化时,自动将写操作切换到新的Primary节点上,以保证服务的高可用。
纯净模式