更新时间:2026-02-06 GMT+08:00
分享

不同场景下配置连接参数

以下示例场景中node代表“host:port”,host为数据库服务器名称或IP地址,port为数据库服务器端口。

容灾场景

某客户有两套数据库集群,其中A集群为主集群,B集群为容灾集群。当客户执行容灾切换时,A集群将降为容灾集群,B集群将升为主集群。此时为了避免修改配置文件导致的应用重启或重新发版,客户可在初始配置文件时,即将A、B集群写入连接串中。此时在主集群不可连接时,进行容灾倒换,驱动将尝试对容灾集群(新主集群)建立连接。例如A集群为{node1,node2,node3}。B集群为{node4,node5,node6}。

以Dorado双集群为例,url可参考如下配置进行设置,当主备切换后只会连接新的主集群。
jdbc:gaussdb://node1,node2,node3,node4,node5,node6/database?priorityServers=3
但需注意,以上配置在基于流式复制的异地容灾场景中,若对灾备集群实施灾备升主(failover),将产生双主集群同时运行的场景,此时业务可能无法正确连接预期的新主集群。为应对该场景,可将url按主备集群拆分为两条如下配置,在failover场景中业务进行切换,或者按上述统一的url配置,并通过其他手段在failover后对原主集群进行隔离。
jdbc:gaussdb://node1,node2,node3/database
jdbc:gaussdb://node4,node5,node6/database

基于流式复制的异地容灾场景使用容灾读业务推荐方案

主集群的url可参考如下命令进行配置:

jdbc:gaussdb://node1,node2,node3/database?autoBalance=true&usingEip=false&disasterToleranceCluster=true

灾备集群的url可参考如下命令进行配置:

jdbc:gaussdb://node4,node5,node6/database?autoBalance=true&usingEip=false&disasterToleranceCluster=true

主集群和灾备集群应各配置一套读写业务与只读业务。读写应用A(A城)、只读应用B(A城)和只读应用B(B城)正常启用,读写应用A(B城)关闭业务流量。请参见图1

图1 正常运行时状态

当switchover发生时,数据库与应用分别进行容灾切换,读写应用A(B城)、只读应用B(B城)和只读应用B(A城)正常启用,读写应用A(A城)关闭业务流量。请参见图2

图2 集群间switchover场景

当failover场景发生时,A城集群不可用,需先将A城读写业务关闭以防止数据不一致问题,B城集群再升主。读写应用A(B城)和只读应用B(B城)正常启用,读写应用A(A城)和只读应用B(A城)关闭业务流量。

图3 failover场景

负载均衡场景

某客户存在一套数据库集群,包含如下节点{node1,node2,node3,node4,node5,node6,node7,node8,node9,node10,node11,node12}。

  • 客户在应用程序A中建立了120个长连接,并期望应用程序A上的连接可以均匀分布在集群各节点上,则url可参考如下命令进行配置。
    jdbc:gaussdb://node1,node2,node3/database?autoBalance=true
  • 客户新开发了两个应用程序B、C,希望当前这三个应用程序均匀分布在指定节点,如应用程序A的连接分布在{node1,node2,node3,node4},应用程序B的连接分布在{node5,node6,node7,node8},应用程序C的连接分布在{node9,node10,node11,node12},则url可参考如下命令进行配置(若url中前四个节点都不可连,应用会连接第五个节点,根据pgxc_node表中的信息,在集群中所有可用节点之间进行轮询连接)。

    应用程序A:

    jdbc:gaussdb://node1,node2,node3,node4,node5/database?autoBalance=priority4

    应用程序B:

    jdbc:gaussdb://node5,node6,node7,node8,node9/database?autoBalance=priority4

    应用程序C:

    jdbc:gaussdb://node9,node10,node11,node12,node1/database?autoBalance=priority4
  • 客户开发了一些应用程序,并且使用相同的连接配置串,同时期望各应用连接能较均匀分布在集群各节点上,则url可参考如下命令进行配置。
    jdbc:gaussdb://node1,node2,node3,node4/database?autoBalance=shuffle
  • 客户开发了一些应用程序,想通过单节点会话模式建立连接,则url可参考如下命令进行配置。
    jdbc:gaussdb://node1,node2,node3,node4/database?sessionType=singleNode&execTargetNode=dn_name
  • 客户不使用负载均衡功能,则url可参考如下命令进行配置。
    jdbc:gaussdb://node1/database

    或:

    jdbc:gaussdb://node1/database?autoBalance=false

    在开启autoBalance参数时,JDBC刷新可用CN列表的周期默认为10s,可使用refreshCNIpListTime进行设置,示例如下:

    jdbc:gaussdb://node1,node2,node3,node4/database?autoBalance=true&refreshCNIpListTime=3

日志诊断场景

在使用过程中出现数据导入慢或出现一些难以分析的异常报错时,可通过开启trace日志进行诊断,url可参考如下命令进行配置。

jdbc:gaussdb://node1/database?loggerLevel=trace

高性能场景

某客户对于相同SQL可能多次执行,仅是传参不同的情况,为了提升执行效率,可开启prepareThreshold参数,避免重复生成执行计划,url可参考如下命令进行配置。

jdbc:gaussdb://node1/database?prepareThreshold=5

某客户一次查询1000万数据,为避免同时返回造成内存溢出,可使用defaultRowFetchSize,url可参考如下命令进行配置。

jdbc:gaussdb://node1/database?defaultRowFetchSize=50000

某客户需要批量插入1000万数据,为提升效率,可使用batchMode,url可参考如下命令进行配置。

jdbc:gaussdb://node1/database?batchMode=on

相关文档