更新时间:2024-06-11 GMT+08:00

配置JDBC连接(使用负载均衡方式)

背景信息

很多用户在使用JDBC连接集群时只连接集群的一个CN,这就导致单个CN压力较大并且别的CN资源浪费,并且这种方式还有单点故障导致连接不可用的风险。

用户可使用JDBC连接多个CN避免以上问题。主要有以下两种方式:

  • 使用ELB连接集群:弹性负载均衡(ELB)是将访问流量根据转发策略分发到后端多台弹性云服务器的流量分发控制服务,可以通过流量分发扩展应用系统对外的服务能力,提高应用程序的容错能力。
  • 使用multi-host方式连接集群:使用JDBC配置多个节点的方式,也能实现类似ELB的效果。

方式一:使用ELB连接集群(推荐)

  1. 获取弹性负载均衡地址。在控制台打开指定集群详情页面,获取弹性负载均衡IP。

  2. 配置驱动。请参见下载JDBC或ODBC驱动
  3. 获取数据库连接。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    private static final String USER_NAME = "dbadmin";
    private static final String PASSWORD = "password";
    // jdbc:postgresql://ELB_IP:PORT/dbName"
    private static final String URL = "jdbc:postgresql://100.95.153.169:8000/gaussdb";
    private static Properties properties = new Properties();
    static {
        properties.setProperty("user", USER_NAME);
        properties.setProperty("password", PASSWORD);
    }
    /**
     * 获取数据库连接
     */
    public static Connection getConnection() {
        Connection connection = null;
        try {
            connection = DriverManager.getConnection(URL, properties);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
    

方式二:使用multi-host方式连接集群

  1. 获取公网IP。打开控制台指定集群详情页面,获取弹性公网IP。

  2. 配置驱动。请参见下载JDBC或ODBC驱动
  3. 获取数据库连接。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    private static final String USER_NAME = "dbadmin";
    private static final String PASSWORD = "password";
    // jdbc:postgresql://host1:port1,host2:port2/dbName"
    private static final String URL = "jdbc:postgresql://100.95.146.194:8000,100.95.148.220:8000,100.93.0.221:8000/gaussdb?loadBalanceHosts=true";
    private static Properties properties = new Properties();
    static {
        properties.setProperty("user", USER_NAME);
        properties.setProperty("password", PASSWORD);
    }
    /**
     * 获取数据库连接
     */
    public static Connection getConnection() {
        Connection connection = null;
        try {
            connection = DriverManager.getConnection(URL, properties);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }