MongoDB 最佳实践
使用数据镜像保护尚未写入完整的数据
云数据库MongoDB提供数据镜像能力,您可以对副本集实例或分片集群实例创建一个只读数据镜像。其中副本集最高支持3TB数据,集群版本最高支持96TB数据。
使用场景
创建数据镜像,可确保在数据大批量写入更新期间,所有读请求从数据镜像获取数据。从而确保数据在完整写入前不会被应用程序读取到。数据镜像的读取性能与先前非镜像数据的读取性能完全保持一致。
说明: 数据更新完成后,可将数据正式同步生效,供应用正常连接读取最新数据。通过阿里云提供的数据镜像操作命令,可实现数据自动同步生效(秒级别同步)。数据同步期间不影响正常数据读取操作。 |
- 通过mongo shell连接到需要操作的节点(Primary节点或Secondary节点)。
- 创建数据镜像。
db.runCommand({checkpoint:"create"})
- 数据镜像功能使用完毕,删除数据镜像。
db.runCommand({checkpoint:"drop"})
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]]
说明:
|
副本集实例 Connection String URI 连接示例
云数据库MongoDB提供了 Connection String URI 连接方式。
获取副本集实例的 Connection String URI 连接信息。
说明: 要实现读写分离,需要在 Connection String URI 的options里添加readPreference=secondaryPreferred ,设置读请求为Secondary节点优先。mongodb://root:xxxxxxxx@dds-xxxxxxxxxxxx:3717,xxxxxxxxxxxx:3717/admin?replicaSet=mgset-xxxxxx&readPreference=secondaryPreferred |
通过上述 Connection String 来连接MongoDB副本集实例,读请求将优先发给Secondary节点实现读写分离。同时客户端会自动检测节点的主备关系,当主备关系发生变化时,自动将写操作切换到新的Primary节点上,以保证服务的高可用。
文档反馈
(如有产品使用问题,请 提交工单)