GBase 8a MPP 集群部署最佳实践

大家好,这里是公众号 DBA学习之路,分享一些学习国产数据库路上的知识和经验。

社群交流

为了给大家提供一些技术交流的平台,目前已成立的技术交流群:

  • Oracle 数据库交流群
  • 国产数据库交流群
  • Linux 技术交流群
  • ChatGPT 4o 免费体验群

需要进群(均已超过 200 人,需要邀请)可以添加号主微信:Lucifer-0622,备注对应的群名即可。

前言

最近 2024 年十一月 GBase 8a MPP Cluster 认证培训 活动开始了,今天正式开课,现在报名还不晚,免费学习考证。

GBase 8a 介绍

GBase 8a MPP Cluster 采用 MPP + Shared Nothing 的分布式联邦架构,节点间通过TCP/IP 网络进行通信,每个节点采用本地磁盘来存储数据,支持对称部署和非对称部署。

GBase 8a MPP Cluster 产品架构图

GBase 8a MPP Cluster 产品总共包含三大核心组件及辅助功能组件,其中核心组件包含分布式管理集群 GCWare、分布式调度集群 GCluster 和分布式存储计算集群 GNode,所有组件的功能分别为:

  • GCWare:组成分布式管理集群,为集群提供一致性服务。主要负责记录并保存集群结构、节点状态、节点资源状态、并行控制和分布式排队锁等信息。在多副本数据操作时,记录和查询可操作节点,提供各节点数据一致性状态。
  • GCluster:组成分布式调度集群,是整个集群的统一入口。主要负责从业务端接受连接并将查询结果返回给业务端。GCluster 会接受 SQL、进行解析优化,生成分布式执行计划,选取可操作的节点执行分布式调度,并将结果反馈给业务端。
  • GNode:组成分布式存储集群,是集群数据的存储和计算单元。主要负责存储集群数据、接收和执行 GCluster 下发的 SQL 并将执行结果返回给 GCluster、从加载服务器接收数据进行数据加载。
  • GCMonit:用于实时监测 GCluster 和 GNode 核心组件的运行状态, 一旦发现某个服务程序的进程状态发生变化,就根据配置文件中的内容来执行相应的服务启动命令,从而保证服务组件正常运行。
  • GCware_Monit:用于实时监测 GCware 组件的运行状态, 一旦发现服务进程状态发生变化,就根据配置文件中的内容来执行相应的服务启动命令,从而保证服务组件正常运行。
  • GCRecover & GCSyncServer:用于多副本间的数据同步。一旦发生多副本间数据文件不一致则调用该进程进行同步,从而保证多副本数据文件的一致性。

GBase 8a MPP Cluster 产品概念图:

📢 注意:GCware 节点推荐部署在 GCluster 节点服务器上,这种将 GCluster 节点和 GCware 节点部署在一起的复合节点又称为 Coordinator 节点。

上述的所有组件按照逻辑概念和虚拟概念划分,又可分为如下几部分:

  • 逻辑概念划分
    • GCluster Cluster:集群的分布式调度集群,是集群的统一入口节点集合。GCluster Cluster 的节点上运行 gclusterd、gcrecover、gcmonit、gcmmonit 服务。
    • GCware Cluster:集群的分布式管理集群,是集群的一致性管理节点集合。GCware Cluster 的节点上运行 gcware、gcware_monit、gcware_mmonit 服务。
    • Data Cluster:集群的分布式数据存储计算集群,是集群的数据存储计算节点集合。Data Cluster 的节点上运行有 gbased、gc_sync_server、gcmonit、gcmmonit 服务。
  • 虚拟概念划分
    • VC(Virtual Cluster):虚拟集群,是对 Data Cluster 节点的划分,每个 VC 拥有固定数量的Data Cluster 节点。整个集群是由若干个 VC 组成,所有的 VC 由同一套GCluster Cluster 和GCwareCluster 管理,共享统一的入口。可以将不同 Data 集群节点按不同业务特点进行物理隔离,形成各自独立运行的 VC。
    • RC(Root Cluster):根集群,是所有 GCluster Cluster 节点、GCware Cluster 节点和Data Cluster 节点的集合,不对用户提供服务。包含一个 GCluster Cluster、一个GCware Cluster、多个VC 和 Free Nodes。

根据集群规模建议集群中 Data 节点、GCluster 节点和 GCware 节点个数分配如下:

建议使用对称部署:将 GCWare、GCluster 和 GNode 部署在同一节点,即同一服务器既是 Coordinator 节点也是 Data 节点。

环境准备

主机环境

这里我已经提前好了三台 Linux 主机:

📢 注意:GBase 8a MPP Cluster 各节点操作系统需要符合以下要求:

  • 操作系统要求:Redhat 7.x(或者CentOS 7.x),安装系统时建议在“软件选择”中勾选“带GUI的服务器”中的“开发工具”选项,后续可用于图形化安装。
  • 操作系统版本:集群中同一 VC 内节点的操作系统版本需要保持一致
  • 推荐硬件配置:CPU 2.0 GHz 以上;内存 4G 以上,剩余磁盘空间 20G 以上,固定 IP 地址。
  • 网络要求:各节点 IP 是同一网段,并互相能连通;开启 SSH 服务;关闭防火墙、关闭 seLinux 服务。
  • 磁盘分区格式:RHEL 6.X:EXT4 文件格式;RHEL 7.X:XFS 文件格式;SUSE: XFS 文件格式。
  • Swap 分区设置:低于 64G 内存的机器建议 Swap 和内存一致;高于 64G 内存的机器建议设置为内存的一半或者 64G。建议操作系统中 Swap 文件与数据文件放到不同的磁盘。
  • 主机名配置:主机名(域名)需小于 46 字符。

GBase 8a MPP Cluster 各服务使用的默认端口如下:

检查各节点、各服务使用的默认端口是否被占用(lsof -i:端口号):

  1. 所有 Gcluster 集群节点的端口要求一致
  2. 所有 Data 集群节点的端口要求一致
  3. 所有的 gcware 集群节点的端口要求一致

安装介质下载

官网可以直接下载:GBase8a_MPP_Cluster-NoLicense-FREE-9.5.3.28.12-redhat7-x86_64.tar.bz2

根据操作系统的版本(同一套集群使用相同版本操作系统)获取相应的 GBase 8aMPP Cluster 软件安装包:

安装前准备

环境配置需要在 root 用户下执行。

关闭防火墙

所有节点均需关闭防火墙:

systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl status firewalld.service

确保防火墙正常关闭。

禁用 Selinux

所有节点建议关闭 SELNUX,防止造成一些不必要的问题:

## 这里使用 `setenforce 0` 临时生效
/usr/sbin/setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
sestatus

将 SELINUX 参数设置为 disabled,即 SELINUX=disabled 保存退出后,需要重新启动才能生效。

创建 DBA 用户

集群安装用户为 gbase,所有节点均需创建:

useradd gbase
echo "gbase:gbase" | chpasswd

创建安装目录

集群安装目录为 /opt,所有节点均需创建安装目录并授权:

mkdir -p /opt/gbase
chown -R gbase:gbase /opt
chown gbase:gbase /tmp

上传安装介质

将安装介质上传到主节点 /soft 目录下:

[root@gbase8a01 opt]# ls GBase8a_MPP_Cluster-NoLicense-FREE-9.5.3.28.12-redhat7-x86_64.tar.bz2 
GBase8a_MPP_Cluster-NoLicense-FREE-9.5.3.28.12-redhat7-x86_64.tar.bz2

解压后,将会在解压目录下生成 gcinstall 目录:

[root@gbase8a01 ~]# cd /opt/
[root@gbase8a01 opt]# tar xfj GBase8a_MPP_Cluster-NoLicense-FREE-9.5.3.28.12-redhat7-x86_64.tar.bz2

主节点解压后,需要对 /opt 目录进行重新授权:

chown -R gbase:gbase /opt

参数一键配置

官方提供了一个 python 脚本 SetSysEnv.py 用来一键配置系统参数文件:

  • 配置系统参数 /etc/systcl.conf 文件
  • 配置 /etc/security/limits.conf 文件
  • 配置 /etc/pam.d/su 文件
  • 配置 /etc/security/limits.d/*-nproc.conf 文件
  • 配置 /etc/cgconfig.conf 文件

在安装之前,需要在 gcluster 节点和 gnode 节点上使用 root 用户执行安装包中提供的脚本 SetSysEnv.py。如果 GCware 节点独立部署在单独的服务器上,GCware 节点不需要执行 SetSysEnv.py 文件。

这里三台主机均需要执行环境配置,所以需要拷贝配置文件 SetSysEnv.py 到三台主机的 /opt 目录下:

[root@gbase8a01 opt]# cp gcinstall/SetSysEnv.py /opt
## 将该脚本拷贝到要安装集群的各个节点
[root@gbase8a01 opt]# scp /opt/SetSysEnv.py 192.168.6.73:/opt
[root@gbase8a01 opt]# scp /opt/SetSysEnv.py 192.168.6.74:/opt

SetSysEnv.py 语法说明 python SetSysEnv.py --dbaUser=* --installPrefix=* [--cgroup]

参数说明:

每个节点都需要使用 root 执行:

## 集群各个节点在安装之前,必须存在集群的安装用户,且拥有安装目录的读写权限
python /opt/SetSysEnv.py --dbaUser=gbase --installPrefix=/opt/gbase --cgroup

脚本执行日志在 /tmp/SetSysEnv.log,可以查看脚本执行过程是否存在错误:

[root@gbase8a01 ~]# grep ERROR /tmp/SetSysEnv.log
2024-11-07 14:27:23,267-root-ERROR 
2024-11-07 14:27:23,267-root-ERROR /bin/sh: lssubsys: command not found

这里可以看到缺少 lssubsys 命令,安装命令:

yum install -y libcgroup-tools
## 安装完成后检查 lssubsys 命令是否存在
[root@gbase8a01 ~]# type lssubsys 
lssubsys is /usr/bin/lssubsys

安装完成后,重新执行脚本即可,执行完成后,查看对应的配置内容:

## /etc/systcl.conf
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_tw_buckets = 20000
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
kernel.core_uses_pid = 1
net.core.netdev_max_backlog = 262144
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.somaxconn = 32767
net.core.wmem_default = 8388608
net.core.wmem_max = 16777216
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_sack = 1
net.ipv4.ip_local_reserved_ports = 5050,5258,5288,6666,6268
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_wmem = 4096 16384 4194304
vm.vfs_cache_pressure = 1024
vm.swappiness = 1
vm.overcommit_memory = 0
vm.zone_reclaim_mode = 0
vm.max_map_count = 510826
#vm.min_free_kbytes = 817322 #Commented out by gcluster
vm.min_free_kbytes = 817322

## /etc/security/limits.conf
# Added by gcluster
gbase   soft    nofile  655360
# Added by gcluster
gbase   hard    nofile  655360
# Added by gcluster
gbase   soft    sigpending      unlimited
# Added by gcluster
gbase   hard    sigpending      unlimited
# Added by gcluster
gbase   soft    nproc   unlimited
# Added by gcluster
gbase   hard    nproc   unlimited
# End of file

## /etc/pam.d/su
session required pam_limits.so

## /etc/security/limits.d/*-nproc.conf
#*          soft    nproc     4096

## /etc/cgconfig.conf
mount {
        cpu     = /cgroup/cpu;
        cpuacct = /cgroup/cpuacct;
        blkio   = /cgroup/blkio;
        }

group gbase {
        perm{
            task{
                uid = gbase;
                gid = gbase;
                }   
            admin{
                uid = gbase;
                gid = gbase;
                }   
            }
        cpu{
            }
        cpuacct{
            }
        blkio{
            }   
        }

以上就是执行环境配置脚本后的配置内容,仅供参考。

安装必备依赖

官方文档中有一些依赖包要求:

  • 确认安装 libcgroup 包:libcgroup 包不属于默认安装包,需要单独安装,该包被资源管理功能需要。
  • 能正常执行 kill all 命令:该命令需要 psmisc 包的支持。psmisc 包不属于默认安装包,如果未安装,需要单独安装以确保 kill all 命令可以执行。
  • 安装的 python 版本必须为 python 2:RedHat 6/7 python2 无需单独安装,系统安装时默认自带。Redhat8/Centos8 需要单独安装 python2,安装完 python2 后使用的命令为 python2,需要将 python2 命令改为默认的 python 命令:alternatives --set python /usr/bin/python2。(Centos 8 自带 python2 和 python3 的安装包,在AppStream目录中)

GBase 8a 需要的必备依赖包列表,可以查看安装目录 gcinstall 下的 dependRpms 文件:

[gbase@gbase8a01 gcinstall]$ cat dependRpms 
ncurses-libs
libdb
glibc
keyutils-libs
libidn
libgpg-error
libgomp
libstdc++
libgcc
python-libs
libgcrypt
nss-softokn-freebl

挂载 ISO 镜像:

mount /dev/sr0 /mnt

配置软件源:

## 备份系统初始配置文件
mkdir -p /etc/yum.repos.d/bak
mv /etc/yum.repos.d/* /etc/yum.repos.d/bak
## 一键配置软件源,默认 ISO 安装镜像挂载在 /mnt 目录下
cat<<-EOF>/etc/yum.repos.d/local.repo
[server]
name=server
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF
## 查看配置好的软件源
cat /etc/yum.repos.d/local.repo

安装依赖包:

## 检查是否安装
rpm -qa libcgroup psmisc ncurses-libs libdb glibc keyutils-libs libidn libgpg-error libgomp libstdc++ libgcc python-libs libgcrypt nss-softokn-freebl
## 如果没有安装则执行安装
yum install -y libcgroup psmisc ncurses-libs libdb glibc keyutils-libs libidn libgpg-error libgomp libstdc++ libgcc python-libs libgcrypt nss-softokn-freebl
## 本文演示环境为 redhat 7.9,所以不需要安装 python2
python --version
Python 2.7.5

安装完成即可。

配置最大进程数

RHEL 7 需要配置操作系统允许最大进程数:

sed -i 's/#DefaultTasksMax=/DefaultTasksMax=infinity/g' /etc/systemd/system.conf

配置完成后,检查参数是否修改成功:

grep DefaultTasksMax /etc/systemd/system.conf
DefaultTasksMax=infinity

重新加载 systemd 守护进程并重启 systemd-logind 服务:

systemctl daemon-reexec

daemon-reexec 会重新执行systemd管理器,重新读取系统配置文件。

配置透明大页和 I/O 调度参数调整

官方建议关闭透明大页,部分操作系统默认开启了透明大页选项,可执行以下命令确认:

[root@gbase8a01 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled 
[always] madvise never

显示结果:

  • [always] madvise never:透明大页已开启。
  • always [madvise] never:透明大页已开启。
  • always madvise [never]:透明大页已关闭。

所有节点均需执行,修改 /etc/default/grub 文件,在 GRUB_CMDLINE_LINUX 中添加或修改参数 transparent_hugepage=neverelevator=deadline

sed -i 's/quiet/quiet transparent_hugepage=never elevator=deadline/' /etc/default/grub

通过以下指令检查当前系统的引导类型:

[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS

两种引导的启动文件路径分别为:

  • BIOS:/boot/grub2/grub.cfg
  • UEFI:/boot/efi/EFI/\<distro_name>/grub.cfg,distro_name 为系统发行版本名称,例如 ubuntu、fedora、debian 等。

执行 grub2–mkconfig 指令重新配置 grub.cfg:

## BIOS 引导
grub2-mkconfig -o /boot/grub2/grub.cfg
## UEFI 引导
grub2-mkconfig -o /boot/efi/EFI/<distro_name>/grub.cfg

重启操作系统,使配置永久生效:

reboot

验证透明大页已关闭:

cat /sys/kernel/mm/transparent_hugepage/enabled

结果应显示 always madvise [never]。

GBase 8a MPP Cluster 安装

V95 单 VC 模式主要的安装配置步骤可简单描述为:

  1. 执行 gcinstall 安装集群软件
  2. 创建 distribution
  3. 初始化集群(initnodedatamap)

安装集群软件

GBase 8a 安装需要进入到安装目录下,使用 DBA 用户在任意一个 Coordinator 节点上执行安装脚本 gcinstall.py 进行安装。

配置 demo.options

执行 gcinstall.py 脚本需要依赖安装参数文件 demo.options,所以需要提前配置好 demo.options 文件参数。

参数说明:

主节点切换到 gbase 用户,进入解压后的 gcinstall 目录,并修改安装配置文件参数:

[gbase@gbase8a01 ~]$ cd /opt/gcinstall/
[gbase@gbase8a01 gcinstall]$ ls demo.options 
demo.options
## 配置模板如下
[gbase@gbase8a01 gcinstall]$ cat demo.options 
installPrefix= /opt
coordinateHost = 192.168.151.234,192.168.151.235,192.168.151.237
coordinateHostNodeID = 234,235,237
dataHost = 192.168.151.234,192.168.151.235,192.168.151.237
#existCoordinateHost =
#existDataHost =
#existGcwareHost=
gcwareHost = 192.168.151.234,192.168.151.235,192.168.151.237
gcwareHostNodeID = 234,235,237
dbaUser = gbase
dbaGroup = gbase
dbaPwd = ''
rootPwd = ''
#dbRootPwd = ''
#rootPwdFile = rootPwd.json
#characterSet = utf8
#sshPort = 22

根据实际的集群环境修改安装参数文件 demo.options,需要将模板中的信息替换为我们自己的环境信息:

[gbase@gbase8a01 gcinstall]$ vi demo.options 
## 修改以下内容
installPrefix= /opt/gbase
coordinateHost = 192.168.6.72,192.168.6.73,192.168.6.74
coordinateHostNodeID = 72,73,74
dataHost = 192.168.6.72,192.168.6.73,192.168.6.74
gcwareHost = 192.168.6.72,192.168.6.73,192.168.6.74
gcwareHostNodeID = 72,73,74
dbaPwd = 'gbase'
rootPwd = 'gbase8a'

配置完参数文件就可以开始安装了。

执行 gcinstall.py

进入到安装目录下,使用 DBA 用户执行安装脚本 gcinstall.py,具体命令语法如下:

/gcinstall.py --license_file=licenseFile --silent=demo.options [--passwordInputMode]

参数说明:

官网目前下载的是 NoLicense 版本,所以无需 license 许可文件就可以安装。只需要在主节点执行安装命令即可:

## 在 /opt/gcinstall 目录下执行安装
[gbase@gbase8a01 gcinstall]$ ./gcinstall.py --silent=demo.options
## licence 声明部分省略
...
...
*********************************************************************************
Do you accept the above licence agreement ([Y,y]/[N,n])? y
*********************************************************************************
                     Welcome to install GBase products
*********************************************************************************
Environmental Checking on cluster nodes.
checking rpms ...
checking Cgconfig service
parse extendCfg.xml
CoordinateHost:
192.168.6.72    192.168.6.73    192.168.6.74
DataHost:
192.168.6.72    192.168.6.73    192.168.6.74
GcwareHost:
192.168.6.72    192.168.6.73    192.168.6.74
Are you sure to install GCluster on these nodes ([Y,y]/[N,n])? y

...
...

192.168.6.74            install gcware and cluster on host 192.168.6.74 successfully.
192.168.6.72            install gcware and cluster on host 192.168.6.72 successfully.
192.168.6.73            install gcware and cluster on host 192.168.6.73 successfully.
Starting all gcluster nodes ...
adding new datanodes to gcware ...
InstallCluster Successfully

在安装过程中,先进行环境检查,如果报错,会列出缺少 rpm 依赖包名称,说明操作系统没有安装全必须的 rpm 包,需要根据 rpm 包的名称去各节点逐个安装。

安装完成后,在家目录下会生成一个 .gbase_profile 环境变量文件:

[gbase@gbase8a01 ~]$ cat .gbase_profile 
export GBASE_INSTANCES_BASE=/opt/gbase

if [ -f /opt/gbase/192.168.6.72/gbase_profile ]; then 
  . /opt/gbase/192.168.6.72/gbase_profile 
fi 

if [ -f /opt/gbase/192.168.6.72/gcware_profile ]; then 
  . /opt/gbase/192.168.6.72/gcware_profile 
fi 

检查集群状态

重新登录 gbase 用户下,检查集群状态:

[root@gbase8a01 ~]# su - gbase
Last login: Thu Nov  7 17:33:02 CST 2024 from gbase8a01 on pts/4
[gbase@gbase8a01 ~]$ gcadmin
CLUSTER STATE:         ACTIVE

====================================
| GBASE GCWARE CLUSTER INFORMATION |
====================================
| NodeName |  IpAddress   | gcware |
------------------------------------
| gcware1  | 192.168.6.72 |  OPEN  |
------------------------------------
| gcware2  | 192.168.6.73 |  OPEN  |
------------------------------------
| gcware3  | 192.168.6.74 |  OPEN  |
------------------------------------
======================================================
|       GBASE COORDINATOR CLUSTER INFORMATION        |
======================================================
|   NodeName   |  IpAddress   | gcluster | DataState |
------------------------------------------------------
| coordinator1 | 192.168.6.72 |   OPEN   |     0     |
------------------------------------------------------
| coordinator2 | 192.168.6.73 |   OPEN   |     0     |
------------------------------------------------------
| coordinator3 | 192.168.6.74 |   OPEN   |     0     |
------------------------------------------------------
=============================================================
|         GBASE CLUSTER FREE DATA NODE INFORMATION          |
=============================================================
| NodeName  |  IpAddress   | gnode | syncserver | DataState |
-------------------------------------------------------------
| FreeNode1 | 192.168.6.73 | OPEN  |    OPEN    |     0     |
-------------------------------------------------------------
| FreeNode2 | 192.168.6.72 | OPEN  |    OPEN    |     0     |
-------------------------------------------------------------
| FreeNode3 | 192.168.6.74 | OPEN  |    OPEN    |     0     |
-------------------------------------------------------------

0 virtual cluster
3 coordinator node
3 free data node

集群状态正常。

创建数据分布模式

分片(distribution)决定数据在集群各节点的分布模式,包括每个数据节点存放几个主分片,每个主分片有几个备分片,备分片以什么规律分布在集群节点上。

集群安装成功后,会在安装包目录下生成一个 gcChangeInfo.xml 文件,用于描述数据在集群各节点的分布方式,用户可以按需配置 gcChangeInfo.xml。

创建 distribution 使用 gcadmin,对应的命令语法如下:

gcadmin distribution <gcChangeInfo.xml> <p num> [d num] [pattern 1|2]

参数说明:

修改 gcChangeInfo.xml

修改主节点的安装目录 /opt/gcinstall 中生成的 gcChangeInfo.xml 文件:

## 修改配置文件为一个 rack 包围所有 node 的格式
[gbase@gbase8a01 gcinstall]$ cat gcChangeInfo.xml 
<?xml version="1.0" encoding="utf-8"?>
<servers>
    <rack>
	<node ip="192.168.6.72"/>
        <node ip="192.168.6.73"/>
        <node ip="192.168.6.74"/>
    </rack>
</servers>

创建 distribution

gcChangeInfo.xml 文件中 rack 内 node 数量需要大于等于参数 p 的值(每个节点存放主分片的数量),否则会报错如下:

rack[1] node number:[1] shall be greater than segment number each node:[2]

确认 gcChangeInfo.xml 文件配置正确,根据实际情况创建分片:

[gbase@gbase8a01 gcinstall]$ gcadmin distribution gcChangeInfo.xml p 2 d 1 pattern 1
gcadmin generate distribution ...

NOTE: node [192.168.6.73] is coordinator node, it shall be data node too
NOTE: node [192.168.6.72] is coordinator node, it shall be data node too
NOTE: node [192.168.6.74] is coordinator node, it shall be data node too
gcadmin generate distribution successful

创建分片完成后,检查集群状态:

## 可以直接使用 gcadmin 查看分片是否创建成功,出现 DistributionId 列说明分片成功
[gbase@gbase8a01 gcinstall]$ gcadmin
CLUSTER STATE:         ACTIVE
VIRTUAL CLUSTER MODE:  NORMAL

====================================
| GBASE GCWARE CLUSTER INFORMATION |
====================================
| NodeName |  IpAddress   | gcware |
------------------------------------
| gcware1  | 192.168.6.72 |  OPEN  |
------------------------------------
| gcware2  | 192.168.6.73 |  OPEN  |
------------------------------------
| gcware3  | 192.168.6.74 |  OPEN  |
------------------------------------
======================================================
|       GBASE COORDINATOR CLUSTER INFORMATION        |
======================================================
|   NodeName   |  IpAddress   | gcluster | DataState |
------------------------------------------------------
| coordinator1 | 192.168.6.72 |   OPEN   |     0     |
------------------------------------------------------
| coordinator2 | 192.168.6.73 |   OPEN   |     0     |
------------------------------------------------------
| coordinator3 | 192.168.6.74 |   OPEN   |     0     |
------------------------------------------------------
=========================================================================================================
|                                    GBASE DATA CLUSTER INFORMATION                                     |
=========================================================================================================
| NodeName |                IpAddress                 | DistributionId | gnode | syncserver | DataState |
---------------------------------------------------------------------------------------------------------
|  node1   |               192.168.6.73               |       1        | OPEN  |    OPEN    |     0     |
---------------------------------------------------------------------------------------------------------
|  node2   |               192.168.6.72               |       1        | OPEN  |    OPEN    |     0     |
---------------------------------------------------------------------------------------------------------
|  node3   |               192.168.6.74               |       1        | OPEN  |    OPEN    |     0     |
---------------------------------------------------------------------------------------------------------

## 也可以使用以下方式查看分片分布信息
[gbase@gbase8a01 gcinstall]$ gcadmin showdistribution node
                                      Distribution ID: 1 | State: new | Total segment num: 6

====================================================================================================================================
|  nodes   |             192.168.6.73              |             192.168.6.72              |             192.168.6.74              |
------------------------------------------------------------------------------------------------------------------------------------
| primary  |                  1                    |                  2                    |                  3                    |
| segments |                  4                    |                  5                    |                  6                    |
------------------------------------------------------------------------------------------------------------------------------------
|duplicate |                  3                    |                  1                    |                  2                    |
|segments 1|                  5                    |                  6                    |                  4                    |
====================================================================================================================================

至此,数据分布模式创建完成。

初始化集群

集群安装完毕且建立 distribution 之后,在首次执行 SQL 命令之前,需要对数据库系统做初始化操作,才能正确执行所有的 SQL 操作。

如果不做初始化操作,执行数据库操作时会报错,提示没有被初始化:

gbase> create database lucifer;
ERROR 1707 (HY000): gcluster command error: (GBA-02CO-0003) nodedatamap is not initialized.

使用数据库用户 root 登录数据库(root 用户默认密码是空),执行 initnodedatamap 命令:

## 密码为空,直接回车
[gbase@gbase8a01 ~]$ gccli -uroot

GBase client Free Edition 9.5.3.28.12509af27. Copyright (c) 2004-2024, GBase.  All Rights Reserved.

gbase> initnodedatamap;
Query OK, 1 row affected (Elapsed: 00:00:00.46)

初始化命令只需执行一次,如果重复执行,会报错:

gbase> initnodedatamap;        
ERROR 1707 (HY000): gcluster command error: (GBA-02CO-0004) nodedatamap is already initialized.

至此,初始化集群完成。

创建库表

创建数据库以及表:

gbase> create database lucifer;
Query OK, 1 row affected (Elapsed: 00:00:00.01)

gbase> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| performance_schema |
| gbase              |
| gctmpdb            |
| gclusterdb         |
| lucifer            |
+--------------------+
6 rows in set (Elapsed: 00:00:00.00)

gbase> use lucifer;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)

gbase> create table lucifer(id int ,name varchar(20));
Query OK, 0 rows affected (Elapsed: 00:00:00.08)

gbase> show tables;
+-------------------+
| Tables_in_lucifer |
+-------------------+
| lucifer           |
+-------------------+
1 row in set (Elapsed: 00:00:00.00)

gbase> insert into lucifer values(1,'lucifer');
Query OK, 1 row affected (Elapsed: 00:00:00.03)

gbase> select * from lucifer;
+------+---------+
| id   | name    |
+------+---------+
|    1 | lucifer |
+------+---------+
1 row in set (Elapsed: 00:00:00.02)

数据库和表可以正常创建,代表部署正常,可以正常使用。

安装后检查

集群安装完成后,管理员可以通过 gcadmin 查看集群的运行状态:

## 查看集群各节点状态是否正常
gcadmin
## 查看集群数据分片分布相关信息
gcadmin showdistribution
gcadmin showdistribution node

至此,安装配置 GBase 8a 所有操作完毕。

集群卸载

集群卸载需要停止所有节点的所有集群服务,在所有节点执行:

gcluster_services all stop

如果安装了 gcware,则需要停止 gcware 服务,在安装了 gcaware 服务的节点上执行:

gcware_services all stop

主节点执行卸载命令:

cd /opt/gcinstall
./unInstall.py --silent=demo.options

至此,卸载完成。

配置开机自启

操作系统重启后,往往需要手动启动数据库服务:

## 在安装了 gcware 服务的节点上执行
su - gbase
gcware_services all start

## 在集群所有节点上执行
su - gbase
gcluster_services all start

## 查看集群状态
gcadmin

我们可以配置一个开机自启:

## 在所有节点以 root 用户执行以下命令配置开机自启
cat<<-EOF>>/etc/rc.local
su - gbase <<-SG
gcware_services all start
gcluster_services all start
SG
EOF

## 授予可执行权限
chmod +x /etc/rc.local

重启主机后,检查集群状态:

[gbase@gbase8a01 ~]$ gcadmin
CLUSTER STATE:         ACTIVE
VIRTUAL CLUSTER MODE:  NORMAL

====================================
| GBASE GCWARE CLUSTER INFORMATION |
====================================
| NodeName |  IpAddress   | gcware |
------------------------------------
| gcware1  | 192.168.6.72 |  OPEN  |
------------------------------------
| gcware2  | 192.168.6.73 |  OPEN  |
------------------------------------
| gcware3  | 192.168.6.74 |  OPEN  |
------------------------------------
======================================================
|       GBASE COORDINATOR CLUSTER INFORMATION        |
======================================================
|   NodeName   |  IpAddress   | gcluster | DataState |
------------------------------------------------------
| coordinator1 | 192.168.6.72 |   OPEN   |     0     |
------------------------------------------------------
| coordinator2 | 192.168.6.73 |   OPEN   |     0     |
------------------------------------------------------
| coordinator3 | 192.168.6.74 |   OPEN   |     0     |
------------------------------------------------------
=========================================================================================================
|                                    GBASE DATA CLUSTER INFORMATION                                     |
=========================================================================================================
| NodeName |                IpAddress                 | DistributionId | gnode | syncserver | DataState |
---------------------------------------------------------------------------------------------------------
|  node1   |               192.168.6.73               |       1        | OPEN  |    OPEN    |     0     |
---------------------------------------------------------------------------------------------------------
|  node2   |               192.168.6.72               |       1        | OPEN  |    OPEN    |     0     |
---------------------------------------------------------------------------------------------------------
|  node3   |               192.168.6.74               |       1        | OPEN  |    OPEN    |     0     |
---------------------------------------------------------------------------------------------------------

可以看到,集群已经成功启动。

写在最后

如果有遗漏或者不足的地方,欢迎评论区补充或者投稿,感谢阅读!

往期精彩文章

达梦数据库安装最详细教程
一招教你学会达梦数据库的免密登录
一文讲透达梦数据库的大小写敏感
效率翻倍!达梦数据库 disql 使用技巧全攻略
达梦数据库参数配置与一键优化指南
达梦 AWR 报告快速上手指南
金仓数据库 KingbaseES V9 单机安装指南
KingbaseES KSQL 免密登录的几种方式
KingbaseES 控制文件冗余与恢复秘籍
南大通用 GBASE 8s V8.8 数据库最全安装指南
GBase 8s GDCA 认证课后练习题大全(题库)
GBase 8s 数据库巡检报告及一键巡检脚本
YashanDB 一键生成 AWR 报告
YashanDB 数据库安装部署


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lucifer三思而后行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值