【GaussDB】GaussDB数据库开发设计之JDBC高可用性

1.设置负载均衡

步骤1、加载驱动,连接数据库,配置负载均衡

下载wget命令。

sql 复制代码
yum install -y wget

执行以下命令,下载GaussDB驱动包,并存放于 libs目录下。

sql 复制代码
mkdir -p /opt/expt/db/libs
cd /opt/expt/db/libs
wget https://edu-res.hc-cdn.cn/sharedata/hdinnovation/sandbox/20000743/GaussDB_driver.zip

解压GaussDB驱动包。

sql 复制代码
unzip GaussDB_driver.zip
cd GaussDB_driver/Distributed/Kylinv10_arm_64/
tar -xzvf GaussDB-Kernel_505.2.0_Kylin_64bit_Jdbc.tar.gz

步骤2、下载JDK软件包,并配置环境。

sql 复制代码
cd /root
wget https://edu-res.hc-cdn.cn/sharedata/hdinnovation/sandbox/20001943/jdk-8u442-linux-aarch64.tar.gz
tar -xzvf jdk-8u442-linux-aarch64.tar.gz
mv jdk1.8.0_442 /usr/lib/
ln -s /usr/lib/jdk1.8.0_442/bin/java /usr/local/bin/java
ln -s /usr/lib/jdk1.8.0_442/bin/javac /usr/local/bin/javac

步骤3、验证java运行命令是否就绪:

sql 复制代码
java -version

步骤4、验证javac运行命令是否就绪:

sql 复制代码
javac -version

步骤5、在指定目录创建test.java文件

sql 复制代码
mkdir -p /opt/expt/db/basic
cd /opt/expt/db/basic
touch test.java

步骤6、使用vim命令,将以下代码内容写入test.java文件中。输入结束后,使用":wq"保存退出vim编辑。

sql 复制代码
   String testQuery = "SELECT 1";

        try (Connection conn = DriverManager.getConnection(gs_url, gs_user, gs_passwd);
             Statement st = conn.createStatement();
             PreparedStatement pst = conn.prepareStatement(testQuery)) {

            for (int i = 0; i < 100; i++) {
                try {
                    ResultSet resultSet = pst.executeQuery();
                    if (resultSet.next()) {
                    }
                } catch (Exception e) {
                    System.err.println("\u7b2c " + (i + 1) + " \u6b21\u8fde\u63a5\u5931\u8d25: " + e.getMessage());
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

代码中,用户名、密码、IP、端口号和数据库需修改为当前实际所使用的信息。

步骤7、进行编译:

sql 复制代码
javac test.java

编译完成后,会在当前目录下生编译成class数据文件及对应目录结构,参考如下:

步骤8、运行对应代码文件

sql 复制代码
java -cp $CLASSPATH:./*:/opt/expt/db/libs/GaussDB_driver/Distributed/Kylinv10_arm_64/* test

可以尝试配置负载均衡中的其他策略,观察不同输出结果。

将代码中DB_URL的内容修改为以下内容,其中增加了其他节点的IP:PORT信息,由于增加轮询策略,需要新增参数字符串。轮询策略可以修改为autoBalance=roundrobin;设置autoBalance为priorityn表示开启JDBC优先级负载均衡功能,将应用程序的多个连接首先均衡到url上配置的前n个中可用的CN数据库节点,当url上配置前n个节点全部不可用时,连接会随机分配到数据库集群中其他可用CN数据库节点;设置为shuffle表示开启JDBC随机负载均衡功能,将应用程序的多个连接随机均衡到数据库集群中的各个可用CN;设置为false,不开启JDBC负载均衡功能和优先级负载均衡功能,默认为不开启负载均衡。

2.设置读写分离

步骤1、修改参数targetServerType。

将参数修改为targetServerType=master,则尝试连接到url连接串中的主节点,如果找不到主节点将抛出异常(设置targetServerType=slave,则尝试连接到url连接串中的备节点,如果找不到备节点将抛出异常;设置targetServerType=preferSlave,则尝试连接到url连接串中的备节点,如果备节点不可用,将连接到主节点,否则抛出异常)。本实验只进行主库的连接。

sql 复制代码
--设置示例
--targetServerType=master;

再次使用vim命令,修改参数targetServerType。输入结束后,使用":wq"保存退出vim编辑。

sql 复制代码
vim test.java;

import java.sql.*;

public class test {
    private static String gs_user = "root";
    private static String gs_passwd = "password";
    private static String gs_url = "jdbc:gaussdb://xxx.xx.x.xxx:port,xxx.xx.x.xxx:port,xxx.xx.x.xxx:port/postgres?targetServerType=master";

public static void main(String[] args) {
        String testQuery = "SELECT 1";

        try (Connection conn = DriverManager.getConnection(gs_url, gs_user, gs_passwd);
             Statement st = conn.createStatement();
             PreparedStatement pst = conn.prepareStatement(testQuery)) {

            for (int i = 0; i < 100; i++) {
                try {
                    ResultSet resultSet = pst.executeQuery();
                    if (resultSet.next()) {
                    }
                } catch (Exception e) {
                    System.err.println("\u7b2c " + (i + 1) + " \u6b21\u8fde\u63a5\u5931\u8d25: " + e.getMessage());
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

步骤2、重新编译后运行程序。

sql 复制代码
javac test.java

java -cp $CLASSPATH:./*:/opt/expt/db/libs/GaussDB_driver/Distributed/Kylinv10_arm_64/* test

总结

本次主要是提供了GaussDB分布式数据库JDBC高可用性实验脚本~

相关推荐
IvorySQL4 小时前
PG 日报|新增 VACUUM 全维度统计信息补丁迭代
数据库·人工智能·postgresql·ivorysql
白露与泡影6 小时前
Redis 缓存实战:雪崩、穿透、击穿一次讲透
数据库·redis·缓存
赵渝强老师7 小时前
【赵渝强老师】使用Oracle可传输的表空间迁移数据
数据库·oracle
IpdataCloud8 小时前
跨区服玩家延迟高怎么办?用IP离线库自动分配到最近服务器
数据库·tcp/ip·github·php·ip
wuqingshun3141599 小时前
MYSQL默认的事务隔离级别是什么?为什么选择这个级别?
数据库·mysql
空中湖9 小时前
电池简史(五):极限之梦与终章——锂硫、锂空气、量子电池,以及你该知道的电池投资与生活指南
数据库·程序人生
蓝胖子酱11 小时前
在 Electron 中用 electron-store 实现加密存储与自定义格式文件
前端·javascript·数据库
snow@li11 小时前
Redis:数据库语法速查表 / 全景梳理
数据库·redis·缓存
Devlive 开源社区11 小时前
Nebula 1.6.0 发布:跨区域桶自动路由、秒传、文本/PDF 预览一次到位
数据库·sql
这个DBA有点耶12 小时前
导个数据中文全变问号?字符集这事儿真没那么简单
数据库·mysql·代码规范