本文介绍了如何在同一台机器上使用 Docker 容器搭建GBase 8s主备集群环境。
拉取镜像
拉取GBase 8s的最新镜像
docker pull liaosnet/gbase8s
或者
docker pull liaosnet/gbase8s:v8.8_3513x25_csdk_x64
注:在tag为v8.8_3513x25_csdk_x64及之后的版本中,可通过参数方式自动创建集群
拉取镜像成功后,可通过docker images查看拉取镜像的版本。
本文介绍了如何在同一台机器上使用 Docker 容器搭建GBase 8s主备集群环境。
拉取GBase 8s的最新镜像
docker pull liaosnet/gbase8s
或者
docker pull liaosnet/gbase8s:v8.8_3513x25_csdk_x64
注:在tag为v8.8_3513x25_csdk_x64及之后的版本中,可通过参数方式自动创建集群
拉取镜像成功后,可通过docker images查看拉取镜像的版本。
从oracle迁移到GBase 8s数据库的过程中,有类似
select t.*
from t
order by dbms_random.value
进行随机排序查询的写法。
GBase 8s默认不支持dbms_random之类的函数,这些函数存在称为datablade的扩展包中,以下示例在库中注册excompat。
cd $GBASEDBTDIR/extend/excompat.1.0
unset DB_LOCALE
unset CLIENT_LOCALE
blademgr # 进入 blademgr,提示符如: 数据库服务名>
服务名> show databases # 显示可加载模块的库
服务名> list testdb # 假设我们需要在testdb库中注册,先查看该有是否有注册模块
服务名> register excompat.1.0 testdb # 注册模块,要求有二次确认
服务名> quit # 退出注册模块
-- 注意:该写法(order by 函数)并不是所有版本都支持
select t.* from systables t order by dbms_random_random();
-- 该写法均支持
select dbms_random_random(), t.*
from systables t
order by 1;
按实际需要修改写法。
对应版本:3.6.2_2
GBase 8s类型类型 | colType | sql_data_type | java.sql.Types | java类型名称 |
---|---|---|---|---|
SMALLINT | 1 | 1 | 5 | SMALLINT |
INTEGER | 2 | 2 | 4 | INTEGER |
BIGINT | 52 | 17 | -5 | BIGINT |
INT8 | 17 | 17 | -5 | BIGINT |
SMALLFLOAT | 4 | 4 | 7 | REAL |
FLOAT | 3 | 3 | 8 | DOUBLE |
DECIMAL | 5 | 5 | 3 | DECIMAL |
MONEY | 8 | 5 | 3 | DECIMAL |
CHAR | 0 | 0 | 1 | CHAR |
NCHAR | 15 | 0 | 1 | CHAR |
VARCHAR | 13 | 13 | 12 | VARCHAR |
NVARCHAR | 16 | 13 | 12 | VARCHAR |
VARCHAR2 | 63 | 63 | 63 | 未定义 |
NVARCHAR2 | 64 | 64 | 64 | 未定义 |
LVARCHAR | 40 | 43 | -1 | LONGVARCHAR |
BOOLEAN | 41 | 45 | 16 | BOOLEAN |
TEXT | 12 | 101 | -1 | LONGVARCHAR |
BYTE | 11 | 102 | -4 | LONGVARBINARY |
CLOB | 41 | 101 | 2005 | CLOB |
BLOB | 41 | 102 | 2004 | BLOB |
SERIAL | 6 | 2 | 4 | INTEGER |
SERIAL8 | 18 | 17 | -5 | BIGINT |
BIGSERIAL | 53 | 17 | -5 | BIGINT |
DATETIME YEAR TO SECOND | 10 | 10 | 93 | TIMESTAMP |
DATETIME HOUR TO SECOND | 10 | 10 | 92 | TIME |
DATE | 7 | 7 | 91 | DATE |
RAW | 40 | 43 | 2000 | JAVA_OBJECT |
TIMESTAMP WITH TIME ZONE | 65 | 9 | 2014 | TIMESTAMP_WITH_TIMEZONE |
JSON | 40 | 43 | 2000 | JAVA_OBJECT |
BSON | 40 | 43 | 2000 | JAVA_OBJECT |
INTERVAL | 14 | 0 | 1 | CHAR |
LIST | 21 | 49 | 1111 | OTHER |
SET(LVARCHAR) | 19 | 43 | 1111 | OTHER |
MULTISET(SENDRECEIVE) | 20 | 49 | 1111 | OTHER |
CLOB2 | 40 | 43 | -1 | LONGVARCHAR |
NULL | 9 | |||
ROW | 22 | 22 | 2002 | STRUCT |
COLLECTION | 23 | |||
ROWREF | 24 | |||
REFSERIAL8 | 42 |
备注:
1,此文档基于jdbc包3.6.1_2和数据库版本3.6.2_2;
2,coltype为40(可变长)和41(不可变长)的为Opaque数据类型;
3,sql_data_type指的是基于数据类型,与coltype或java.sql.Types类型
Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。
使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务 Django 本身基于 MVC 模型,即 Model(模型)+ View(视图)+ Controller(控制器)设计模式,MVC 模式使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。
系统要求:
1,操作系统使用22.04.3 LTS
2,unixodbc及unixodbc-dev已经安装
3,GBase 8s CSDK 64bit(客户端连接工具)已经安装
4,Python版本是3.10.12(系统自带)
5,Django版本使用4.2.15
6,需要pyodbc
7,使用django_gbasedbtdb 1.11.5版本
近期的客户想实现数据库自重启功能(即故障后自动重启),该功能需要在自动启动的基础上进行改进。
关于systemd方式实现自启动的方法可参考之前的文档:https://gbasedbt.com/index.php/archives/161/
以下仍是通过systemd方式实现GBase 8s数据库的自启动、自重启与关闭。
注意:自启动、自重启仅适用于单机,而不要用于集群环境
适用于操作系统: RHEL7/CENTOS7, 以及基于RHEL7内核的系统。
1,service 文件所在位置 /usr/lib/systemd/system/
2,service 的环境配置文件位置 /etc/sysconfig/
GBase 8s的数据库CLOB是一种文本智能大对象类型,一般情况下可以使用fileclob函数进行插入数据,或者在程序中使用绑定变量的方式插入。
在GBase 8s的SQLMODE=Oracle模式中,实现了直接insert操作,但SQLMODE=GBase模式中没有实现
以下介绍自己实现在SQLMODE=GBase模式下实现直接insert clob的操作的方法
注意:数据库版本的不同,可能实现的方法略有不同
从扩展中创建dbms_lob_* 函数,使用到的:
GBase 8s中没有ip类型字段(如inet),对于判断字符串是否是IP地址,需要自己编写相应的函数。
如下,实现检查输入的字符串是否为IPv4地址(-1否),且转换成数值类型:
GBase 8s HAC集群允许配置为自动切换、CM控制的FOC切换及手工切换三种方式。
在自动切换中,主节点故障或者网络超时,备节点都将自动提升为主节(DRAUTO值为2)或者标准节点(DRAUTO值为1)。当原主节点需要恢复时,可直接启动(oninit -vy)、物理恢复方式(oninit -PHY后onmode -d secondary 主节点服务名称)或者备份恢复(脑裂时)。
在CM控制的切换中,主节点故障或者网络超时,备节点都将由CM控制提升为主节点。当原主节点需要恢复时,需要通过物理恢复的方式然后加入集群(oninit -PHY后onmode -d secondary 主节点服务名称)或者备份恢复(脑残时)。
在手工切换中,主节点故障或者网络超时,备节点需要手工提升为主节点,有两种方式:
当原主节点需要恢复时,需要通过物理恢复的方式然后加入集群(oninit -PHY后onmode -d secondary 主节点服务名称)。
如果数据库集群无故障,只是需要进行主备节点切换时,也需要考虑当前的切换方式。可通过模拟主节点故障的方式进行切换,也可以通过强制切换的方式(onmode -d make primary 服务名称 force),恢复时按照故障时的恢复方式进行。
GBase 8s 数据库切换分为自动切换、由CM控制的按FOC规则的切换、手工切换。
全自动切换用于HAC集群中,由于集群只有两个节点,数据库相互之前进行状态检查,发现异常时,能按DRAUTO的配置方式进行自动切换。
在HAC集群中:
DRAUTO参数配置为2时
同样的GBase 8s数据库版本,自定义的java udr在Kylin V10SP1 服务器版(aarch64架构)下创建、运行正常,而在Kylin V10SP1 桌面版(aarch64架构)下时创建正常但运行UDR异常,报错如下:
(38000) - Unknown throwable: (java.lang.NoClassDefFoundError: Could not initialize class sun.security.ec.CurveDB).
Error in line 1
Near character position 62