作者 | JiekeXu

来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)

如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA)

大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看国产数据库|GBase 8c 分布式部署那点事儿,欢迎点击上方蓝字“JiekeXu DBA之路”关注我的公众号,标星或置顶,更多干货第一时间到达!

目  录    前 言    GBase 8c 安装与卸载        安装流程        其他安装检查项        创建用户和配置 sudoer        配置互信        配置 NTP 时间同步        安装部署            下载安装包            规划集群拓扑            编辑 yml 文件            安装数据库            连接数据库        卸载数据库        安装中遇到的问题            问题一            问题二            问题三            问题四    参考链接  

      

前  言

南大通用 GBase 8c 是基于 openGauss 3.0 构建的一款多模多态的分布式数据库,支持行存、列存、内存等多种存储模式和单机、主备与分布式等多种部署形态。GBase 8c 具备高性能、高可用、弹性伸缩、高安全性等特性,可以部署在物理机、虚拟机、容器、私有云和公有云, 为关键行业核心系统、互联网业务系统和政企业务系统提供安全、稳定、可靠的数据存储和管理服务。

这里的多 模 多 态是指 GBase 8c 支持行存、列存、内存三种储 模式; 支持单机、主备与分布式三种部署形态,下图是 GBase 8c 的一个架构简图。

南大通用目前主推的数据库产品有如下四款:

分布式逻辑数据仓库 GBase 8a基于共享存储的数据库集群 GBase 8s多模多态分布式数据库 GBase 8c云原生数据仓库 GCDW

很多朋友对 8a、8c、8s 都不太了解,也很容易搞混记不住,我这里按照自己的理解简单介绍下,8a 或者说 GBase 8a MPP Cluster 是国内首款支持融合数据处理的分布式关系型数据库集群产品,适用于数仓分析型业务;8c 这款是基于 openGauss 3.0 开发的多模多态的分布式数据库,支持行存、列存、内存等多种存储模式和单机、主备式、分布式等多种部署形态;8s 是早年间通过购买 informix 源码自主研发的、成熟稳定的基于共享存储的数据库集群;GCDW 是南大通用云数据仓库 GBase Cloud Data Warehouse(简称 GCDW)是一款自主研发的基于列存储的海量分布式大规模并行处理的多实例弹性云数据仓库,GCDW 既支持本地部署也支持云上部署,采用存算分离架构,具体不知道和 GBase 8a MPP Cluster 有啥区别。

GBase 8c 安装与卸载

在安装之前,先回顾下图 GBase 8c 分布式架构下的几个名词及功能,然后进行安装。

安装流程

下图列出了安装的整体流程,看起来还是比较简单的。

下面三图列出了安装所需环境配置及所需 rpm 包以及关闭防火墙等准备工作。

下面两图是我的三台虚拟机配置及磁盘大小,可以看出三台机器为 CentOS7.6,内存分别为 4g 6g 6g,计划安装的文件系统为 /home 大小为 10g 左右。我的三台主机 IP 如下:

############## GBase 8c HOST IP ####################

192.168.32.31 JiekeXu

192.168.32.32 test19crac1

192.168.32.33 test19crac2

由于个人资源限制,这里借用之前安装过 19c RAC 和前面一篇文章安装过 GBase 8s 的机器来安装分布式 GBase 8c.

如上图所示,由于三台主机内存较小,没有到达 8G 以上,Swap 也不够 8G,这里我们先对 Swap 进行扩容。我这里对各台机器再加 5G Swap,具体步骤:

① 创建 5G 的 Swap 文件

# dd if=/dev/zero of=/etc/swapfile bs=10M count=512

② 制作为 Swap 文件

# mkswap /etc/swapfile

③ 令 Swap 文件生效

# swapon /etc/swapfile

④ 查看当前SWAP

# swapon -s

Filename Type Size Used Priority

/dev/dm-1 partition 4063228 1288 -2

/etc/swapfile file 5242876 0 -3

⑤ 自动挂载

编辑/etc/fstab,将以下行追加到文件末尾

/etc/swapfile swap swap defaults 0 0

# vi /etc/fstab

/dev/mapper/centos_opengauss-root / xfs defaults 0 0

/dev/mapper/centos_opengauss-app /app xfs defaults 0 0

UUID=0f53d172-81af-4100-b623-0957ed6ed459 /boot xfs defaults 0 0

/dev/mapper/centos_opengauss-home /home xfs defaults 0 0

/dev/mapper/centos_opengauss-swap swap swap defaults 0 0

/etc/swapfile swap swap defaults 0 0

/dev/cdrom /mnt/contos iso9660 defaults 0 0 0 0

⑥ 查看创建好的 SWAP,已经增长了 5G

[root@JiekeXu ~]# free -m

total used free shared buff/cache available

Mem: 3771 349 2676 20 744 2754

Swap:          9087          0        9087

其他安装检查项

需要在三台机器上使用 root 账号挨个检查。

(1)、防火墙及 SELINUX 检查

查看防火墙状态:systemctl status firewalld需手动关闭防火墙:systemctl stop firewalld并禁止开机自启动:systemctl disable firewalld查看 SELINUX 状态:sestatus• 若显示为 disabled,说明 SELINUX 已被禁用,无需操作。

(2)、检查各主机 hostname 配置 /etc/hosts,三台主机名不能重名,否则可能导致安装失败。

#cat /etc/hosts 如下:

##############GBase 8c IP ##############

192.168.32.31 JiekeXu

192.168.32.32 test19crac1

192.168.32.33 test19crac2

(3)、检查 bison、flex、patch、bzip2 依赖是否安装rpm -q bison flex patch bzip2在所有服务器上, 以 root 用户身份执行。• 若显示的依赖版本信息在软件依赖配置要求中,则无需操作。

[root@JiekeXu ~]# rpm -q bison flex libaio-devel lsb_release patch ncurse-devel bzip2

bison-3.0.4-2.el7.x86_64

flex-2.5.37-6.el7.x86_64

patch-2.7.1-10.el7_5.x86_64

bzip2-1.0.6-13.el7.x86_64

• 若未安装依赖包,需要配置 yum 源,执行 yum install -y name 命令安装相应依赖包。

(4)、(虚拟机环境)检查是否支持rdtscp指令集:cat /proc/cpuinfo | grep rdtscp• 显示带有 “rdtscp” 以下信息,表示支持rdtscp指令集。

• 若不支持,请参考对应 CPU 型号官网资料,安装 rdtscp 指令集。

创建用户和配置 sudoer

如果服务器上已存在 gbase 用户, 检查密码是否能正常登录, 检查其是否具有 sudo 权限和安装目录权限。若全部具备,可忽略本章节步骤。如不具备,请参阅以下相应操作进行修改。

(1) 创建用户组和用户

在所有节点服务器上创建 gbase 用户组和用户。命令如下:

# groupadd gbase

# useradd -m -d /home/gbase gbase -g gbase

# passwd gbase #回车并设置密码,输入两次密码,这里演示为 gbase

(2) 添加普通用户至 sudoer 列表

默认情况下, 普通用户不在 sudoer 列表中。需要通过 root 用户手动将账户添加到 sudoer 列表中, 普通用户才能执行 sudo 命令。

root 执行 visudo 命令, 打开配置文件,在下图 root ALL 的下面添加如下一行内容:

gbase ALL=(ALL) NOPASSWD:ALL

(3)检查 sudo 权限

配置完 sudoer 后, 切换为 gbase 用户, 执行后续环境设置、安装部署操作。数据库环境设置操作无需 root 权限。例如执行如下切换到 root 用户或者查看防火墙命令不需要输入 root 密码则配置成功。

[gbase@JiekeXu ~]$ sudo su - root

[gbase@JiekeXu ~]$ sudo systemctl status firewalld.service

配置互信

配置三台主机 gbase 用户 ssh 互信

(1) 切换到 gbase 用户下

[root@JiekeXu ~]# su - gbase

(2) 创建秘钥目录和必要的授权

[gbase@JiekeXu ~]$ mkdir ~/.ssh

[gbase@JiekeXu ~]$ chmod 700 ~/.ssh

(3) 生成秘钥文件(连续回车即可)

[gbase@JiekeXu ~]$ ssh-keygen -t rsa

(4) 将公钥文件上传至其他节点即可实现免密登录

此操作需输入 yes 和 gbase 用户的密码,所有节点执行如下 copy 命令。

$ ssh-copy-id gbase@192.168.32.31

$ ssh-copy-id gbase@192.168.32.32

$ ssh-copy-id gbase@192.168.32.33

然后检查 authorized_keys 文件可查看包含主机名的三行记录。

[gbase@JiekeXu ~]$ cat ~/.ssh/authorized_keys

(5) 通过 ssh 命令验证是否已实现互信免密:ssh gbase@hostip

for h in jiekexu test19crac1 test19crac2;do

ssh -l gbase -o StrictHostKeyChecking=no $h date;

done

不需要输入密码即可登录,表明配置互信成功。

配置 ssh 服务加速 CRT 连接

--配置LoginGraceTime参数为0, 将timeout wait设置为无限制

cp /etc/ssh/sshd_config /etc/ssh/sshd_config_`date +"%Y%m%d_%H%M%S"` && sed -i '/#LoginGraceTime 2m/ s/#LoginGraceTime 2m/LoginGraceTime 0/' /etc/ssh/sshd_config && grep LoginGraceTime /etc/ssh/sshd_config

--加快SSH登陆速度,禁用DNS

cp /etc/ssh/sshd_config /etc/ssh/sshd_config_`date +"%Y%m%d_%H%M%S"` && sed -i '/#UseDNS yes/ s/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config && grep UseDNS /etc/ssh/sshd_config

配置 NTP 时间同步

(1) 检查所有服务器上 NTP 服务的状态sudo systemctl status ntpd.service

如果没有启动 ntp 服务,需要 start 启动 sudo systemctl start ntpd.service 但是如果没有安装 ntp 服务,则需要配置 yum 源,安装 ntp 服务。

[gbase@JiekeXu etc]$ sudo service ntpd start

Redirecting to /bin/systemctl start ntpd.service

Failed to start ntpd.service: Unit not found.

[root@JiekeXu yum.repos.d]# yum install ntp -y

(2) 配置 NTP 服务

cat /etc/hosts

##############GBase 8c IP ##############

192.168.32.31 JiekeXu

192.168.32.32 test19crac1

192.168.32.33 test19crac2

#####################################

在集群所有服务器上, 以 gbase 用户身份执行。人为选取 NTP 主节点,通常是 GTM 主节点。在所有节点上编辑配置文件:vim /etc/ntp.conf,并“:wq”保存退出。

NTP 主节点:设置127.127.1.0(本地时钟)NTP 从节点:设置主节点 IP

systemctl enable ntpd ----设置开机自启动

其他两节点,写入如下内容:

节点二

driftfile /var/lib/ntp/drift

restrict default nomodify notrap nopeer noquery

restrict 192.168.32.32 nomodify notrap nopeer noquery ##本机 IP

restrict 127.0.0.1

restrict ::1

restrict 192.168.32.255 mask 255.255.255.0 nomodify notrap

server 192.168.32.31

Fudge 192.168.32.31 stratum 10

节点三

driftfile /var/lib/ntp/drift

restrict default nomodify notrap nopeer noquery

restrict 192.168.32.33 nomodify notrap nopeer noquery

restrict 127.0.0.1

restrict ::1

restrict 192.168.32.255 mask 255.255.255.0 nomodify notrap

server 192.168.32.31

Fudge 192.168.32.31 stratum 10

ntp.conf 文件保存退出后,启动 ntp 服务并设置开机自启动。

$ sudo service ntpd start # 启动NTP服务

$ sudo chkconfig ntpd on # 设置 NTP 服务开机自启

注意: 某些虚拟机环境下无法配置 NTP 开机自启动, 需要每次重启后进行手工启动。 时间同步会影响数据库集群部署及一致性操作, 须提前配置生效。

(3)配置完毕后, 在各节点执行以下命令 ntpstat , 查看 NTP 服务是否连通。NTP 主节点应返回:

[gbase@JiekeXu ~]$ ntpstat

synchronised to local net at stratum 6

time correct to within 12 ms

polling server every 64 s

另外节点返回:

[gbase@test19crac1 ~]$ ntpstat

synchronised to NTP server (192.168.32.31) at stratum 7

time correct to within 30 ms

polling server every 128 s

节点三返回:

[gbase@test19crac2 ~]$ ntpstat

unsynchronised

time server re-starting

polling server every 8 s

注意: NTP 服务器配置完毕后, 需要等待 5~20 分钟才能完成时间同步, 如果在配置后提示unsynchronised time server re-starting polling server every 8 s 或 unsynchronised polling server every 8 s 均属正常,等待一段时间再次执行 ntpstat 命令查看即可。

安装部署

下载安装包

安装包下载需要简单注册账号,使用手机号注册即可。

https://www.gbase.cn/download/gbase-8c?category=INSTALL_PACKAGE

然后我们便可以下载到 GBase8cV5_S3.0.0_分布式版_x86_64.zip 这个安装包,接下来我们使用 xshell 等的 sftp 功能上传安装包到服务器 /home/gbase/gbase_package 这个目录。

以下流程操作仅在部署机(节点一)进行。

在部署机上创建 GBase 8c 数据库的安装目录。配置文件中 pkg_path 参数值需与安装目录保持一致。建议设置为 /home/gbase/gbase_package,即 yml 文件中 pkg_path 参数默认值(PS:官方建议直接安装到默认 gbase 家目录了,但是如果 /home 目录作为单独的文件系统还说的过去,如果没有单独的文件系统,相当于直接安装到根目录,如果出现磁盘空间满时则会影响整个系统不可用,为了减少不必要的麻烦,最佳实践建议可将 /home 做为单独的文件系统或者 /data 做为单独的文件系统来安装 gbase)。

例如,数据库安装目录为 /home/gbase/gbase_package, 则具体操作如下:

[gbase@JiekeXu ~]$ mkdir -p /home/gbase/gbase_package

[gbase@JiekeXu gbase_package]$ unzip GBase8cV5_S3.0.0_分布式版_x86_64.zip

Archive: GBase8cV5_S3.0.0_分布式版_x86_64.zip

extracting: GBase8cV5_S3.0.0B78_centos7.8_x86_64.tar.gz

解压后 GBase8cV5_S3.0.0B78_centos7.8_x86_64.tar.gz 才是我们需要的解压包,我们再次解压此文件便得到 GBase8cV5_S3.0.0B78_CentOS_x86_64_om.tar.gz 文件,我们还需要解压 om 结尾的文件。

[gbase@JiekeXu gbase_package]$ tar -zxvf GBase8cV5_S3.0.0B78_centos7.8_x86_64.tar.gz

GBase8cV5_S3.0.0B78_CentOS_x86_64_om.sha256

GBase8cV5_S3.0.0B78_CentOS_x86_64_om.tar.gz

GBase8cV5_S3.0.0B78_CentOS_x86_64_pgpool.tar.gz

GBase8cV5_S3.0.0B78_CentOS_x86_64.sha256

GBase8cV5_S3.0.0B78_CentOS_x86_64.tar.bz2

[gbase@JiekeXu gbase_package]$ ll

total 786076

-rw-rw-r-- 1 gbase gbase 267810471 Mar 6 18:13 GBase8cV5_S3.0.0B78_centos7.8_x86_64.tar.gz

-rw-rw-r-- 1 gbase gbase 65 Mar 6 18:13 GBase8cV5_S3.0.0B78_CentOS_x86_64_om.sha256

-rw-rw-r-- 1 gbase gbase 103810486 Mar 6 18:13 GBase8cV5_S3.0.0B78_CentOS_x86_64_om.tar.gz

-rw-rw-r-- 1 gbase gbase 1035963 Mar 6 18:12 GBase8cV5_S3.0.0B78_CentOS_x86_64_pgpool.tar.gz

-rw-rw-r-- 1 gbase gbase 65 Mar 6 18:12 GBase8cV5_S3.0.0B78_CentOS_x86_64.sha256

-rw-rw-r-- 1 gbase gbase 164458080 Mar 6 18:12 GBase8cV5_S3.0.0B78_CentOS_x86_64.tar.bz2

-rw-r--r-- 1 gbase gbase 267810691 Jun 11 19:05 GBase8cV5_S3.0.0_分布式版_x86_64.zip

[gbase@JiekeXu gbase_package]$ tar -zxvf GBase8cV5_S3.0.0B78_CentOS_x86_64_om.tar.gz

[gbase@JiekeXu gbase_package]$ tar -zxvf GBase8cV5_S3.0.0B78_CentOS_x86_64_om.tar.gz

注意:解压后,不要删掉原有的安装包文件及一级解压后的文件,不能自行修改安装包名称。否则会影响安装时文件和版本号的校验,可能导致安装失败或运维命令丢失等问题。

安装过程中需要熟悉的文件:gbase.yml:安装配置文件模板,以数据库名.yml 结尾。script:工具库,包括 gha_ctl、gs_check、gs_backup 等工具。

规划集群拓扑

按照官方文档安装拓扑建议,cn、gtm、dn 都是具有主备模式,但当我的内存不管是 6GB 还是升级到 8GB 的时候,安装均会报错,尝试了几次均失败,索性这里就先按照 GDCA 课程中讲解演示一样,节点数减少一些来进行安装。

简化部署集群规划拓扑,仅个人学习版。

编辑 yml 文件

用户需要根据实际情况,修改配置文件名和其中节点参数信息。不需要使用的参数,可直接删除或使用#符号注释掉。下面简单说明下 yml 文件配置示例:

例如,安装目录为 /home/gbase/gbase_package/,将模板文件复制到 owner 为 gbase 用户的 /home/gbase 目录下,并编辑 gbase.yml 配置文件:

cp /home/gbase/gbase_package/gbase.yml /home/gbase/

vim gbase.yml

gha_server:

- gha_server1:

host: 192.168.32.31

port: 20001

dcs:

- host: 192.168.32.31

port: 2379

- host: 192.168.32.32

port: 2379

- host: 192.168.32.33

port: 2379

gtm:

- gtm1:

host: 192.168.32.31

agent_host: 192.168.32.31

role: primary

port: 6666

agent_port: 8001

work_dir: /home/gbase/data/gtm/gtm1

coordinator:

- cn1:

host: 192.168.32.31

agent_host: 192.168.32.31

role: primary

port: 5432

agent_port: 8003

work_dir: /home/gbase/data/coord/cn1

datanode:

- dn1:

- dn1_1:

host: 192.168.32.32

agent_host: 192.168.32.32

role: primary

port: 15432

agent_port: 8005

work_dir: /home/gbase/data/dn1/dn1_1

- dn2:

- dn2_1:

host: 192.168.32.33

agent_host: 192.168.32.33

role: primary

port: 20010

agent_port: 8007

work_dir: /home/gbase/data/dn2/dn2_1

# numa:

# cpu_node_bind: 0,1

# mem_node_bind: 0,1

env:

# cluster_type allowed values: multiple-nodes, single-inst, default is multiple-nodes

cluster_type: multiple-nodes

pkg_path: /home/gbase/gbase_package

prefix: /home/gbase/gbase_db

version: V5_S3.0.0B78

user: gbase

port: 22

# constant:

# virtual_ip: 100.0.1.254/24

其中, 必选参数说明如下: host 参数:指定此节点由数据面节点( gtm、 cn、 dn) 访问连接的 IP 地址。 agent_host 参数:指定此节点由控制面节点( gha_server、 dcs) 访问连接的 IP 地址。可与 host 参数相同, 表示数据面和控制面均通过同一 IP 地址访问连接此节点。注意:当主机为双网卡时, 建议控制面设置在千兆网卡, 数据面设置在万兆网卡, 以避免大流量数据影响高可用报文的实时性。 role 参数:集群节点角色类型。可选值为 primary 或 standby。在 gtm、coordinator、datanode节点参数中,为必选字段。 port 参数:集群节点连接端口号。 agent_port 参数:高可用端口号。 syncMode 参数:仅 CN 为只读( standby) 时, 需设置此项。可选值为 sync、 async。其中 sync( 同步) 表示只读 CN 在同步备机进行读操作;async 表示只读 CN 在异步备机进行读操作。 work_dir 参数:集群节点数据存放目录。 cluster_type 参数:指定集群的类型。部署分布式集群时, 指定参数为 multiple-nodes;部署主备式集群时, 指定参数为 single-inst。 pkg_path 参数:指定数据库安装包的存放路径。 prefix 参数:指定运行目录路径。安装时后台自动扫描该目录是否已存在, 若不存在,则自动创建;若已存在, 请注意需确保 owner 为 gbase 用户。 version 参数:指定安装包版本。格式为 V5_S3.0.0BXX,XX 为具体版本号, 可根据安装包名称相应修改。如该参数配置错误,将找不到安装包而导致安装失败。

注意:可能受资源限制等因素影响, 需重复使用同一节点, 保证其仅承担一个高可用组的主节点角色。且避免端口复用而报错,建议在安装前根据集群拓扑先检查端口冲突 netstat -antp| grep 5432。

安装数据库

语法格式

完成两层安装包解压后,会在安装目录下生成 script 子目录。进入此目录执行 gha_ctl 命令安装 GBase 8c 数据库。语法格式为:

gha_ctl install <-c cluster> <-p confpath>

其中参数说明: -c 参数:指定数据库名称,为可选字段。缺省默认值 gbase。 -p 参数:指定配置文件保存路径,为可选字段。缺省默认值 /tmp。

注意:集群名需与配置文件名保持一致。安装完成后,不要删除 gha_ctl 命令文件所在的 script 目录, 否则将导致运维命令丢失。

安装数据库时环境变量尚未配置, 需进入 script 目录执行 gha_ctl 命令。安装成功后,可在任意目录下以 gbase 用户执行 gha_ctl 命令。

示例 部署命令如下:

[gbase@JiekeXu gbase_package]$ cd /home/gbase/gbase_package/script/

[gbase@gbase8c script]$ ./gha_ctl install -p /home/gbase/ -c gbase

由于这里我按照官方文档给的示例拓扑安装,等待许久的结果是报错,在一大堆报错中有如下信息:

WARNING: Failed to initialize the memory protect for g_instance.attr.attr_storage.cstore_buffers (1024 Mbytes) or shared memory (3556 Mbytes) is larger

FATAL: could not create shared memory segment: Invalid argument

DETAIL: Failed system call was shmget(key=6666001, size=3729021888, 03600).

2023-06-25 23:38:25.922 64985f71.1 [unknown] 140668180328896 [unknown] 0 gtm 42809  0 [BACKEND] HINT:  This error usually means that openGauss's request for a shared memory segment exceeded your kernel's SHMMAX parameter.  You can either reduce the request size or reconfigure the kernel with larger SHMMAX.  To reduce the request size (currently 3729021888 bytes), reduce openGauss's shared memory usage, perhaps by reducing shared_buffers.If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.The openGauss documentation contains more information about shared memory configuration.

翻译为中文:这个错误通常意味着 openGauss 对共享内存段的请求超过了内核的 SHMMAX 参数。您可以减少请求大小,或者用更大的SHMMAX 重新配置内核。要减少请求大小(目前为 3729021888 字节),可以通过减少 shared_buffers 来减少openGauss 的共享内存使用。如果请求大小已经很小,则可能小于内核的 SHMMIN 参数,在这种情况下,需要提高请求大小或重新配置SHMMIN。opengaus 文档包含有关共享内存配置的更多信息。

注意:使用 gha_ctl install 命令安装 GBase 8c 集群时,命令执行失败,可查看返回的 json 格式错误信息。如果这个错误信息简略不易看懂,可在/tmp/gha_ctl/ gha_ctl.log 下查看更加详细报错信息:

FATAL: could not create shared memory segment: Invalid argument

DETAIL:  Failed system call was shmget(key=6666001, size=3729021888, 03600).

查看日志已经安装成功了,就是在启动过程中失败了,感觉是系统内核参数的问题,信号量不足无法初始化,所以我去修改系统内核参数值。

sudo vim /etc/sysctl.conf

kernel.shmall = 2097152

kernel.shmmax = 6068117503

kernel.shmmni = 4096

#kernel.sem = 40960 2048000 40960 20480

kernel.sem = 40960 838860800 40960 20480

然后顺便将节点一内存调整为 6GB 保持和节点二、三 大小一致后,启动仍然还是失败。查看 sysctl.conf 发现 kernel.sem 变成了我上面注释掉的值,看来是安装过程中会自动设置这个参数。

WARNING: Failed to initialize the memory protect for g_instance.attr.attr_storage.cstore_buffers (1024 Mbytes) or shared memory (4495 Mbytes) is larger.

FATAL: could not create shared memory segment: No space left on device

DETAIL: Failed system call was shmget(key=15432001, size=4713553920, 03600).

HINT:  This error does *not* mean that you have run out of disk space.  It occurs either if all available shared memory IDs have been taken, in which case you need to raise the SHMMNI parameter in your kernel, or because the system's overall limit for shared memory has been reached.  If you cannot increase the shared memory limit, reduce openGauss's shared memory request (currently 4713553920 bytes), perhaps by reducing shared_buffers.

直接启动数据库

./gha_ctl start all -l http://192.168.32.31:2379

然后我便把三台机器的内存又从 6G 加到 8G,但是使用官方推荐的拓扑结构重新安装还是会报错,执行启动命令会显示如下的结果,有的节点是

stopped 状态,两个 CN 节点也是 stopped 的状态,没法直接使用,想查看日志也没有找到 CN 和 DN2 的日志,只有启动了的

GTM 和 DN1 有日志。熬夜整了两晚实在没办法了,可能的原因一是我的文件系统空间不足只有 10G 大小,无法启动多个节点,二是

postgresql.conf 文件中对于 shared_buffers 的配置过大了,但由于 CN、DN、GTM

配置文件下都有,一时间不知道该改哪些配置文件,改为多少,由于时间太晚所以就放弃了。第三晚上又想到了 GDCA

课程中的安装示例,好像集群拓扑有存在单点的架构,故我这里将 gbase.yml 调整为上面一小节中的架构,CN 和 GTM 均为单点,8GB

的内存 10G 大小的磁盘很快就按照成功了。

[gbase@JiekeXu script]$ ./gha_ctl start all -l http://192.168.32.31:2379

{

"ret":80000116,

"msg":"Rpc request failed:Rpc request failed:Start pg failed"

}

[gbase@JiekeXu script]$ ./gha_ctl monitor all -l http://192.168.32.31:2379 -H

+----+-------------+---------------+-------+---------+--------+

| No | name | host | port | state | leader |

+----+-------------+---------------+-------+---------+--------+

| 0 | gha_server1 | 192.168.32.31 | 20001 | running | True |

+----+-------------+---------------+-------+---------+--------+

+----+------+---------------+------+---------------------------+---------+---------+

| No | name | host | port | work_dir | state | role |

+----+------+---------------+------+---------------------------+---------+---------+

| 0 | gtm1 | 192.168.32.31 | 6666 | /home/gbase/data/gtm/gtm1 | running | primary |

| 1 | gtm2 | 192.168.32.32 | 6666 | /home/gbase/data/gtm/gtm2 | running | standby |

+----+------+---------------+------+---------------------------+---------+---------+

+----+------+---------------+------+----------------------------+---------+---------+

| No | name | host | port | work_dir | state | role |

+----+------+---------------+------+----------------------------+---------+---------+

| 0 | cn1 | 192.168.32.32 | 5432 | /home/gbase/data/coord/cn1 | stopped | primary |

| 1 | cn2 | 192.168.32.33 | 5432 | /home/gbase/data/coord/cn2 | stopped | standby |

+----+------+---------------+------+----------------------------+---------+---------+

+----+-------+-------+---------------+-------+----------------------------+---------+---------+

| No | group | name | host | port | work_dir | state | role |

+----+-------+-------+---------------+-------+----------------------------+---------+---------+

| 0 | dn1 | dn1_1 | 192.168.32.32 | 15432 | /home/gbase/data/dn1/dn1_1 | running | primary |

| 1 | dn1 | dn1_2 | 192.168.32.33 | 15433 | /home/gbase/data/dn1/dn1_2 | running | standby |

| 2 | dn1 | dn1_3 | 192.168.32.31 | 15433 | /home/gbase/data/dn1/dn1_3 | running | standby |

| 3 | dn2 | dn2_1 | 192.168.32.33 | 20010 | /home/gbase/data/dn2/dn2_1 | running | primary |

| 4 | dn2 | dn2_2 | 192.168.32.31 | 20010 | /home/gbase/data/dn2/dn2_2 | stopped | standby |

| 5 | dn2 | dn2_3 | 192.168.32.32 | 20010 | /home/gbase/data/dn2/dn2_3 | stopped | standby |

+----+-------+-------+---------------+-------+----------------------------+---------+---------+

+----+---------------------------+--------+---------+----------+

| No | url | name | state | isLeader |

+----+---------------------------+--------+---------+----------+

| 0 | http://192.168.32.33:2379 | node_2 | healthy | True |

| 1 | http://192.168.32.31:2379 | node_0 | healthy | False |

| 2 | http://192.168.32.32:2379 | node_1 | healthy | False |

+----+---------------------------+--------+---------+----------+

[gbase@JiekeXu ~]$ find ./ -name postgresql.conf

./data/gtm/gtm1/postgresql.conf

./data/dn1/dn1_3/postgresql.conf

./data/dn2/dn2_2/postgresql.conf

./data/coord/cn1/postgresql.conf

很快返回部署成功的信息

[gbase@JiekeXu ~]$ cd /home/gbase/gbase_package/script/

[gbase@JiekeXu script]$ ./gha_ctl install -p /home/gbase/ -c gbase

{

"ret":0,

"msg":"Success"

}

[gbase@JiekeXu script]$ ./gha_ctl monitor all -l http://192.168.32.31:2379 -H

[gbase@JiekeXu ~]$ gha_ctl monitor all -l http://192.168.32.31:2379 -H

+----+-------------+---------------+-------+---------+--------+

| No | name | host | port | state | leader |

+----+-------------+---------------+-------+---------+--------+

| 0 | gha_server1 | 192.168.32.31 | 20001 | running | True |

+----+-------------+---------------+-------+---------+--------+

+----+------+---------------+------+---------------------------+---------+---------+

| No | name | host | port | work_dir | state | role |

+----+------+---------------+------+---------------------------+---------+---------+

| 0 | gtm1 | 192.168.32.31 | 6666 | /home/gbase/data/gtm/gtm1 | running | primary |

+----+------+---------------+------+---------------------------+---------+---------+

+----+------+---------------+------+----------------------------+---------+---------+

| No | name | host | port | work_dir | state | role |

+----+------+---------------+------+----------------------------+---------+---------+

| 0 | cn1 | 192.168.32.31 | 5432 | /home/gbase/data/coord/cn1 | running | primary |

+----+------+---------------+------+----------------------------+---------+---------+

+----+-------+-------+---------------+-------+----------------------------+---------+---------+

| No | group | name | host | port | work_dir | state | role |

+----+-------+-------+---------------+-------+----------------------------+---------+---------+

| 0 | dn1 | dn1_1 | 192.168.32.32 | 15432 | /home/gbase/data/dn1/dn1_1 | running | primary |

| 1 | dn2 | dn2_1 | 192.168.32.33 | 20010 | /home/gbase/data/dn2/dn2_1 | running | primary |

+----+-------+-------+---------------+-------+----------------------------+---------+---------+

+----+---------------------------+--------+---------+----------+

| No | url | name | state | isLeader |

+----+---------------------------+--------+---------+----------+

| 0 | http://192.168.32.33:2379 | node_2 | healthy | False |

| 1 | http://192.168.32.31:2379 | node_0 | healthy | False |

| 2 | http://192.168.32.32:2379 | node_1 | healthy | True |

+----+---------------------------+--------+---------+----------+

查看数据库 listen_addresses 配置

[gbase@JiekeXu ~]$ gs_guc check -Z gtm -N all -I all -c "listen_addresses"

The gs_guc run with the following arguments: [gs_guc -Z gtm -N all -I all -c listen_addresses check ].

Total GUC values: 1.

The value of parameter listen_addresses is same on all instances.

listen_addresses='localhost,192.168.32.31'

[gbase@JiekeXu ~]$ gs_guc check -Z coordinator -N all -I all -c "listen_addresses"

The gs_guc run with the following arguments: [gs_guc -Z coordinator -N all -I all -c listen_addresses check ].

Total GUC values: 1.

The value of parameter listen_addresses is same on all instances.

listen_addresses='localhost,192.168.32.31'

[gbase@JiekeXu ~]$ gs_guc check -Z datanode -N all -I all -c "listen_addresses"

The gs_guc run with the following arguments: [gs_guc -Z datanode -N all -I all -c listen_addresses check ].

Total GUC values: 2.

The details for listen_addresses:

[test19crac1] listen_addresses='localhost,192.168.32.32' [/home/gbase/data/dn1/dn1_1/postgresql.conf]

    [test19crac2]  listen_addresses='localhost,192.168.32.33'  [/home/gbase/data/dn2/dn2_1/postgresql.conf]

检查监控数据库状态

gha_ctl monitor all -l http://192.168.32.31:2379 -H

停止数据库

gha_ctl stop all -l http://192.168.32.31:2379

启动数据库

gha_ctl start all -l http://192.168.32.31:2379

连接数据库

使用客户端工具 gsql 连接 GBase 8c 数据库, 建议分布式架构登录读写 CN 节点。我这里则为第一个节点 192.168.32.31,格式为:

gsql -d dbname -p port <-U user_name> <-h hostip>

[gbase@JiekeXu ~]$ gsql -d postgres -p 5432

gsql ((multiple_nodes GBase8cV5 3.0.0B78 build f35d85c7) compiled at 2023-03-06 17:14:54 commit 0 last mr 1247 )

Non-SSL connection (SSL connection is recommended when requiring high-security)

Type "help" for help.

postgres=# \l

List of databases

Name | Owner | Encoding | Collate | Ctype | Access privileges

-----------+-------+----------+---------+-------+-------------------

postgres | gbase | UTF8 | C | C |

template0 | gbase | UTF8 | C | C | =c/gbase +

| | | | | gbase=CTc/gbase

template1 | gbase | UTF8 | C | C | =c/gbase +

| | | | | gbase=CTc/gbase

(3 rows)

postgres=# create user jiekexu sysadmin password jiekexu;

ERROR: Password must be quoted

postgres=# create user jiekexu sysadmin password 'jiekexu';

ERROR: Password must contain at least 8 characters.

postgres=# create user jiekexu sysadmin password 'Jieke_Xu';

CREATE ROLE

postgres=# create database jiekexudb;

CREATE DATABASE

postgres=# \c jiekexudb

Non-SSL connection (SSL connection is recommended when requiring high-security)

You are now connected to database "jiekexudb" as user "gbase".

jiekexudb=# create table jieke(ID int, Name varchar(10));

CREATE TABLE

jiekexudb=# insert into jieke values(1, 'JiekeXu'),(2,'Jieke');

INSERT 0 2

jiekexudb=# select * from jieke;

id | name

----+---------

1 | JiekeXu

2 | Jieke

(2 rows)

远程连接分别在服务器、客户端完成如下配置,然后在客户端执行 gsql 命令。服务端对于 GBase 8c 分布式集群,需在读写 CN 上以 gbase 用户执行如下命令:

gs_guc reload -Z coordinator -N all -I all -h "host all all 0.0.0.0/0 sha256"

gs_guc reload -Z coordinator -N all -I all -c "password_encryption_type=1"

gs_guc reload -Z coordinator -N all -I all -c "listen_addresses = '*'"

重启数据库

停止数据库

gha_ctl stop all -l http://192.168.32.31:2379

启动数据库

gha_ctl start all -l http://192.168.32.31:2379

客户端连接

这样便可以使用可视化客户端连接,支持 PG 的客户端工具均可,官方推荐使用 DBeaver (官网下载地址:https://dbeaver.io/download/)但需要如下图所示导入驱动包,个人感觉不太方便,但好在开源免费,不过我这里推荐使用 Navicat Premium 虽收费但可能更方便一些。

离线导入:点“数据库”->“驱动管理器”,在驱动管理器窗口搜索PostgreSQL,进行如下配置。

卸载数据库

在集群卸载后环境变量自动清除,因此再次执行 gha_ctl 命令需要进入 script 目录。卸载 DCS 工具的具体操作命令为:

集群卸载具体操作命令为:

-c 参数:指定数据库名称,为可选字段。缺省默认值 gbase。-f 参数:表示清理安装目录,为可选字段。缺省保留目录文件夹。

gha_ctl uninstall -c gbase -l http://192.168.32.31:2379

返回操作成功信息:

cd /home/gbase/gbase_package/script

./gha_ctl destroy dcs -l http://192.168.32.31:2379

安装中遇到的问题

问题一

报错端口号已经被使用,需要检查 gbase.yml 文件中配置的 IP 端口号是否出现重复导致冲突,需要再次检查确认配置文件正确;其次使用 netstat 命令检查服务器本身端口是否被占用。

sudo netstat -anltp | grep 15433

问题二

如下所示,提示安装依赖 patch 失败,这个就需要检查提示的各个节点的 patch 包是否有正确安装以及版本是否正确。# rpm -q patch 如果没有安装,需要配置好 yum 源,进行单独安装此软件包。

Yum 安装演示:如下图所示,虚拟机插入光盘镜像,然后配置 yum 源。

临时挂载光盘镜像到 /mnt 目录(重启失效),然后配置 yum 源为 file:///mnt 目录,便可以直接安装 patch 软件包。

问题三

在安装过程中出现这么一堆报错,一时间也找不到报错,所以推荐查看 /tmp/gha_ctl/gha_ctl.log 安装日志。

对于这个报错一时间也没有解决,只是变换了安装拓扑,变相解决了问题。下面是计算内存参数的一个简单 shell。

memTotal=$(grep MemTotal /proc/meminfo | awk '{print $2}')

totalMemory=$((memTotal / 2048))

shmall=$((memTotal / 2))

if [ $shmall -lt 2097152 ]; then

shmall=2097152

fi

shmmax=$((memTotal * 1024 - 1))

if [ "$shmmax" -lt 4294967295 ]; then

shmmax=4294967295

fi

echo $shmall

echo $shmmax

sudo vim /etc/sysctl.conf

kernel.shmall = 2962948

kernel.shmmax = 6068117503

kernel.shmmni = 4096

kernel.sem = 40960 2048000 40960 20480

问题四

安装过程中,报错显示 80000301:Transport endpoint unreach

在其他节点二、节点三的 /etc/resolv.conf 配置文件中注释掉如下内容(红框标注),取消备机 resolv 配置,恢复主备间时延,重新执行安装。

参考资料

https://www.gbase.cn/download/gbase-8c?category=DOCUMENT

《GBase 8c V5_3.0.0_安装部署手册_分布式_V2.5_20230210.pdf》

《GBase 8c V5_ 3.0.0_错误码手册_V1.0_20220621.pdf》

《GBase 8c V5_3.0.0_技术白皮书_V3.1_20221108.pdf》

【GBase 学堂】GDCA 课程第一、二、三节

全文完,希望可以帮到正在阅读的你,如果觉得此文对你有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~

欢迎关注我的公众号【JiekeXu DBA之路】,第一时间一起学习新知识!

————————————————————————————公众号:JiekeXu DBA之路CSDN :https://blog.csdn.net/JiekeXu墨天轮:https://www.modb.pro/u/4347腾讯云:https://cloud.tencent.com/developer/user/5645107————————————————————————————

分享几个数据库备份脚本

Oracle 表碎片检查及整理方案

OGG|Oracle GoldenGate 基础2022 年公众号历史文章合集整理

Oracle 19c RAC 遇到的几个问题

OGG|Oracle 数据迁移后比对一致性

OGG|Oracle GoldenGate 微服务架构

Oracle 查询表空间使用率超慢问题一则

Oracle 11g升级到19c需要关注的几个问题

国产数据库|TiDB 5.4 单机快速安装初体验

Oracle ADG 备库停启维护流程及增量恢复

Linux 环境搭建 MySQL8.0.28 主从同步环境

推荐链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: