文档首页 > > 最佳实践> 如何连接副本集实例以实现读写分离和高可用

如何连接副本集实例以实现读写分离和高可用

分享
更新时间: 2020/04/22 GMT+08:00

DDS副本集不仅可以通过存储多份数据副本来保证数据的高可靠性,还可以通过自动主备切换机制来保证服务的高可用。通过客户端读取不同的数据副本,可以提高数据的读取性能。请使用推荐方式连接副本集实例,否则,将无法体验副本集的高可用性和高读取性能。

副本集的主节点不是固定的,当出现副本集配置改变、主节点宕机、人为主备切换等状况,会导致主备节点切换,此时副本集可能会选举出新主节点,原来的主节点则降为备节点。如下图所示:

图1 主备切换示意图

连接副本集实例(推荐使用)

DDS副本集包含主、备、隐藏节点。其中,隐藏节点对用户不可见,通过URL连接副本集实例时,只提供主节点和备节点的IP及端口号。

推荐使用如下URL连接副本集实例:

mongodb://rwuser:****@192.168.0.148:8635,192.168.0.96:8635/test?authSource=admin&replicaSet=replica

其中,“192.168.0.148:8635,192.168.0.96:8635”中包含一个主节点和一个备节点的IP及端口号。即使发生主备切换而更换了主节点,客户端仍然可以成功连接副本集实例。同时,提供副本集多个IP及端口号,可以扩展整个数据库的读写性能,如下图所示:

图2 数据读写示意图

连接副本集实例(非友好方式)

通过如下URL连接副本集实例:

mongodb://rwuser:****@192.168.0.148:8635/test?authSource=admin&replicaSet=replica

其中,“192.168.0.148:8635”为暂时的主节点IP及端口号。当发生主备切换而更换了主节点,客户端将无法连接到副本集实例,因为客户端无法知道新选举出的主节点的IP及端口号信息,导致整个数据库服务不可用。同时,只提供主节点IP及端口号,读写只能在固定的主机上操作,无法扩展数据库的读写性能,如图下图所示:

图3 数据读写示意图

Java驱动连接副本集实例

示例代码:

MongoClientURI connectionString = new MongoClientURI("mongodb://rwuser:****@192.168.0.148:8635,192.168.0.96:8635/test?authSource=admin&replicaSet=replica"); MongoClient client = new MongoClient(connectionString);
MongoDatabase database = client.getDatabase("test");
MongoCollection<Document> collection = database.getCollection("mycoll");
  • “rwuser:****”为启动鉴权的用户名和密码。
  • “192.168.0.148:8635,192.168.0.96:8635”为副本集主、备节点的IP及端口号。
  • “test”表示待连接的数据名称。
  • “authSource=admin”表示鉴权时,用户名所属的数据库。
  • “replicaSet=replica”表示副本集实例类型名称。
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问