返回首页

gbase数据、南大通用产品文档:GBase8aGBase JDBC 集群高可用负载均衡

更新日期:2024年09月11日

用例假设如下场景:
1、 集群环境
集群节点ip 192.168.111.96,192.168.5.212,12.168.7.174
2、 需求
在创建连接时,把链接请求按照轮询方式均摊到各个节点
本样例代码适用于GBaseJDBC8.3.81.53 及以上版本。
package com.gbase.jdbc.simple;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class SampleGBaseJDBCLoadbalance {


GBase UP 产品手册 6 应用开发指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 1116
/**
* 数据库连接串
* failoverEnable = true
* hostList=192.168.5.212,192.168.7.174
* gclusterId=gcl1
* 启用高可用负载均衡
*/
public static final String URL =
"jdbc:gbase://192.168.111.96:5258/test?user=gbase&password=gbase20110531&failoverEnable=
true&hostList=192.168.5.212,192.168.7.174&gclusterId=gcl1";

/**
* @param args
*/
public static void main(String[] args) {
try {
Class.forName("com.gbase.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

//准备样例代码用到的表及数据
prepareTable();

//创建线程池
ExecutorService executorService = Executors.newCachedThreadPool();
for (int i = 0; i < 50; i++) {
executorService.execute(new SelectThread(String.valueOf(i)));
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}


}
executorService.shutdown();
try {
Thread.sleep(50000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("main thread finished");
}

private static void prepareTable() {

GBase UP 产品手册 6 应用开发指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 1117
Connection conn = null;
Statement stm = null;
try {
conn = DriverManager.getConnection(URL);
stm = conn.createStatement();
stm.executeUpdate("drop table if exists `loadbalance`");
stm.executeUpdate("create table loadbalance(a varchar (10), b varchar
(12))");
stm.executeUpdate("insert into test.loadbalance values('a1', 'b1')");
stm.executeUpdate("insert into test.loadbalance values('a2', 'b2')");
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (stm != null) {
try {
if (!stm.isClosed())
stm.close();
} catch (Exception e) {
}
}
}
}
}
class SelectThread implements Runnable {
private String threadName;

SelectThread(String n) {
threadName = n;
}
int i =0;
public void run() {
while (i < 20) {
i++;
work();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("end = " + threadName);
}
public void work() {

GBase UP 产品手册 6 应用开发指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 1118
try {
Class.forName("com.gbase.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}


Connection conn = null;
Statement stm = null;
ResultSet rs = null;
String ip= null;
try {
conn =
DriverManager.getConnection(SampleGBaseJDBCLoadbalance.URL);
ip = (com.gbase.jdbc.GBaseConnection)conn).getHost();
System.out.println(this.threadName + " 线程: 获取连接 on " + ip);
stm = conn.createStatement();
rs = stm.executeQuery("select loadbalance.* , sleep(5) from
test.loadbalance");
while(rs.next()) {
System.out.println(rs.getString(1));
}
} catch (SQLException e) {
System.out.println(this.threadName + " 线程: 异常 on "+ip);
e.printStackTrace();
} finally {
try {
rs.close();
} catch (SQLException e) {
}
try {
stm.close();
} catch (SQLException e) {
}
try {
conn.close();
} catch (SQLException e) {
}
}
}
}

在包含至少一台共享磁盘(SD)辅助服务器的高可用性集群中,当发生流量控制时指定。
onconfig.std 值
SDS_FLOW_CONTROL 0

0 = 当当前日志位置与最近响应日志之间的差异超过日志缓冲区大小的 12 倍时,激活流
量控制。
-1 = 禁用流量控制。禁用流量控制可能导致日志文件的交换和数据丢失。
start_value,end_value = start_value 和 end_value 确定当前日志位置与最后响应日志
页之间的滞后量。start_value 必须大于 end_value。这些值必须包括下列单位之一:
 K(KB)
 M(MB)
 G(GB)

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 135 -
例如,设置 SDS_FLOW_CONTROL
128M,100M,当日志之间的滞后为 128
MB 时启动流量控制,
当滞后降至 100 MB 时停止流量控制。
生效
编辑 onconfig 文件并重启数据库服务器之后。
当您通过运行 onmode -wf 命令在 onconfig 文件中动态地重置该值时。
用法
流量控制提供一种限制主服务器上日志活动的方法,以便集群中的 SD 辅助服务器不在处
理事务上落后太远。当启用流量控制时,且当当前日志位置与最后响应日志页之间日志大
小的差异超过 start_value 时,
主服务器上的日志活动受到限制。
当流量控制是活动的时,
连接到主服务器的用户可感觉到响应时间变慢。
当日志之间的滞后大于 start_value 时启
动流量控制,当日志滞后降至 stop_value 时停止流量控制。
仅在主服务器上设置 SDS_FLOW_CONTROL 配置参数。集群中的所有 SD 辅助服务器都受到
SDS_FLOW_CONTROL 配置参数的影响。日志通常按照被接收的顺序发送到 SD 辅助服务器。

bar_server 表在安装中列出数据库服务器。
该表用于确保备份对象在恢复期间返回到它们的
正确位置。
表 1. bar_server 表列
列名
类型
解释
srv_name
VARCHAR(128,0)
onconfig 文件中指定的 DBSERVERNAME 值。
数据库服务器名称最多可有 128 个字符。
srv_node
CHAR(256)
数据库服务器驻留的计算机的主机名。

GBase 8s 备份与恢复指南
南大通用数据技术股份有限公司 - 111 -
列名
类型
解释
主机名最多可有 256 个字符。
srv_synctime
INTEGER
onsmsync 运行的时间。