大家好,这里是公众号 DBA学习之路,分享一些学习国产数据库路上的知识和经验。
社群交流
为了给大家提供一些技术交流的平台,目前已成立的技术交流群:
- Oracle 数据库交流群
- 国产数据库交流群
- Linux 技术交流群
- ChatGPT 4o 免费体验群
需要进群(均已超过 200 人,需要邀请)可以添加号主微信:Lucifer-0622,备注对应的群名即可。
目录
- 社群交流
- 前言
- 环境准备
- 安装前配置
- 检查操作系统版本(所有节点)
- 配置 /etc/hosts(所有节点)
- 关闭防火墙(所有节点)
- 禁用 selinux(所有节点)
- 创建主机用户(所有节点)
- 创建目录(所有节点)
- 系统参数配置(所有节点)
- 资源配置(所有节点)
- 配置 RemoveIPC(所有节点)
- 检查 /tmp 目录(所有节点)
- 配置时间同步(所有节点)
- 配置软件源(所有节点)
- 挂载共享盘(所有节点)
- UDEV 绑盘(所有节点)
- 部署 KingbaseES RAC 集群
- 安装数据库软件(所有节点)
- 创建集群部署目录(所有节点)
- 配置 cluster_manager.conf(所有节点)
- 磁盘初始化(节点一)
- 基础组件初始化(所有节点)
- gfs2 相关资源初始化(节点一)
- 初始化数据库集簇(节点一)
- 托管数据库(节点一)
- 启停集群
- 访问数据库
- 写在最后
- 往期精彩文章
前言
前文介绍了 KES RAC 的一些基础架构和概念,具体可参考:金仓 KingbaseES RAC 入门指南。
实战才是王道,玩玩才知道好不好,本文记录一下在麒麟 V10 上安装部署 KES RAC 2 节点的详细过程。
环境准备
本文演示环境:
| 主机名 | IP | 版本 | CPU | 内存 | 硬盘 |
|---|---|---|---|---|---|
| kesrac01 | 192.168.6.60 | 银河麒麟 Kylin V10 | x86 | 8G | 100G |
| kesrac02 | 192.168.6.61 | 银河麒麟 Kylin V10 | x86 | 8G | 100G |
安装前配置
检查操作系统版本(所有节点)
检查操作系统版本信息:
## 以节点一为例
[root@kesrac01 ~]# cat /etc/os-release
NAME="Kylin Linux Advanced Server"
VERSION="V10 (Halberd)"
ID="kylin"
VERSION_ID="V10"
PRETTY_NAME="Kylin Linux Advanced Server V10 (Halberd)"
ANSI_COLOR="0;31"
配置 /etc/hosts(所有节点)
建议配置主机名解析:
## 以节点一为例
cat<<-EOF>>/etc/hosts
192.168.6.60 kesrac01
192.168.6.61 kesrac02
EOF
关闭防火墙(所有节点)
数据库安装均建议关闭防火墙:
## 以节点一为例
[root@kesrac01 ~]# systemctl stop firewalld
[root@kesrac01 ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
禁用 selinux(所有节点)
所有节点建议关闭 SELNUX,防止造成一些不必要的问题:
## 以节点一为例
## 这里使用 setenforce 0 临时生效
[root@kesrac01 ~]# /usr/sbin/setenforce 0
/usr/sbin/setenforce: SELinux is disabled
[root@kesrac01 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@kesrac01 ~]# sestatus
SELinux status: disabled
将 SELINUX 参数设置为 disabled,即 SELINUX=disabled 保存退出后,需要重新启动才能生效。
创建主机用户(所有节点)
建议在所有服务器上创建 KES 产品的安装用户 kingbase,而非使用 root 身份执行安装部署:
## 以节点一为例
[root@kesrac01 ~]# useradd -u 2000 -d /home/kingbase -m kingbase
[root@kesrac01 ~]# echo "kingbase:kingbase" | chpasswd
[root@kesrac01 ~]# id kingbase
用户id=2000(kingbase) 组id=2000(kingbase) 组=2000(kingbase)
如果有密码复杂性要求,不想设置密码太复杂的话,可以取消密码复杂度:
## 以节点一为例
[root@kesrac01 ~]# sed -i 's/^password\+[[:space:]]\+requisite[[:space:]]\+pam_pwquality.so/#&/g' /etc/pam.d/system-auth
[root@kesrac01 ~]# sed -i 's/use_authtok$//' /etc/pam.d/system-auth
为了使共享磁盘在节点间迁移时不会因改变属主而失去访问权限,我们需要保证共享磁盘的属主(也就是拥有 KingbaseES 实例的用户)在每个节点上的 uid 一致。
创建目录(所有节点)
为了利于数据库的日常运维、持续使用、存储扩容等,我们在安装前必须做好选项、存储目录规划。
创建安装所需目录并且授权:
## 以节点一为例
[root@kesrac01 ~]# mkdir -p /KingbaseES/V8 /backup /archive /install
[root@kesrac01 ~]# chown -R kingbase:kingbase {/KingbaseES,/backup,/archive,/install}
[root@kesrac01 ~]# chmod -R 775 {/KingbaseES,/backup,/archive,/install}
系统参数配置(所有节点)
为了避免在 KingbaseES 安装和使用过程中出现问题,官方建议调整系统内核参数:
| 参数 | 参考值 | 所在文件 |
|---|---|---|
| semmsl | 250 | /proc/sys/kernel/sem |
| semmns | 32000 | /proc/sys/kernel/sem |
| semopm | 100 | /proc/sys/kernel/sem |
| semmni | 128 | /proc/sys/kernel/sem |
| shmall | 2097152 | /proc/sys/kernel/shmall |
| shmmax | 最小: 536870912 最大: 物理内存值减去1字节 建议: 大于物理内存的一半 |
/proc/sys/kernel/shmmax |
| shmmin | 4096 | /proc/sys/kernel/shmmni |
| file-max | 6815744 | /proc/sys/fs/file-max |
| aio-max-nr | 1048576 注意: 本参数限制并发发出的请求数量。应该设置以避免IO子系统的失败。 |
/proc/sys/fs/aio-max-nr |
| ip_local_port_range | 最小:9000 最大:65500 |
/proc/sys/net/ipv4/ip_local_port_range |
| rmem_default | 262144 | /proc/sys/net/core/rmem_default |
| rmem_max | 4194304 | /proc/sys/net/core/rmem_max |
| wmem_default | 262144 | /proc/sys/net/core/wmem_default |
| wmem_max | 1048576 | /proc/sys/net/core/wmem_max |
注意:这里关于 shmmax 和 shmall 参数值的计算,我们可以参考 oracle 来设置:
# 物理内存(KB)
os_memory_total=$(awk '/MemTotal/{print $2}' /proc/meminfo)
# 获取系统页面大小,用于计算内存总量
pagesize=$(getconf PAGE_SIZE)
((shmall = (os_memory_total - 1) * 1024 / pagesize))
((shmmax = os_memory_total * 1024 - 10))
# 如果 shmall 小于 2097152,则将其设为 2097152
((shmall < 2097152)) && shmall=2097152
# 如果 shmmax 小于 4294967295,则将其设为 4294967295
((shmmax < 4294967295)) && shmmax=4294967295
复制以上命令,直接执行即可计算得出这两个参数值:
## 以节点一为例
[root@kesrac01 ~]# echo $shmall
2097152
[root@kesrac01 ~]# echo $shmmax
7008071670
根据官方建议值,配置系统参数文件:
## 以节点一为例
[root@kesrac01 ~]# cat<<-EOF>>/etc/sysctl.conf
fs.aio-max-nr= 1048576
fs.file-max= 6815744
kernel.shmall= 2097152
kernel.shmmax= 7008071670
kernel.shmmni= 4096
kernel.sem= 250 32000 100 128
net.ipv4.ip_local_port_range= 9000 65500
net.core.rmem_default= 262144
net.core.rmem_max= 4194304
net.core.wmem_default= 262144
net.core.wmem_max= 1048576
EOF
## 生效配置
[root@kesrac01 ~]# sysctl -p
资源配置(所有节点)
限制用户可使用的资源数量对系统的稳定性非常重要,可以通过调整资源限制数量改进系统性能:
## 以节点一为例
[root@kesrac01 ~]# cat<<-EOF>>/etc/security/limits.conf
kingbase soft nofile 65536
kingbase hard nofile 65536
kingbase soft nproc 65536
kingbase hard nproc 65536
kingbase soft core unlimited
kingbase hard core unlimited
EOF
配置 RemoveIPC(所有节点)
systemd-logind 服务中引入的一个特性 RemoveIPC,会造成程序信号丢失等问题,只有Redhat7 及以上和一些特殊的国产Linux的版本需要修改,改之前可先查看此项是否为默认yes),需要设置 RemoveIPC=no:
## 以节点一为例
[root@kesrac01 ~]# sed -i 's/#RemoveIPC=no/RemoveIPC=no/' /etc/systemd/logind.conf
[root@kesrac01 ~]# grep RemoveIPC /etc/systemd/logind.conf
RemoveIPC=no
# 重新加载 systemd 守护进程并重启 systemd-logind 服务生效
[root@kesrac01 ~]# systemctl daemon-reload
[root@kesrac01 ~]# systemctl restart systemd-logind.service
检查 /tmp 目录(所有节点)
KES 安装对于 /tmp 目录有一定要求,至少需要 10G 空间,否则安装时会报警并使用 kingbase 用户家目录作为替代:
Now launch installer... 正在准备进行安装 警告:/tmp 磁盘空间不足!正在尝试将 /home/kingbase 用于安装基础和 tmp dir。
手动挂载 /tmp 目录空间:
## 以节点一为例
[root@kesrac01 ~]# cat<<-EOF>>/etc/fstab
tmpfs /tmp tmpfs size=10G 0 0
EOF
[root@kesrac01 ~]# mount -o remount /tmp
[root@kesrac01 ~]# df -h | grep /tmp
tmpfs 10G 16K 10G 1% /tmp
配置时间同步(所有节点)
这个不是必须配置,但是建议配置,用于在系统中配置 NTP 实现时间同步。
⭐️ 配置 Linux 时间同步可以参考为之前写的文章:Linux 一键配置时钟同步全攻略
本文未配置时间同步。
配置软件源(所有节点)
Linux 系统安装软件需要配置本地软件源。
⭐️ 配置 Linux 软件源可以参考为之前写的文章:DBA 必备:Linux 软件源配置全攻略
配置本地软件源的方式需要先挂载本地 ISO 安装镜像:
mount /dev/sr0 /mnt
一键配置 KylinV10 本地软件源:
## 以节点一为例
## 备份软件源初始配置
[root@kesrac01 ~]# mkdir -p /etc/yum.repos.d/bak
[root@kesrac01 ~]# mv /etc/yum.repos.d/* /etc/yum.repos.d/bak
mv: 无法将目录'/etc/yum.repos.d/bak' 移动至自身的子目录'/etc/yum.repos.d/bak/bak' 下
## 配置软件源
[root@kesrac01 ~]# cat<<-EOF>/etc/yum.repos.d/local.repo
[server]
name=server
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF
## 查看软件源内容
[root@kesrac01 ~]# cat /etc/yum.repos.d/local.repo
[server]
name=server
baseurl=file:///mnt
enabled=1
gpgcheck=0
确保软件源配置完成,就可以安装软件了。
挂载共享盘(所有节点)
构建 KingbaseES RAC 架构,需要准备好两块共享存储:
- 投票盘:大小不小于 100MB;
- 数据盘:大小可根据实际环境设置。
可以采用 iSCSI 设备或其他多点可见存储设备作为共享存储。如果只有一块共享存储,可采用分区方式来对投票盘和数据盘进行区分,可以采用 fdisk 或 parted 命令进行分区。
本文通过 iscsi 共享存储作为数据库存储文件系统。
⭐️ 配置 iscsi 共享盘可以参考为之前写的文章:实战篇:使用 StarWind 配置 ISCSI 共享存储
1、Linux 客户端安装 iscsi 软件
## 以节点一为例
## 如果遇到报错 -bash: iscsiadm:未找到命令,就需要安装 iscsi 软件
[root@kesrac01 ~]# yum install -y iscsi-initiator-utils*
[root@kesrac01 ~]# systemctl start iscsid.service
[root@kesrac01 ~]# systemctl enable iscsid.service
2、搜索服务端 iscsi target
## 以节点一为例
## 192.168.6.43 为 iscsi 服务端 IP 地址
[root@kesrac01 ~]# iscsiadm -m discovery -t st -p 192.168.6.43
192.168.6.43:3260,-1 iqn.2008-08.com.starwindsoftware:lpc-matebook-lucifer
3、连接服务端 iscsi 共享存储
## 以节点一为例
## iqn.2008-08.com.starwindsoftware:lpc-matebook-lucifer 为上一步搜索出的 target 名称
[root@kesrac01 ~]# iscsiadm -m node -T iqn.2008-08.com.starwindsoftware:lpc-matebook-lucifer -p 192.168.6.43 -l
Logging in to [iface: default, target: iqn.2008-08.com.starwindsoftware:lpc-matebook-lucifer, portal: 192.168.6.43,3260]
Login to [iface: default, target: iqn.2008-08.com.starwindsoftware:lpc-matebook-lucifer, portal: 192.168.6.43,3260] successful.
4、配置开机自动挂载
## 以节点一为例
[root@kesrac01 ~]# iscsiadm -m node -T iqn.2008-08.com.starwindsoftware:lpc-matebook-lucifer -p 192.168.6.43 --op update -n node.startup -v automatic
5、查看挂载成功的共享盘
## 以节点一为例,sdb 和 sdc 为挂载的共享盘
[root@kesrac01 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─klas-root 253:0 0 91.1G 0 lvm /
└─klas-swap 253:1 0 7.9G 0 lvm [SWAP]
sdb 8:16 0 10G 0 disk
sdc 8:32 0 20G 0 disk
sr0 11:0 1 4.4G 0 rom /mnt
挂载好共享盘之后就可以配置 UDEV 绑盘了。
UDEV 绑盘(所有节点)
如果共享盘是多路径,建议可以先使用 multipath 进行绑盘,便于管理。
我这里只有一条路径,查看节点磁盘 wwid:
## 以节点一为例
[root@kesrac01 ~]# /usr/lib/udev/scsi_id -g -u /dev/sdb
22d5116c157b61795
[root@kesrac01 ~]# /usr/lib/udev/scsi_id -g -u /dev/sdc
2f055a2b742fd0cc9
执行 udev 绑定:
## 以节点一为例
## 防止规则冲突,建议使用 99-persist-iscsi.rules,以确保此规则在最后生效
[root@kesrac01 ~]# cat<<-EOF>/etc/udev/rules.d/99-persist-iscsi.rules
KERNEL=="sd*",ENV{ID_SERIAL}=="22d5116c157b61795",SYMLINK+="qdisk%n",MODE:="0644"
KERNEL=="sd*",ENV{ID_SERIAL}=="2f055a2b742fd0cc9",SYMLINK+="kdata%n",MODE:="0644"
EOF
生效 udev:
## 以节点一为例
[root@kesrac01 ~]# udevadm control --reload-rules
[root@kesrac01 ~]# udevadm trigger --type=devices --action=change
查看绑定后的盘:
## 以节点一为例
[root@kesrac01 ~]# ll /dev/qdisk
lrwxrwxrwx 1 root root 3 11月 18 11:38 /dev/qdisk -> sdb
[root@kesrac01 ~]# ll /dev/kdata
lrwxrwxrwx 1 root root 3 11月 18 11:38 /dev/kdata -> sdc
确保两个节点都绑定成功。配置方面到这就结束了。
部署 KingbaseES RAC 集群
安装数据库软件(所有节点)
安装 KES RAC 之前需要现在各个节点安装 KingbaseES RAC 数据库软件。
在所有节点都分别上传 KES RAC 安装包:
KingbaseES_V008R006B1108_Lin64_install.iso到 /install 目录下,目前暂不开放下载,如有需要可向官方申请试用。
以节点一为例:
## 挂载 iso 文件需要使用 root 用户,安装包上传在 /install 目录,挂载到 /mnt 目录下
[root@kesrac01 ~]# umount /mnt
[root@kesrac01 ~]# mount -o loop /install/KingbaseES_V008R006B1108_Lin64_install.iso /mnt/
## 将挂载出来的安装文件拷贝到 /install 目录下
[root@kesrac01 ~]# cp -r /mnt/* /install
## 复制完成后取消安装 iso 的挂载
[root@kesrac01 ~]# umount /mnt
## 由于之前 root 复制的安装文件权限为 root,所以需要重新授权 kingbase 用户
[root@kesrac01 ~]# chown -R kingbase:kingbase /install
[root@kesrac01 ~]# su - kingbase
[kingbase@kesrac01 ~]$ cd /install/
## 命令行安装
[kingbase@kesrac01 install]$ sh setup.sh -i console
Now launch installer...
正在准备进行安装
正在从安装程序档案中提取 JRE...
正在解包 JRE...
正在从安装程序档案中提取安装资源...
配置该系统环境的安装程序...
Verifying JVM........
正在启动安装程序...
===============================================================================
KingbaseES V8 (使用 InstallAnywhere 创建)
-------------------------------------------------------------------------------
正在准备控制台模式安装...
许可协议不分省略....
是否接受此许可协议条款? (Y/N): Y
===============================================================================
选择安装集
-----
请选择将由本安装程序安装的“安装集”。
->1- 完全安装
2- 客户端安装
3- 定制安装
输入“安装集”的号码,或按 <ENTER> 键以接受缺省值
===============================================================================
选择服务器类型
-------
请选择服务器类型:
->1- default
2- rac
输入您选择的号码,或按 <ENTER> 键以接受缺省值: 2
===============================================================================
选择授权文件
------
不选择授权文件,则使用软件自带试用版授权
提示:请在有效期内及时更换正式授权文件。
文件路径 :
===============================================================================
选择安装目录
------
请选择一个安装目录。
您想在哪一位置安装?
缺省安装文件夹: /opt/Kingbase/ES/V8
输入一个绝对路径,或按 <ENTER> 键以接受缺省路径
: /KingbaseES/V8
安装文件夹为: /KingbaseES/V8
是否正确? (Y/N): Y
===============================================================================
预安装摘要
-----
在继续执行前请检查以下信息:
产品名:
KingbaseES V8
安装文件夹:
/KingbaseES/V8
产品功能部件:
数据库服务器,
接口,
数据库部署工具,
高可用组件,
数据库开发管理工具,
数据库迁移工具
安装空间磁盘信息
所需磁盘空间: 5378 MB 空闲磁盘空间: 79279 MB
请按 <ENTER> 键继续:
===============================================================================
准备就绪,可以安装
---------
本安装程序已准备完毕,可在下列位置安装 KingbaseES V8:
/KingbaseES/V8
按 <ENTER> 键进行安装:
===============================================================================
正在安装...
-------
[==================|==================|==================|==================]
[------------------|------------------|------------------|--------
===============================================================================
安装完成
----
恭喜!KingbaseES V8 已成功地安装到:
/KingbaseES/V8
按 <ENTER> 键以退出安装程序:
Complete.
📢 注意:服务器类型要选择 rac,密钥为空直接回车试用即可。
创建集群部署目录(所有节点)
安装完 KingbaseES 后,进入安装后的数据库 install/script 目录,执行 rootDeployClusterware.sh 脚本:
## 以节点一为例
[root@kesrac01 script]# vi rootDeployClusterware.sh
## 执行前需要检查 rootDeployClusterware.sh 脚本中的 INSTALLDIR 变量,需要修改为 KingbaseES 软件安装目录,本教程正常无需修改
## INSTALLDIR=/KingbaseES/V8
## 使用 root 用户执行脚本
[root@kesrac01 script]# sh rootDeployClusterware.sh
[root@kesrac01 ~]# ll /opt/KingbaseHA/
-rw-r--r-- 1 root root 4150 11月 18 14:14 cluster_manager.conf
-rwxr-xr-x 1 root root 64786 11月 18 14:14 cluster_manager.sh
drwxr-xr-x 9 root root 130 11月 18 14:14 corosync
drwxr-xr-x 7 root root 130 11月 18 14:14 corosync-qdevice
drwxr-xr-x 8 root root 74 11月 18 14:14 crmsh
drwxr-xr-x 7 root root 70 11月 18 14:14 dlm-dlm
drwxr-xr-x 5 root root 42 11月 18 14:14 fence_agents
drwxr-xr-x 7 root root 140 11月 18 14:14 gfs2
drwxr-xr-x 6 root root 57 11月 18 14:14 gfs2-utils
drwxr-xr-x 5 root root 42 11月 18 14:14 ipmi_tool
-rwxr-xr-x 1 root root 2962 11月 18 14:14 keep_cluster_alive.sh
drwxr-xr-x 7 root root 89 11月 18 14:14 kingbasefs
drwxr-xr-x 5 root root 45 11月 18 14:15 kronosnet
drwxr-xr-x 2 root root 4096 11月 18 14:15 lib
drwxr-xr-x 2 root root 29 11月 18 14:15 lib64
drwxr-xr-x 7 root root 68 11月 18 14:15 libqb
drwxr-xr-x 10 root root 146 11月 18 14:15 pacemaker
drwxr-xr-x 6 root root 56 11月 18 14:15 python2.7
执行完成后会将 INSTALLDIR 目录下的 KingbaseHA 软件包拷贝到 /opt 目录下。
配置 cluster_manager.conf(所有节点)
进入 KingbaseHA 目录,修改集群搭建必要参数:

查看 cluster_manager.conf 默认配置:
[root@kesrac01 ~]# cd /opt/KingbaseHA/
[root@kesrac01 KingbaseHA]# cat cluster_manager.conf |grep -v ^$|grep -v ^#
cluster_name=kcluster
node_name=(node1 node2)
node_ip=(192.168.5.1 192.168.5.2)
enable_qdisk=1
votingdisk=/dev/sde
sharedata_dir=/sharedata/data_gfs2
sharedata_disk=/dev/sdb
install_dir=/opt/KingbaseHA
env_bash_file=/root/.bashrc
keep_cluster_alive=0
pacemaker_daemon_group=haclient
pacemaker_daemon_user=hacluster
kingbaseowner=kingbase
kingbasegroup=kingbase
kingbase_install_dir=/home/kingbase/V8/Server
database="test"
username="system"
password="123456"
initdb_options="-A trust -U $username"
enable_fence=1
enable_esxi=0
esxi_server=192.168.4.5
esxi_user=root
esxi_passwd="Kingbase@99"
enable_ipmi=0
ipmi_server=(192.168.2.100 192.168.2.101)
ipmi_user=(Administrator Administrator)
ipmi_passwd=("Admin@9000" "Admin@9000")
enable_qdisk_fence=1
qdisk_watchdog_dev=/dev/watchdog
qdisk_watchdog_timeout=30
enable_fip=0
fip=(192.168.4.139 192.168.4.140)
fip_interface=(bond0 bond0)
fip_netmask=24
enable_heuristics=1
heuristics_interval=1000
heuristics_timeout=10000
heuristics_ping_gateway=""
heuristics_reskey_attempts=1
heuristics_exec="exec_ping: /bin/ping -q -c $heuristics_reskey_attempts $heuristics_ping_gateway"
install_rac=1
rac_port=54321
rac_lms_port=53444
rac_lms_count=7
install_ssma=0
ssma_data_disk=("-U f0c8f59d-0cc8-473c-970d-d19b30d87f5e" "-U 7075f361-f3ad-48cf-87cc-ecc3db4a063a")
ssma_data_dir=(/sharedata/data1 /sharedata/data2)
ssma_port=(36321 36322)
ssma_fstype=ext4
需要修改参数为:
## 集群名称
cluster_name=krac
## 集群节点主机名
node_name=(kesrac01 kesrac02)
## 集群节点 IP
node_ip=(192.168.6.60 192.168.6.61)
## 仲裁磁盘和 votedisk
votingdisk=/dev/sdb
## 数据库共享存储磁盘
sharedata_disk=/dev/sdc
## KingbaseES 软件安装路径
kingbase_install_dir=/KingbaseES/V8/Server
## 不启用 heuristics
enable_heuristics=0
配置修改完之后即可,后续需要调用。
磁盘初始化(节点一)
本文基于 SAN 的部署,所以需要初始化仲裁和 votedisk 磁盘(iscsi 共享存储)。
初始化仲裁盘:
## root 用户执行
[root@kesrac01 ~]# cd /opt/KingbaseHA/
[root@kesrac01 KingbaseHA]# ./cluster_manager.sh --qdisk_init
votingdisk init start
disk /dev/sdb has already initialized as label 'krac'
Are you sure you want to initialize again? [Y/N]:
Y
/dev/block/8:16:
/dev/disk/by-id/scsi-22d5116c157b61795:
/dev/disk/by-path/ip-192.168.6.43:3260-iscsi-iqn.2008-08.com.starwindsoftware:lpc-matebook-lucifer-lun-0:
/dev/qdisk:
/dev/sdb:
Magic: eb7a62c2
Label: krac
Created: Mon Nov 18 14:23:16 2024
Host: kesrac01
Kernel Sector Size: 512
Recorded Sector Size: 512
votingdisk init success
初始化数据盘:
[root@kesrac01 KingbaseHA]# ./cluster_manager.sh --cluster_disk_init
sharedata disk init start
It appears to contain an existing filesystem (gfs2)
This will destroy any data on /dev/sdc
Are you sure you want to proceed? (Y/N):
Y
Adding journals: Done
Building resource groups: Done
Creating quota file: Done
Writing superblock and syncing: Done
Device: /dev/sdc
Block size: 4096
Device size: 20.00 GB (5242880 blocks)
Filesystem size: 20.00 GB (5242876 blocks)
Journals: 3
Journal size: 512MB
Resource groups: 77
Locking protocol: "lock_dlm"
Lock table: "krac:gfs2"
UUID: b8f79ae5-5d80-4596-aab8-1ecda4eaf685
sharedata disk init success
基础组件初始化(所有节点)
使用 root 用户在所有节点执行,更新操作系统内核的 gfs2 模块:
## 以节点一为例
[root@kesrac01 KingbaseHA]# ./cluster_manager.sh --init_gfs2
init gfs2 start
current OS kernel version does not support updating gfs2, please confirm whether to continue? (Y/N):
Y
init the OS native gfs2 success
使用 root 用户在所有节点执行,初始化所有基础组件,如corosync,pacemaker,corosync-qdevice:
## 以节点一为例
[root@kesrac01 KingbaseHA]# ./cluster_manager.sh --base_configure_init
init kernel soft watchdog start
init kernel soft watchdog success
config host start
config host success
add env varaible in /root/.bashrc
add env variable success
config corosync.conf start
config corosync.conf success
Starting Corosync Cluster Engine (corosync): [WARNING]
add pacemaker daemon user start
add pacemaker daemon user success
config pacemaker success
Starting Pacemaker Cluster Manager[ OK ]
config qdevice start
config qdevice success
clean qdisk fence flag start
clean qdisk fence flag success
Starting Qdisk Fenced daemon (qdisk-fenced): [ OK ]
Starting Corosync Qdevice daemon (corosync-qdevice): [ OK ]
config kingbase rac start
config kingbase rac success
add_udev_rule start
add_udev_rule success
check and mknod for dlm start
/opt/KingbaseHA/corosync/etc/corosync/uidgid.d
/opt/KingbaseHA/corosync/etc/corosync/uidgid.d
/opt/KingbaseHA/corosync/etc/corosync/uidgid.d
check and mknod for dlm success
初始化之后,查看环境变量:
[root@kesrac01 KingbaseHA]# cat /root/.bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
export install_dir=/opt/KingbaseHA
export PATH=/opt/KingbaseHA/python2.7/bin:/opt/KingbaseHA/pacemaker/sbin/:$PATH
export PATH=/opt/KingbaseHA/crmsh/bin:/opt/KingbaseHA/pacemaker/libexec/pacemaker/:$PATH
export PATH=/opt/KingbaseHA/corosync/sbin:/opt/KingbaseHA/corosync-qdevice/sbin:$PATH
export PYTHONPATH=/opt/KingbaseHA/python2.7/lib/python2.7/site-packages/:/opt/KingbaseHA/crmsh/lib/python2.7/site-packages:$PYTHONPATH
export COROSYNC_MAIN_CONFIG_FILE=/opt/KingbaseHA/corosync/etc/corosync/corosync.conf
export CRM_CONFIG_FILE=/opt/KingbaseHA/crmsh/etc/crm/crm.conf
export OCF_ROOT=/opt/KingbaseHA/pacemaker/ocf
export HA_SBIN_DIR=/opt/KingbaseHA/pacemaker/sbin/
export QDEVICE_SBIN_DIR=/opt/KingbaseHA/corosync-qdevice/sbin/
export LD_LIBRARY_PATH=/opt/KingbaseHA/lib64/:$LD_LIBRARY_PATH
export HA_INSTALL_PATH=/opt/KingbaseHA
export PATH=/opt/KingbaseHA/dlm-dlm/sbin:/opt/KingbaseHA/gfs2-utils/sbin:$PATH
export LD_LIBRARY_PATH=/opt/KingbaseHA/corosync/lib/:$LD_LIBRARY_PATH
检查 corosync 和 pacemaker 进程:
## corosync
[root@kesrac01 KingbaseHA]# ps -ef|grep corosync
root 43300 1 1 14:41 ? 00:00:00 /opt/KingbaseHA/corosync/sbin/corosync -c /opt/KingbaseHA/corosync/etc/corosync/corosync.conf -p /opt/KingbaseHA/corosync/var/
root 43436 1 0 14:41 ? 00:00:00 corosync-qdevice -p /opt/KingbaseHA/corosync-qdevice/var/run/corosync-qdevice/corosync-qdevice.sock
root 43437 1 0 14:41 ? 00:00:00 corosync-qdevice -p /opt/KingbaseHA/corosync-qdevice/var/run/corosync-qdevice/corosync-qdevice.sock
root 43588 9128 0 14:42 pts/0 00:00:00 grep --color=auto corosync
## pacemaker
[root@kesrac01 KingbaseHA]# ps -ef|grep pacemaker
root 43341 1 0 14:41 pts/0 00:00:00 /opt/KingbaseHA/pacemaker/sbin/pacemakerd -d /opt/KingbaseHA/pacemaker
haclust+ 43344 43341 0 14:41 ? 00:00:00 /opt/KingbaseHA/pacemaker/libexec/pacemaker/pacemaker-based -d /opt/KingbaseHA/pacemaker
root 43345 43341 0 14:41 ? 00:00:00 /opt/KingbaseHA/pacemaker/libexec/pacemaker/pacemaker-fenced -d /opt/KingbaseHA/pacemaker
root 43346 43341 0 14:41 ? 00:00:00 /opt/KingbaseHA/pacemaker/libexec/pacemaker/pacemaker-execd -d /opt/KingbaseHA/pacemaker
haclust+ 43347 43341 0 14:41 ? 00:00:00 /opt/KingbaseHA/pacemaker/libexec/pacemaker/pacemaker-attrd
haclust+ 43348 43341 0 14:41 ? 00:00:00 /opt/KingbaseHA/pacemaker/libexec/pacemaker/pacemaker-schedulerd -d /opt/KingbaseHA/pacemaker
haclust+ 43349 43341 0 14:41 ? 00:00:00 /opt/KingbaseHA/pacemaker/libexec/pacemaker/pacemaker-controld -d /opt/KingbaseHA/pacemaker
root 43598 9128 0 14:42 pts/0 00:00:00 grep --color=auto pacemaker
查看集群资源:
## 需要生效环境变量
[root@kesrac01 KingbaseHA]# source /root/.bashrc
[root@kesrac01 KingbaseHA]# crm status
Cluster Summary:
* Stack: corosync
* Current DC: kesrac01 Pacemaker (Kingbase) V008R006B1108 (2.0.3.0.0 4b1f869f0f:1268c00dfa83) - partition with quorum
* Last updated: Mon Nov 18 14:44:06 2024
* Last change: Mon Nov 18 14:41:35 2024 by hacluster via crmd on kesrac01
* 2 nodes configured
* 0 resource instances configured
Node List:
* Online: [ kesrac01 kesrac02 ]
Full List of Resources:
* No resources
确保两个节点的进程均已正常启动。
gfs2 相关资源初始化(节点一)
配置 fence、dlm 和 gfs2 资源:
[root@kesrac01 KingbaseHA]# ./cluster_manager.sh --config_gfs2_resource
config dlm and gfs2 resource start
b8f79ae5-5d80-4596-aab8-1ecda4eaf685
config dlm and gfs2 resource success
查看集群资源:
## 注意 gfs2 一直在 Starting 状态
[root@kesrac01 KingbaseHA]# crm status
Cluster Summary:
* Stack: corosync
* Current DC: kesrac01 Pacemaker (Kingbase) V008R006B1108 (2.0.3.0.0 4b1f869f0f:1268c00dfa83) - partition with quorum
* Last updated: Mon Nov 18 14:47:00 2024
* Last change: Mon Nov 18 14:44:23 2024 by root via cibadmin on kesrac01
* 2 nodes configured
* 6 resource instances configured
Node List:
* Online: [ kesrac01 kesrac02 ]
Full List of Resources:
* fence_qdisk_0 (stonith:fence_qdisk): Started kesrac02
* fence_qdisk_1 (stonith:fence_qdisk): Started kesrac01
* Clone Set: clone-dlm [dlm]:
* Started: [ kesrac01 kesrac02 ]
* Clone Set: clone-gfs2 [gfs2]:
* gfs2 (ocf::heartbeat:Filesystem): Starting kesrac01
* gfs2 (ocf::heartbeat:Filesystem): Starting kesrac02
## 要等待 dlm 和 gfs2 全都启动到 Started 才算完成
[root@kesrac01 KingbaseHA]# crm status
Cluster Summary:
* Stack: corosync
* Current DC: kesrac01 Pacemaker (Kingbase) V008R006B1108 (2.0.3.0.0 4b1f869f0f:1268c00dfa83) - partition with quorum
* Last updated: Mon Nov 18 14:47:38 2024
* Last change: Mon Nov 18 14:44:23 2024 by root via cibadmin on kesrac01
* 2 nodes configured
* 6 resource instances configured
Node List:
* Online: [ kesrac01 kesrac02 ]
Full List of Resources:
* fence_qdisk_0 (stonith:fence_qdisk): Started kesrac02
* fence_qdisk_1 (stonith:fence_qdisk): Started kesrac01
* Clone Set: clone-dlm [dlm]:
* Started: [ kesrac01 kesrac02 ]
* Clone Set: clone-gfs2 [gfs2]:
* Started: [ kesrac01 kesrac02 ]
确保集群状态正常。
初始化数据库集簇(节点一)
创建 RAC 数据库实例,初始化数据库:
[root@kesrac01 KingbaseHA]# ./cluster_manager.sh --init_rac
init KingbaseES RAC start
create_rac_share_dir start
create_rac_share_dir success
数据库簇将使用本地化语言 "zh_CN.utf8"进行初始化.
默认的数据库编码已经相应的设置为 "UTF8".
属于此数据库系统的文件宿主为用户 "kingbase".
此用户也必须为服务器进程的宿主.
initdb: could not find suitable text search configuration for locale "zh_CN.utf8"
缺省的文本搜索配置将会被设置到"simple"
字符串的比较区分大小写.
禁止为数据页生成校验和.
输入新的超级用户口令:
再输入一遍:
创建目录 /sharedata/data_gfs2/kingbase/data ... 成功
正在创建子目录 ... 成功
选择动态共享内存实现 ......posix
选择默认最大联接数 (max_connections) ... 100
选择默认共享缓冲区大小 (shared_buffers) ... 128MB
选择默认时区...Asia/Shanghai
创建配置文件 ... 成功
开始设置加密设备
正在初始化加密设备...成功
正在运行自举脚本 ...成功
正在执行自举后初始化 ...成功
创建安全数据库...成功
加载安全数据库...成功
同步数据到磁盘...成功
成功。您现在可以用下面的命令开启数据库服务器:
./sys_ctl -D /sharedata/data_gfs2/kingbase/data -l 日志文件 start
init KingbaseES RAC success
托管数据库(节点一)
推荐使用 pacemaker 管理数据库的启动和停止,这样可以获得更好的可用性。
初始化 PINGD、FIP、DB 资源:
[root@kesrac01 KingbaseHA]# ./cluster_manager.sh --config_rac_resource
crm configure DB resource start
crm configure DB resource end
查看资源配置信息:
[root@kesrac01 KingbaseHA]# crm config show
node 1: kesrac01
node 2: kesrac02
primitive DB ocf:kingbase:kingbase \
params sys_ctl="/KingbaseES/V8/Server/bin/sys_ctl" ksql="/KingbaseES/V8/Server/bin/ksql" sys_isready="/KingbaseES/V8/Server/bin/sys_isready" kb_data="/sharedata/data_gfs2/kingbase/data" kb_dba=kingbase kb_host=0.0.0.0 kb_user=system kb_port=54321 kb_db=template1 logfile="/KingbaseES/V8/Server/log/kingbase1.log" \
op start interval=0 timeout=120 \
op stop interval=0 timeout=120 \
op monitor interval=9s timeout=30 on-fail=restart \
meta failure-timeout=5min
primitive dlm ocf:pacemaker:controld \
params daemon="/opt/KingbaseHA/dlm-dlm/sbin/dlm_controld" dlm_tool="/opt/KingbaseHA/dlm-dlm/sbin/dlm_tool" args="-s 0 -f 0" \
op start interval=0 \
op stop interval=0 \
op monitor interval=60 timeout=60
primitive fence_qdisk_0 stonith:fence_qdisk \
params qdisk_path="/dev/sdb" qdisk_fence_tool="/opt/KingbaseHA/corosync-qdevice/sbin/qdisk-fence-tool" pcmk_host_list=kesrac01 \
op monitor interval=60s \
meta failure-timeout=5min target-role=Started
primitive fence_qdisk_1 stonith:fence_qdisk \
params qdisk_path="/dev/sdb" qdisk_fence_tool="/opt/KingbaseHA/corosync-qdevice/sbin/qdisk-fence-tool" pcmk_host_list=kesrac02 \
op monitor interval=60s \
meta failure-timeout=5min target-role=Started
primitive gfs2 Filesystem \
params device="-o noatime -U b8f79ae5-5d80-4596-aab8-1ecda4eaf685" directory="/sharedata/data_gfs2" fstype=gfs2 \
op start interval=0 timeout=7200 \
op stop interval=0 timeout=60 \
op monitor interval=30s timeout=60 OCF_CHECK_LEVEL=10 \
meta failure-timeout=5min
clone clone-DB DB \
meta interleave=true target-role=Started
clone clone-dlm dlm \
meta interleave=true target-role=Started
clone clone-gfs2 gfs2 \
meta interleave=true target-role=Started
colocation cluster-colo1 inf: clone-gfs2 clone-dlm
order cluster-order1 clone-dlm clone-gfs2
order cluster-order2 clone-dlm clone-gfs2 clone-DB
location fence_qdisk_0-on-kesrac02 fence_qdisk_0 1800: kesrac02
location fence_qdisk_1-on-kesrac01 fence_qdisk_1 1800: kesrac01
property cib-bootstrap-options: \
have-watchdog=false \
dc-version=2.0.3.0.0-4b1f869f0f \
cluster-infrastructure=corosync \
cluster-name=krac \
cluster-recheck-interval=3min \
load-threshold="0%"
查看当前数据库状态:
[root@kesrac01 ~]# crm resource status clone-DB
resource clone-DB is running on: kesrac01
resource clone-DB is running on: kesrac02
配置完成后,尝试关闭数据库资源:
[root@kesrac01 ~]# crm resource stop clone-DB
## 需要等待几秒后,再次查看发现数据库已经关闭
[root@kesrac01 ~]# crm resource status clone-DB
resource clone-DB is NOT running
resource clone-DB is NOT running
开启数据库资源:
[root@kesrac01 ~]# crm resource start clone-DB
## 启动成功
[root@kesrac01 ~]# crm resource status clone-DB
resource clone-DB is running on: kesrac01
resource clone-DB is running on: kesrac02
查看集群状态:
[root@kesrac01 ~]# crm status
Cluster Summary:
* Stack: corosync
* Current DC: kesrac01 Pacemaker (Kingbase) V008R006B1108 (2.0.3.0.0 4b1f869f0f:1268c00dfa83) - partition with quorum
* Last updated: Mon Nov 18 16:11:55 2024
* Last change: Mon Nov 18 16:11:35 2024 by root via cibadmin on kesrac01
* 2 nodes configured
* 8 resource instances configured
Node List:
* Online: [ kesrac01 kesrac02 ]
Full List of Resources:
* fence_qdisk_0 (stonith:fence_qdisk): Started kesrac02
* fence_qdisk_1 (stonith:fence_qdisk): Started kesrac01
* Clone Set: clone-dlm [dlm]:
* Started: [ kesrac01 kesrac02 ]
* Clone Set: clone-gfs2 [gfs2]:
* Started: [ kesrac01 kesrac02 ]
* Clone Set: clone-DB [DB]:
* Started: [ kesrac01 kesrac02 ]
使用 pacemaker 托管数据库是推荐的做法,这样可以获得更好的可用性。
启停集群
启动停止集群需要在 root 用户下执行,使用 cluster_manager.sh 脚本。
关闭集群:
## 在任意节点均可以执行,只会关闭当前执行节点的集群资源
[root@kesrac02 ~]# cd /opt/KingbaseHA/
[root@kesrac02 KingbaseHA]# ./cluster_manager.sh stop
Signaling Pacemaker Cluster Manager to terminate[ OK ]
Waiting for cluster services to unload..........[ OK ]
Signaling Qdisk Fenced daemon (qdisk-fenced) to terminate: [ OK ]
Waiting for qdisk-fenced services to unload:[ OK ]
Signaling Corosync Qdevice daemon (corosync-qdevice) to terminate: [ OK ]
Waiting for corosync-qdevice services to unload:.[ OK ]
Signaling Corosync Cluster Engine (corosync) to terminate: [ OK ]
Waiting for corosync services to unload:..[ OK ]
此时查看当前节点集群状态:
[root@kesrac02 KingbaseHA]# crm status
Error: cluster is not available on this node
ERROR: status: crm_mon (rc=102):
## 查看集群各服务状态
[root@kesrac02 KingbaseHA]# ./cluster_manager.sh status
corosync is stopped
pacemakerd is stopped
corosync-qdevice is stopped
qdisk-fenced is stopped
## 也可以分别查看各个资源状态
[root@kesrac02 KingbaseHA]# ./cluster_manager.sh --status_pacemaker
pacemakerd is stopped
[root@kesrac02 KingbaseHA]# ./cluster_manager.sh --status_corosync
corosync is stopped
[root@kesrac02 KingbaseHA]# ./cluster_manager.sh --status_qdevice
corosync-qdevice is stopped
[root@kesrac02 KingbaseHA]# ./cluster_manager.sh --status_qdisk_fenced
qdisk-fenced is stopped
查看另一个节点的集群状态:
[root@kesrac01 install]# crm status
Cluster Summary:
* Stack: corosync
* Current DC: kesrac01 Pacemaker (Kingbase) V008R006B1108 (2.0.3.0.0 4b1f869f0f:1268c00dfa83) - partition with quorum
* Last updated: Mon Nov 18 16:38:57 2024
* Last change: Mon Nov 18 16:11:35 2024 by root via cibadmin on kesrac01
* 2 nodes configured
* 8 resource instances configured
Node List:
* Online: [ kesrac01 ]
* OFFLINE: [ kesrac02 ]
Full List of Resources:
* fence_qdisk_0 (stonith:fence_qdisk): Started kesrac01
* fence_qdisk_1 (stonith:fence_qdisk): Started kesrac01
* Clone Set: clone-dlm [dlm]:
* Started: [ kesrac01 ]
* Stopped: [ kesrac02 ]
* Clone Set: clone-gfs2 [gfs2]:
* Started: [ kesrac01 ]
* Stopped: [ kesrac02 ]
* Clone Set: clone-DB [DB]:
* Started: [ kesrac01 ]
* Stopped: [ kesrac02 ]
## 节点 1 的集群各服务状态正常
[root@kesrac01 install]# cd /opt/KingbaseHA/
[root@kesrac01 KingbaseHA]# ./cluster_manager.sh status
corosync (pid 43300) is running...
pacemakerd (pid 43341) is running...
corosync-qdevice (pid 43437) is running...
qdisk-fenced (pid 43379) is running...
可以发现节点 2 集群已经关闭,对应的集群和数据库资源均已关闭。
启动集群:
[root@kesrac02 KingbaseHA]# ./cluster_manager.sh start
Waiting for node failover handling:[ OK ]
Starting Corosync Cluster Engine (corosync): [WARNING]
clean qdisk fence flag start
clean qdisk fence flag success
Starting Qdisk Fenced daemon (qdisk-fenced): [ OK ]
Starting Corosync Qdevice daemon (corosync-qdevice): [ OK ]
Waiting for quorate:..................[ OK ]
Starting Pacemaker Cluster Manager[ OK ]
查看集群状态:
[root@kesrac02 KingbaseHA]# crm status
Cluster Summary:
* Stack: corosync
* Current DC: kesrac01 Pacemaker (Kingbase) V008R006B1108 (2.0.3.0.0 4b1f869f0f:1268c00dfa83) - partition with quorum
* Last updated: Mon Nov 18 16:53:09 2024
* Last change: Mon Nov 18 16:11:35 2024 by root via cibadmin on kesrac01
* 2 nodes configured
* 8 resource instances configured
Node List:
* Online: [ kesrac01 kesrac02 ]
Full List of Resources:
* fence_qdisk_0 (stonith:fence_qdisk): Started kesrac02
* fence_qdisk_1 (stonith:fence_qdisk): Started kesrac01
* Clone Set: clone-dlm [dlm]:
* Started: [ kesrac01 kesrac02 ]
* Clone Set: clone-gfs2 [gfs2]:
* Started: [ kesrac01 kesrac02 ]
* Clone Set: clone-DB [DB]:
* Started: [ kesrac01 kesrac02 ]
集群启动成功。
访问数据库
访问数据库需要使用 kingbase 主机用户,(为了方便)配置 kingbase 用户环境变量:
## 以节点一为例
[kingbase@kesrac01 ~]$ cat<<-\EOF>>/home/kingbase/.bash_profile
export KES_HOME=/KingbaseES/V8/Server
export LD_LIBRARY_PATH=$KES_HOME/lib:/lib:/usr/lib
export PATH=$KES_HOME/bin:/usr/sbin:$PATH
export PS1="[`whoami`@`hostname`:"'$PWD]$ '
alias ksystem='ksql test system'
alias ksso='ksql test sso'
EOF
两个节点都需要配置,配置完成后生效环境变量:
[kingbase@kesrac01 ~]$ source ~/.bash_profile
配置好环境变量之后就可以不需要到指定路径下执行命令了。
访问 RAC 数据库:
[kingbase@kesrac01:/home/kingbase]$ ksql -U system test -p 54321
授权类型: TEST-企业版.
输入 "help" 来获取帮助信息.
## 查看数据库存储目录 data(存储在 gfs2 的共享文件系统上)
test=# show data_directory;
data_directory
------------------------------------
/sharedata/data_gfs2/kingbase/data
test=# \conninfo
以用户 "system" 的身份,通过套接字"/tmp"在端口"54321"连接到数据库 "test"
test=# create database lucifer;
CREATE DATABASE
test=# \c lucifer
您现在以用户名"system"连接到数据库"lucifer"。
lucifer=# create table test (id int,name varchar2(20));
CREATE TABLE
lucifer=# insert into test values (1,'lucifer');
INSERT 0 1
lucifer=# select * from test;
id | name
----+---------
1 | lucifer
(1 行记录)
lucifer=# quit;
KES RAC 是默认本地免密登录的:
[kingbase@kesrac02:/home/kingbase]$ ksql test system
授权类型: TEST-企业版.
输入 "help" 来获取帮助信息.
test=#
查看对应的配置文件 sys_hba.conf:
[kingbase@kesrac02:/home/kingbase]$ vi /sharedata/data_gfs2/kingbase/data/sys_hba.conf
# "local" 只能用于UNIX域套接字
local all all trust
数据库连接正常。
写在最后
KES RAC 的部署到此结束,后续会继续分享 KES RAC 的运维管理以及数据库使用技巧,敬请期待。
如果有遗漏或者不足的地方,欢迎评论区补充或者投稿,感谢阅读!
往期精彩文章
达梦数据库安装最详细教程
一招教你学会达梦数据库的免密登录
一文讲透达梦数据库的大小写敏感
效率翻倍!达梦数据库 disql 使用技巧全攻略
达梦数据库参数配置与一键优化指南
达梦 AWR 报告快速上手指南
金仓数据库 KingbaseES V9 单机安装指南
KingbaseES KSQL 免密登录的几种方式
KingbaseES 控制文件冗余与恢复秘籍
金仓 KingbaseES RAC 入门指南
GBase 8a MPP 集群部署最佳实践
GBase 8a GDCA 认证课后练习题大全(题库)
南大通用 GBASE 8s V8.8 数据库最全安装指南
GBase 8s GDCA 认证课后练习题大全(题库)
GBase 8s 数据库巡检报告及一键巡检脚本
YashanDB 一键生成 AWR 报告
YashanDB 数据库安装部署
YashanDB 共享集群(YAC)入门指南与技术详解




