如何实现副本集高可用和读写分离-凯发k8国际娱乐官网入口
dds副本集不仅可以通过存储多份数据副本来保证数据的高可靠性,还可以通过自动主备切换机制来保证服务的高可用。通过客户端读取不同的数据副本,可以提高数据的读取性能。请使用高可用方式连接副本集实例,您也可以通过设置来实现读写分离。否则,将无法体验副本集的高可用性和高读取性能。
副本集的主节点不是固定的,当出现副本集配置改变、主节点宕机、人为主备切换等状况,会导致主备节点切换,此时副本集可能会选举出新主节点,原来的主节点则降为备节点。如下图所示:
连接副本集实例(高可用方式)
dds副本集包含主、备、隐藏节点。其中,隐藏节点对用户不可见。您需要使用一种高可用的方式(即同时连接主节点和备节点的ip和端口)连接副本集实例,从而实现副本集的读写分离和高可用。
以下主要介绍如何使用url和java实现高可用连接实例的方法。
方法一:通过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及端口号,可以扩展整个数据库的读写性能,如下图所示:
方法二: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"); mongocollectioncollection = database.getcollection("mycoll");
参数 |
说明 |
---|---|
rwuser:**** |
启动鉴权的用户名和密码。 |
192.168.0.148:8635,192.168.0.96:8635 |
副本集主、备节点的ip及端口号。 |
test |
待连接的数据库名称。 |
authsource=admin |
表示鉴权时,用户名所属的数据库。 |
replicaset=replica |
副本集实例类型名称。 |
连接副本集实例(非友好方式)
通过连接地址连接副本集实例
mongodb://rwuser:****@192.168.0.148:8635/test?authsource=admin&replicaset=replica
其中,“192.168.0.148:8635”为暂时的主节点ip及端口号。当发生主备切换而更换了主节点,客户端将无法连接到副本集实例主节点,因为客户端无法知道新选举出的主节点的ip及端口号信息,导致整个数据库服务发生故障。同时,只提供主节点ip及端口号,读写只能在固定的主机上操作,无法扩展数据库的读写性能,如图下图所示:
读写分离
通过如下高可用地址举例说明连接dds副本集实例:
mongodb://rwuser:@192.168.xx.xx:8635,192.168.xx.xx:8635/test?authsource=admin&replicaset=replica&readpreference=secondarypreferred
其中:数据库账号为rwuser,所属数据库为admin。
连接实例后,读请求将优先发给secondary节点实现读写分离。当主备关系发生变化时,自动将写操作切换到新的primary节点上,以保证服务的高可用。
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨