大家好,这里是公众号 DBA学习之路 ,致力于分享数据库领域相关知识。
社群交流 为了给大家提供一些技术交流的平台,目前已成立的技术交流群:
Oracle 数据库交流群
国产数据库交流群
Linux 技术交流群
ChatGPT 4o 免费体验群
需要进群可以添加号主微信:Lucifer-0622 ,备注对应的群名即可。
@TOC
前言 目前很多国产数据库都在适配 Oracle RAC 架构,之前记录过金仓 KES RAC 、崖山 YAC 的部署过程:
1、YashanDB 23.2 YAC 共享集群部署实战:轻松上手! 2、技术干货 | KingbaseES RAC 集群安装指南
本文主要介绍 GBase 8s 共享存储高可用集群(SSC)的安装部署流程。
SSC 集群 上周写过一篇文章:Oracle 替代方案?GBase 8s 集群架构一览 ,详细介绍了 GBase 8s 的几种集群架构,感兴趣的朋友可以前往了解。
在正式安装之前,先简单介绍一下 SSC 集群,以便大家对其有一个清晰的初步概念。
SSC 简介 GBase 8s 共享存储集群 SSC(Shared Storage Cluster) 采用共享磁盘方式实现数据库高可用、高扩展、高性能。也就是说,SSC 集群只存储一份数据,集群中的多个数据库实例同时提供一个服务,有效利用硬件资源,避免数据重复存储。
SSC 通过配置为主节点写,辅节点读的方式,可以有效缓解写冲突,可实现更大的集群规模,在写少读多的应用场景,性能更好。
SSC 集群有以下特性:
高可用性 :节点间关系对等,备节点下线对集群无影响,主节点下线故障自动切换到备节点,切换过程和选主过程由连接管理器(CM)实现;
扩展性 :可以在一定范围内随业务需要而扩展;
高性能 :集群中任何节点都能响应用户请求,能够更高的支持高并发业务,辅节点配置为可写时,自动将写请求路由到主节点执行 。
部署简单 :可以非常容易地配置多个 SSC,支持负载均衡。
应用无感知 。
SSC 原理 SSC 集群状态一致性通过 LSN 同步 + 逻辑日志重放 实现。
原理如下图所示:
简单来说就是以下五个步骤:
SSC 主节点接收业务请求,写逻辑日志。
主节点将逻辑日志中与操作一一对应的 LSN 号发给各个辅节点。
辅节点接收到 LSN 号,从共享存储读取相应逻辑日志到缓冲区。
辅节点对读取到逻辑日志缓冲区的逻辑日志进行重放,从而达到主辅节点数据状态一致,辅节点缓冲区数据的更改并不更新到磁盘。
最后辅节点将 ACK LSN 发送回主节点。
环境准备 本文演示环境为银河麒麟 V10,主机配置为单节点 8G 内存,100G 硬盘,双网卡(物理+心跳):
主机名
服务IP
心跳IP
版本
CPU
内存
系统盘
集群临时空间盘
共享存储盘
ssc01
192.168.6.70
10.10.10.1
银河麒麟 Kylin V10
x86
8G
100G
20G
20G
ssc02
192.168.6.71
10.10.10.2
银河麒麟 Kylin V10
x86
8G
100G
20G
20G
主机配置规划 GBase 8s 共享存储集群支持安装部署在 x86、飞腾、鲲鹏、龙芯等多种平台上,支持的操作系统包括 RedHat6.x、CentOS6.x 等主流 OS,并包括 UOS、麒麟、凝思磐石等国产 OS。
GBase 8s 共享存储集群 SSC 最少 2 个节点,最多 128 节点,各节点关系对等,以下为单节点推荐配置:
GBase 8s 共享集群每台服务器需要配置两个物理 IP(一个服务 IP,一个心跳 IP),网络防火墙开放数据库集群节点之间及应用与数据库节点之间端口 9088、9099、9200、9300 长连接。
生产库建议 :数据库网络要求千兆以上网卡,服务网络应当使用不少于两条物理线路的双网卡绑定,数据库集群要求配置独立于服务器网络的专用心跳网络(可直连),同样使用双网卡绑定。
共享存储规划 共享磁盘集群(SSC)的磁盘共享需要通过存储设备同时挂载到主节点和辅节点来实现。在主节点上进行分区并绑定裸设备后,辅节点需同步主节点的分区信息并完成裸设备的绑定,从而实现磁盘共享。因此,在共享磁盘集群中,主辅节点的磁盘无需格式化文件系统,也无需挂载文件系统。
集群临时空间及 page 空间不能使用裸设备,集群每个节点需单独挂载一块数据盘,用于存储集群临时空间,共享磁盘链接等,大小不小于单个临时空间大小的 2 倍。该盘可以是共享磁盘的一个分区,或使用单独一块磁盘挂载。
安装包下载 GBase 8s SSC 需要在主节点和辅节点上都安装 GBase 8s 数据库,安装包可以直接从 GBase 官网 下载:
Gbase 8s V8.8 x86 的数据库安装介质下载地址: GBase8sV8.8_TL_3.5.1_3X2_x86_64.tar
下载完成后的安装包大概 400 多 M,查看 md5 值:
1 2 3 ╭─lucifer@MacBookPro ~/Downloads/GBase 8s SSC 共享集群 ╰─$ md5sum GBase8sV8.8_TL_3.5.1_3X2_x86_64.tar 97555c974bfe5bb0904ef87c3733be5f GBase8sV8.8_TL_3.5.1_3X2_x86_64.tar
解压之后有以下文件:
1 2 330M GBase8sV8.8_TL_3.5.1_3X2_x86_64.tar 177M clientsdk_3.5.1_3X2_1_x86_64.tar
将解压后的这两个文件上传到所有主机节点上即可。
安装前准备部分很多都可以参考我之前写的单机安装教程:
南大通用 GBASE 8s V8.8 数据库最全安装指南
安装前准备 📢 注意: 本章节的所有操作需要在所有节点上执行,以下将以节点一为例进行演示!
配置 hosts 文件 数据库日志归档和备份文件的命名通常依赖于系统主机名称。若数据库主机的命名尚无明确规范,可参考以下规则进行命名:
数据库服务器名称 :dbhost[xx]
集群心跳服务器名称 :dbhahost[xx]
其中,xx 为两位数字序号,例如:dbhost01、dbhost02,此命名规则有助于提升主机管理的规范性和识别效率。
我的主机名配置如下:
主机名 :ssc01、ssc02
集群心跳名 :sscha01、sscha02
在 hosts 文件中进行配置:
1 2 3 4 5 6 7 [root@ssc01 ~]# cat <<-EOF>>/etc/hosts 192.168.6.70 ssc01 192.168.6.71 ssc02 10.10.10.1 sscha01 10.10.10.2 sscha02 EOF
查看配置后的内容:
1 2 3 4 5 6 7 [root@ssc01 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.6.70 ssc01 192.168.6.71 ssc02 10.10.10.1 sscha01 10.10.10.2 sscha02
主辅节点都需完成上述操作。
优化 DNS 配置 配置系统优先从 /etc/hosts 文件中查找主机名解析,避免因 DNS 查询引起的数据库连接缓慢问题,修改后,系统会按照以下顺序解析主机名。
首先检查 /etc/hosts 文件。
如果未找到匹配项,才会尝试其他解析方式。
修改 /etc/nsswitch.conf 文件优先解析方式:
1 2 3 4 5 6 7 8 9 10 11 [root@ssc01 ~]# grep hosts: /etc/nsswitch.conf hosts: files dns myhostname [root@ssc01 ~]# sed -i "s#^hosts.*#hosts: files#g" /etc/nsswitch.conf [root@ssc01 ~]# grep hosts: /etc/nsswitch.conf hosts: files
通过上述优化,能够有效提高主机名解析效率,减少因网络延迟导致的数据库连接问题。
配置防火墙 为确保数据库服务的正常运行,需要根据实际需求关闭系统防火墙或放开相关端口(如 9088、9099、9200、9300)。这里提供两种可选方案。
1、关闭系统防火墙:
1 2 3 4 5 [root@ssc01 ~]# systemctl stop firewalld [root@ssc01 ~]# systemctl disable firewalld Removed /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
适用场景: 网络环境安全可控,不依赖防火墙规则。
2、放开必要端口
如系统要求不可关闭防火墙,执行以下命令放开相关端口,单机放开 9088,集群放开 9088、9099、9200、9300:
1 2 3 4 5 6 firewall-cmd --permanent --zone=public --add-port=9088/tcp firewall-cmd --permanent --zone=public --add-port=9099/tcp firewall-cmd --permanent --zone=public --add-port=9200/tcp firewall-cmd --permanent --zone=public --add-port=9300/tcp firewall-cmd --reload
适用场景: 防火墙必须启用,需放行数据库相关服务端口。
关闭 SELinux 为防止 SELinux 引发不必要的权限问题或影响服务正常运行,建议将其关闭:
1 2 3 4 5 6 7 8 9 10 [root@ssc01 ~]# setenforce 0 setenforce: SELinux is disabled [root@ssc01 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config [root@ssc01 ~]# cat /etc/selinux/config | grep SELINUX= SELINUX=disabled
永久关闭需要重启主机后生效。
关闭 RemoveIPC 在部分 Linux 7.x 及以上版本中,RemoveIPC 默认配置为 yes。该配置会导致用户注销后其信号量和消息队列被删除,可能引发数据库宕机等问题。
建议关闭 RemoveIPC:
1 2 3 4 5 6 7 [root@ssc01 ~]# sed -i "s/^#RemoveIPC.*/RemoveIPC=no/g" /etc/systemd/logind.conf [root@ssc01 ~]# systemctl daemon-reload [root@ssc01 ~]# systemctl restart systemd-logind
强烈建议在数据库主机上进行此配置,尤其是生产环境中。
创建组和用户 在安装 GBase 8s 数据库前,需提前创建 gbasedbt 用户,并取消密码复杂性要求(如不需要复杂密码)。
修改 PAM 配置文件,取消密码复杂性限制:
1 2 3 [root@ssc01 ~]# sed -i 's/^password\+[[:space:]]\+requisite[[:space:]]\+pam_pwquality.so/#&/g' /etc/pam.d/system-auth [root@ssc01 ~]# sed -i 's/use_authtok$//' /etc/pam.d/system-auth
创建 gbasedbt 用户和组:
1 2 3 4 5 6 7 8 9 10 [root@ssc01 ~]# groupadd gbasedbt -g 500 [root@ssc01 ~]# useradd gbasedbt -u 500 -g gbasedbt -m -d /home/gbasedbt [root@ssc01 ~]# echo "gbasedbt:gbasedbt" | chpasswd [root@ssc01 ~]# cat /etc/passwd | grep gbasedbt gbasedbt:x:500:500::/home/gbasedbt:/bin/bash
在后续共享存储配置时也需要 gbasedbt 用户以及组的授权,所以必须提前创建!
创建安装目录及授权 在安装 GBase 8s 数据库前,需要提前创建相关目录,并正确设置权限,确保 gbasedbt 用户对安装和数据目录具有完全的读写权限。
1 2 3 [root@ssc01 ~]# mkdir -p /opt/gbase /data/gbase [root@ssc01 ~]# chown -R gbasedbt:gbasedbt /opt/gbase /data/gbase
条件允许的话,建议为 /data/gbase 单独挂载磁盘分区,提升数据读写性能。
资源配置 为确保 GBase 8s 数据库能够高效运行,建议调整系统的资源限制参数到推荐值或更高。
修改 /etc/security/limits.conf 文件为 gbasedbt 用户配置 nofile(最大打开文件数)和 nproc(最大进程数):
1 2 3 4 5 6 7 [root@ssc01 ~]# cat <<-EOF>>/etc/security/limits.conf gbasedbt soft nofile 1048576 gbasedbt hard nofile 1048576 gbasedbt soft nproc 1048576 gbasedbt hard nproc 1048576 EOF
在某些系统中,nofile 和 nproc 的限制可能受 Systemd 配置影响。如果发现设置未生效,可按以下步骤调整:
1 2 3 [root@ssc01 ~]# sed -i "s/#DefaultLimitNOFILE.*/DefaultLimitNOFILE=1048576/g" /etc/systemd/system.conf [root@ssc01 ~]# sed -i "s/#DefaultLimitNPROC.*/DefaultLimitNPROC=65536/g" /etc/systemd/system.conf
通过以上优化,可以为数据库运行提供充足的资源保障,从而提升系统稳定性和性能。
安装依赖包 检查系统中是否已安装所需依赖包:
1 2 3 4 5 6 7 8 9 10 11 [root@ssc01 ~]# rpm -q unzip glibc-devel ncurses ncurses-libs libnsl libaio libgcc libstdc++ pam unzip-6.0-48.ky10.x86_64 glibc-devel-2.28-98.p02.ky10.x86_64 ncurses-6.2-4.p01.ky10.x86_64 ncurses-libs-6.2-4.p01.ky10.x86_64 未安装软件包 libnsl libaio-0.3.112-5.p01.ky10.x86_64 libgcc-7.3.0-2020033101.58.p01.ky10.x86_64 libstdc++-7.3.0-2020033101.58.p01.ky10.x86_64 pam-1.5.2-6.p03.se.02.ky10.x86_64
如检查结果显示缺少依赖包(例如 libnsl),需要手工安装依赖包,就需要配置本地软件源,配置 Linux 软件源可以参考为之前写的文章:
⭐️ DBA 必备:Linux 软件源配置全攻略
可通过以下命令安装所需依赖:
1 2 3 [root@ssc01 ~]# yum -y install unzip glibc-devel ncurses ncurses-libs libnsl libaio libgcc libstdc++ pam
手工执行后依然提示 libnsl 包未安装,在麒麟 V10 系统中,libnsl 需要单独下载安装。
libnsl-2.28-98.p02.ky10.x86_64.rpm 下载: https://update.cs2c.com.cn/NS/V10/V10SP3-2403/os/adv/lic/base/x86_64/Packages/libnsl-2.28-98.p02.ky10.x86_64.rpm
下载完成后,使用以下命令安装:
1 2 3 4 5 6 7 [root@ssc01 ~]# rpm -ivh libnsl-2.28-98.p02.ky10.x86_64.rpm 警告:libnsl-2.28-98.p02.ky10.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 7a486d9f: NOKEY Verifying... 准备中... 正在升级/安装... 1:libnsl-2.28-98.p02.ky10
如果未安装 libnsl,后续在 GBase 8s 安装时会出现以下错误:
1 2 libjvm.so preloadLibrary(/tmp/install.dir.155359/Linux/resource/jre/jre/lib/amd64/libjava.so): libnsl.so.1: 无法打开共享对象文件: 没有那个文件或目录 Could not create the Java virtual machine.
因此,务必确保安装 libnsl。
关闭透明大页 建议关闭透明大页,部分操作系统默认开启了透明大页选项,可执行以下命令确认:
1 2 3 [root@ssc01 ~]# 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=never:
1 2 [root@ssc01 ~]# sed -i 's/quiet/quiet transparent_hugepage=never/' /etc/default/grub
通过以下指令检查当前系统的引导类型:
1 2 3 [root@ssc01 ~]# [ -d /sys/firmware/efi ] && echo UEFI || echo BIOS BIOS
两种引导的启动文件路径分别为:
BIOS:/boot/grub2/grub.cfg
UEFI:/boot/efi/EFI/<distro_name>/grub.cfg,distro_name 为系统发行版本名称,例如 ubuntu、fedora、debian 等。
执行 grub2–mkconfig 指令重新配置 grub.cfg:
1 2 3 4 5 6 7 8 9 10 11 [root@ssc01 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-4.19.90-89.11.v2401.ky10.x86_64 Found initrd image: /boot/initramfs-4.19.90-89.11.v2401.ky10.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-3a1c3f06e89644e5b9b560f2ba64fd98 Found initrd image: /boot/initramfs-0-rescue-3a1c3f06e89644e5b9b560f2ba64fd98.img done
需要重启主机生效。
挂载集群临时空间 所有节点都需要挂载集群临时空间,使用 root 用户挂载,以主节点为例:
1 2 3 4 5 6 7 8 9 10 11 12 [root@ssc01 ~]# mkfs.xfs /dev/sdb [root@ssc01 ~]# blkid /dev/sdb /dev/sdb: UUID="dd7f3d82-7d3a-40fc-80da-1a27d5989ea3" BLOCK_SIZE="512" TYPE="xfs" [root@ssc01 ~]# mkdir -p /data [root@ssc01 ~]# echo "UUID=dd7f3d82-7d3a-40fc-80da-1a27d5989ea3 /data xfs defaults 0 0" >>/etc/fstab [root@ssc01 ~]# mount -a [root@ssc01 ~]# mkdir -p /data/gbase [root@ssc01 ~]# chown -R gbasedbt:gbasedbt /data/ [root@ssc01 ~]# df -h | grep /data /dev/sdb 20G 175M 20G 1% /data
主辅节点都需完成上述操作。
挂载共享盘 部署 SSC 集群需要挂载共享盘,挂载共享盘的方式有很多,可以使用虚拟机创建共享盘的方式,也可以通过 iscsi 共享存储作为数据库存储文件系统,可自行选择。
本文使用 Starwind 配置 iscsi 共享盘,可以参考为之前写的文章:
⭐️ 实战篇:使用 StarWind 配置 ISCSI 共享存储
1、Linux 客户端安装 iscsi 软件
1 2 3 4 5 [root@ssc01 ~]# yum install -y iscsi-initiator-utils* [root@ssc01 ~]# systemctl start iscsid.service [root@ssc01 ~]# systemctl enable iscsid.service
2、搜索服务端 iscsi target
1 2 3 4 [root@ssc01 ~]# iscsiadm -m discovery -t st -p 192.168.6.43 192.168.6.43:3260,-1 iqn.2008-08.com.starwindsoftware:lpc-matebook-gbase8s
3、连接服务端 iscsi 共享存储
1 2 3 4 5 [root@ssc01 ~]# iscsiadm -m node -T iqn.2008-08.com.starwindsoftware:lpc-matebook-gbase8s -p 192.168.6.43 -l Logging in to [iface: default, target: iqn.2008-08.com.starwindsoftware:lpc-matebook-gbase8s, portal: 192.168.6.43,3260] Login to [iface: default, target: iqn.2008-08.com.starwindsoftware:lpc-matebook-gbase8s, portal: 192.168.6.43,3260] successful.
4、配置开机自动挂载
1 2 [root@ssc01 ~]# iscsiadm -m node -T iqn.2008-08.com.starwindsoftware:lpc-matebook-gbase8s -p 192.168.6.43 --op update -n node.startup -v automatic
5、查看挂载成功的共享盘
1 2 3 4 5 6 7 8 9 10 11 [root@ssc01 ~]# 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 20G 0 disk sdc 8:32 0 50G 0 disk sr0 11:0 1 4.4G 0 rom /mnt
在挂载共享盘成功之后,我们已经验证主辅节点都已经显示 sdc 盘。接下来我们要对这个 sdc 共享盘进行分区、绑定裸设备、创建设备连接等操作。
本次演示基于个人主机环境,所以只创建一个 50GB 的共享盘。实际生产环境中,应根据具体项目需求来规划和创建共享盘的大小,以满足业务需求和性能要求。
多路径配置 生产环境的共享盘一般都是多路径,所以建议可以使用 multipath 进行绑盘,便于管理,也可以避免主机重启导致磁盘盘符错乱的问题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [root@ssc01 ~]# yum install -y device-mapper-multipath [root@ssc01 ~]# mpathconf --enable --with_multipathd y [root@ssc01 ~]# systemctl enable multipathd.service [root@ssc01 ~]# cat <<EOF >/etc/multipath.conf defaults { user_friendly_names yes } blacklist { devnode "^sda" } multipaths { multipath { wwid "$(/usr/lib/udev/scsi_id -g -u /dev/sdc)" alias gbase8sdisk } } EOF [root@ssc01 ~]# systemctl restart multipathd.service [root@ssc01 ~]# multipath -ll gbase8sdisk (2ceb8ce845960bfe6) dm-3 ROCKET,IMAGEFILE size=50G features='2 queue_mode mq' hwhandler='0' wp=rw `-+- policy='service-time 0' prio=1 status=active `- 5:0:0:0 sde 8:64 active ready running
主辅节点都需完成上述操作。
共享盘分区 磁盘分区通常有以下两种方式:
MBR 分区 :仅支持 2TB 以下的磁盘,通常使用 fdisk 命令进行分区。
GPT 分区 :适用于 2TB 以上的磁盘,推荐使用 parted 命令进行分区。需要注意的是,parted 命令的操作会实时生效,无需额外保存。
本文为了更加直观,选择 GPT 分区方式 并使用 parted 命令进行分区。需要注意:
使用 parted 时,分区大小可能比数据库计算的实际需求略小,因此建议为每个分区上浮约 10% 的空间。
如果上浮后的差额不足 1GB,则按 1GB 计算。
每个分区对应一个数据库的 chunk,便于管理。
使用 parted 创建分区的基本格式如下:
1 2 3 4 parted /dev/<磁盘名称> mklabel gpt parted /dev/<磁盘名称> mkpart <分区名称> 起始 结束
参数说明:
磁盘名称 :共享盘设备名称(如 /dev/sdb)。
分区名称 :数据库中每个 chunk 的名称。
起始和结束位置 :分区在磁盘上的位置,以 GB 为单位。
以 50GB 的共享盘为例,根据数据库的常见需求,建议划分以下几种分区:
rootdbs :根数据库表空间,存储数据库服务器关键信息(5GB)。
plogdbs :物理日志表空间,用于保存物理日志信息(5GB)。
llogdbs :逻辑日志表空间,用于保存逻辑日志信息(5GB)。
tempdbs :临时表空间,保存临时数据(15GB,分为 3 个分区,每个 5GB)。
datadbs :用户数据表空间,用于存储用户定义的数据表(15GB,分为 3 个分区,每个 5GB)。
sbspace :智能大对象表空间,用于存储 Blob 和 Clob(5GB)。
comnspace :磁盘心跳空间(ssc_alt_comm),共享存储集群需要在共享存储上创建一个用于通信的 dbspace(5GB)。
在主节点的 root 用户下执行以下分区命令(数据文件分区命名规则:${dbspacename}chk[xxx] ):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@ssc01 ~]# parted /dev/mapper/gbase8sdisk mklabel gpt -s [root@ssc01 ~]# parted /dev/mapper/gbase8sdisk mkpart rootdbschk001 0 5G -s [root@ssc01 ~]# parted /dev/mapper/gbase8sdisk mkpart plogdbschk001 5G 10G -s [root@ssc01 ~]# parted /dev/mapper/gbase8sdisk mkpart llogdbschk001 10G 15G -s [root@ssc01 ~]# parted /dev/mapper/gbase8sdisk mkpart tempdbschk001 15G 20G -s [root@ssc01 ~]# parted /dev/mapper/gbase8sdisk mkpart tempdbschk002 20G 25G -s [root@ssc01 ~]# parted /dev/mapper/gbase8sdisk mkpart tempdbschk003 25G 30G -s [root@ssc01 ~]# parted /dev/mapper/gbase8sdisk mkpart datadbschk001 30G 35G -s [root@ssc01 ~]# parted /dev/mapper/gbase8sdisk mkpart datadbschk002 35G 40G -s [root@ssc01 ~]# parted /dev/mapper/gbase8sdisk mkpart commdbschk001 40G 45G -s [root@ssc01 ~]# parted /dev/mapper/gbase8sdisk mkpart sbspacechk001 45G 50G -s
执行分区后,可通过以下命令确认分区是否成功:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [root@ssc01 ~]# 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 20G 0 disk sdc 8:32 0 50G 0 disk └─gbase8sdisk 253:8 0 50G 0 mpath ├─gbase8sdisk1 253:9 0 4.7G 0 part ├─gbase8sdisk2 253:10 0 4.7G 0 part ├─gbase8sdisk3 253:11 0 4.7G 0 part ├─gbase8sdisk4 253:12 0 4.7G 0 part ├─gbase8sdisk5 253:13 0 4.7G 0 part ├─gbase8sdisk6 253:14 0 4.7G 0 part ├─gbase8sdisk7 253:15 0 4.7G 0 part ├─gbase8sdisk8 253:16 0 4.7G 0 part ├─gbase8sdisk9 253:17 0 4.7G 0 part └─gbase8sdisk10 253:18 0 4.7G 0 part sr0 11:0 1 4.4G 0 rom /mnt
检查结果应显示 gbase8sdisk 磁盘已分为 10 个分区,分别为 gbase8sdisk1 至 gbase8sdisk10。
在辅节点上执行以下命令刷新分区表:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [root@ssc02 soft]# partprobe /dev/mapper/gbase8sdisk [root@ssc02 soft]# 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 20G 0 disk sdc 8:32 0 50G 0 disk └─gbase8sdisk 253:8 0 50G 0 mpath ├─gbase8sdisk1 253:9 0 4.7G 0 part ├─gbase8sdisk2 253:10 0 4.7G 0 part ├─gbase8sdisk3 253:11 0 4.7G 0 part ├─gbase8sdisk4 253:12 0 4.7G 0 part ├─gbase8sdisk5 253:13 0 4.7G 0 part ├─gbase8sdisk6 253:14 0 4.7G 0 part ├─gbase8sdisk7 253:15 0 4.7G 0 part ├─gbase8sdisk8 253:16 0 4.7G 0 part ├─gbase8sdisk9 253:17 0 4.7G 0 part └─gbase8sdisk10 253:18 0 4.7G 0 part sr0 11:0 1 4.4G 0 rom /mnt
至此,共享盘的分区已完成并同步到辅节点。
绑定裸设备 接下来需要绑定裸设备,绑定裸设备也可以采用不同的方式,在此,为了方便演示,我们采用修改配置文件的方式。我们要修改 /etc/udev/rules.d/ 目录下的 60-raw.rules 文件。
我们可以看到修改配置文件的命令格式,根据文件描述的格式,和我们创建的分区情况写出如下命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [root@ssc01 ~]# type raw raw 是 /usr/bin/raw [root@ssc01 ~]# cat <<-EOF>/etc/udev/rules.d/60-raw.rules KERNEL=="dm-*", SUBSYSTEM=="block", ENV{DM_NAME}=="gbase8sdisk1", RUN+="/usr/bin/raw /dev/raw/raw1 /dev/mapper/%E{DM_NAME}" KERNEL=="dm-*", SUBSYSTEM=="block", ENV{DM_NAME}=="gbase8sdisk2", RUN+="/usr/bin/raw /dev/raw/raw2 /dev/mapper/%E{DM_NAME}" KERNEL=="dm-*", SUBSYSTEM=="block", ENV{DM_NAME}=="gbase8sdisk3", RUN+="/usr/bin/raw /dev/raw/raw3 /dev/mapper/%E{DM_NAME}" KERNEL=="dm-*", SUBSYSTEM=="block", ENV{DM_NAME}=="gbase8sdisk4", RUN+="/usr/bin/raw /dev/raw/raw4 /dev/mapper/%E{DM_NAME}" KERNEL=="dm-*", SUBSYSTEM=="block", ENV{DM_NAME}=="gbase8sdisk5", RUN+="/usr/bin/raw /dev/raw/raw5 /dev/mapper/%E{DM_NAME}" KERNEL=="dm-*", SUBSYSTEM=="block", ENV{DM_NAME}=="gbase8sdisk6", RUN+="/usr/bin/raw /dev/raw/raw6 /dev/mapper/%E{DM_NAME}" KERNEL=="dm-*", SUBSYSTEM=="block", ENV{DM_NAME}=="gbase8sdisk7", RUN+="/usr/bin/raw /dev/raw/raw7 /dev/mapper/%E{DM_NAME}" KERNEL=="dm-*", SUBSYSTEM=="block", ENV{DM_NAME}=="gbase8sdisk8", RUN+="/usr/bin/raw /dev/raw/raw8 /dev/mapper/%E{DM_NAME}" KERNEL=="dm-*", SUBSYSTEM=="block", ENV{DM_NAME}=="gbase8sdisk9", RUN+="/usr/bin/raw /dev/raw/raw9 /dev/mapper/%E{DM_NAME}" KERNEL=="dm-*", SUBSYSTEM=="block", ENV{DM_NAME}=="gbase8sdisk10", RUN+="/usr/bin/raw /dev/raw/raw10 /dev/mapper/%E{DM_NAME}" KERNEL=="raw[1-9]*", OWNER="gbasedbt", GROUP="gbasedbt", MODE="0660" EOF
配置文件修改完成之后,我们需要重新加载配置文件和磁盘,并 raw -qa 来查看是否成功绑定裸设备:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [root@ssc01 ~]# udevadm control --reload-rules [root@ssc01 ~]# udevadm trigger --type =devices --action=change [root@ssc01 ~]# partprobe /dev/mapper/gbase8sdisk [root@ssc01 ~]# raw -qa [root@ssc01 rules.d]# raw -qa /dev/raw/raw1:绑定到主设备号 253, 次设备号 9 /dev/raw/raw2:绑定到主设备号 253, 次设备号 10 /dev/raw/raw3:绑定到主设备号 253, 次设备号 11 /dev/raw/raw4:绑定到主设备号 253, 次设备号 12 /dev/raw/raw5:绑定到主设备号 253, 次设备号 13 /dev/raw/raw6:绑定到主设备号 253, 次设备号 14 /dev/raw/raw7:绑定到主设备号 253, 次设备号 15 /dev/raw/raw8:绑定到主设备号 253, 次设备号 16 /dev/raw/raw9:绑定到主设备号 253, 次设备号 17 /dev/raw/raw10:绑定到主设备号 253, 次设备号 18
辅节点也需要完成上述操作。
创建裸设备链接 所有节点都需要创建链接到裸设备的软连接,使用 gbasedbt 用户执行以下命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [root@ssc01 ~]# su - gbasedbt [gbasedbt@ssc01 ~]$ cd /data/gbase/ [gbasedbt@ssc01 gbase]$ ln -sf /dev/raw/raw1 rootdbschk001 [gbasedbt@ssc01 gbase]$ ln -sf /dev/raw/raw2 plogdbschk001 [gbasedbt@ssc01 gbase]$ ln -sf /dev/raw/raw3 llogdbschk001 [gbasedbt@ssc01 gbase]$ ln -sf /dev/raw/raw4 tempdbschk001 [gbasedbt@ssc01 gbase]$ ln -sf /dev/raw/raw5 tempdbschk002 [gbasedbt@ssc01 gbase]$ ln -sf /dev/raw/raw6 tempdbschk003 [gbasedbt@ssc01 gbase]$ ln -sf /dev/raw/raw7 datadbschk001 [gbasedbt@ssc01 gbase]$ ln -sf /dev/raw/raw8 datadbschk002 [gbasedbt@ssc01 gbase]$ ln -sf /dev/raw/raw9 commdbschk001 [gbasedbt@ssc01 gbase]$ ln -sf /dev/raw/raw10 sbspacechk001 [gbasedbt@ssc01 gbase]$ ll lrwxrwxrwx 1 gbasedbt gbasedbt 13 12月 11 14:22 datadbschk001 -> /dev/raw/raw7 lrwxrwxrwx 1 gbasedbt gbasedbt 13 12月 11 14:22 datadbschk002 -> /dev/raw/raw8 lrwxrwxrwx 1 gbasedbt gbasedbt 13 12月 11 14:22 commdbschk001 -> /dev/raw/raw9 lrwxrwxrwx 1 gbasedbt gbasedbt 13 12月 11 14:22 llogdbschk001 -> /dev/raw/raw3 lrwxrwxrwx 1 gbasedbt gbasedbt 13 12月 11 14:22 plogdbschk001 -> /dev/raw/raw2 lrwxrwxrwx 1 gbasedbt gbasedbt 13 12月 11 14:22 rootdbschk001 -> /dev/raw/raw1 lrwxrwxrwx 1 gbasedbt gbasedbt 14 12月 11 14:22 sbspacechk001 -> /dev/raw/raw10 lrwxrwxrwx 1 gbasedbt gbasedbt 13 12月 11 14:22 tempdbschk001 -> /dev/raw/raw4 lrwxrwxrwx 1 gbasedbt gbasedbt 13 12月 11 14:22 tempdbschk002 -> /dev/raw/raw5 lrwxrwxrwx 1 gbasedbt gbasedbt 13 12月 11 14:22 tempdbschk003 -> /dev/raw/raw6
主辅节点都需完成上述操作。至此,已成功配置共享盘。
SSC 集群安装 安装 GBase 8s 软件 在主辅节点都安装 GBase 8s 数据库软件,不初始化实例。
所有节点都需要解压 GBase 8s 安装包:
1 2 3 4 5 6 7 8 9 10 [root@ssc01 soft]# tar -xf GBase8sV8.8_TL_3.5.1_3X2_x86_64.tar [root@ssc01 soft]# ll -rwxr-xr-x 1 root root 185190400 12月 11 10:37 clientsdk_3.5.1_3X2_1_x86_64.tar drwxr-xr-x 2 root root 77 10月 18 17:04 doc -rwxr-xr-x 1 root root 346460160 12月 11 10:37 GBase8sV8.8_TL_3.5.1_3X2_x86_64.tar -rwxr-xr-x 1 root root 346341229 10月 18 17:11 ids_install -rw-r--r-- 1 root root 1864 10月 18 17:11 ids.properties -rwxr-xr-x 1 root root 43320 12月 11 10:47 libnsl-2.28-98.p02.ky10.x86_64.rpm -rwxr-xr-x 1 root root 82770 10月 18 17:11 onsecurity
所有节点都需要安装 GBase 8s 数据库软件,使用 root 用户静默安装,安装到路径 /opt/gbase:
1 2 [root@ssc01 soft]# sh ids_install -i silent -DLICENSE_ACCEPTED=TRUE -DUSER_INSTALL_DIR=/opt/gbase
全程无输出,无感知,等待一会儿就安装完成了。主辅节点都需完成上述操作。
安装 CSDK SSC 集群切换需要安装 CSDK。
所有节点都需要解压 GBase 8s 安装包:
1 2 3 4 5 6 7 8 9 10 11 12 [root@ssc01 soft]# tar -xf clientsdk_3.5.1_3X2_1_x86_64.tar [root@ssc01 soft]# ll 总用量 1038380 -rwxr-xr-x 1 root root 185190400 12月 11 10:37 clientsdk_3.5.1_3X2_1_x86_64.tar -rw-r--r-- 1 root root 2792 10月 18 17:34 csdk.properties drwxr-xr-x 2 root root 222 10月 18 17:28 doc -rwxr-xr-x 1 root root 346460160 12月 11 10:37 GBase8sV8.8_TL_3.5.1_3X2_x86_64.tar -rwxr-xr-x 1 root root 346341229 10月 18 17:11 ids_install -rw-r--r-- 1 root root 1864 10月 18 17:11 ids.properties -rwxr-xr-x 1 root root 185166846 10月 18 17:34 installclientsdk -rwxr-xr-x 1 root root 43320 12月 11 10:47 libnsl-2.28-98.p02.ky10.x86_64.rpm -rwxr-xr-x 1 root root 82770 10月 18 17:11 onsecurity
在所有节点都使用 root 用户静默安装,安装到路径 /opt/gbase:
1 [root@ssc01 soft]# sh installclientsdk -i silent -DLICENSE_ACCEPTED=TRUE -DUSER_INSTALL_DIR=/opt/gbase
辅节点也需要完成上述操作。
环境变量配置 所有节点都需要配置环境变量,使用 gbasedbt 用户在 /home/gbasedbt 目录下创建 profile.实例名 的文件,并输入以下内容,以主节点为例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [gbasedbt@ssc01 ~]$ INSTANCE=gbase01 [gbasedbt@ssc01 ~]$ cat <<-EOF>>/home/gbasedbt/.bash_profile export GBASEDBTDIR=/opt/gbase export GBASEDBTSERVER=${INSTANCE} export ONCONFIG=onconfig.${INSTANCE} export GBASEDBTSQLHOSTS=\$GBASEDBTDIR/etc/sqlhosts.${INSTANCE} export DB_LOCALE=zh_CN.utf8 export CLIENT_LOCALE=zh_CN.utf8 export GL_USEGLU=1 export PATH=\$GBASEDBTDIR/bin:/usr/bin:\${PATH}:. EOF [gbasedbt@ssc01 ~]$ source /home/gbasedbt/.bash_profile
主辅节点都需完成上述操作。
配置互信 在 GBase 8s SSC 部署过程中,需要配置互信。互信的方法多种多样,这里推荐两种常见的方式:
配置 .rhosts 文件: .rhosts 文件是用户主目录内的文件,用于定义可信主机与用户关系,适合安全要求较低的场景,特别是需要将互信限定到用户级别时。
配置 REMOTE_SERVER_CFG 参数: REMOTE_SERVER_CFG 参数指定包含信任主机或 IP 地址列表的文件名,文件位于 $GBASEDBTDIR/etc 目录中。此方法避免使用操作系统级互信文件,适合对操作系统安全要求较高的场景。
以上方式由官方文档提供,我这里都演示一下,可以供大家根据实际需求选择使用。
配置 .rhosts 文件 1、创建或修改 .rhosts 文件
在 gbasedbt 用户家目录下新建 .rhosts 文件,添加主辅节点的主机名及互信用户:
1 2 3 4 5 6 7 [gbasedbt@ssc01 ~]$ cat <<-EOF>>/home/gbasedbt/.rhosts ssc01 gbasedbt sscha01 gbasedbt ssc02 gbasedbt sscha02 gbasedbt EOF
如果集群配置心跳 IP,也需要加入到互信列表中。
适用场景 :此方法适用于对操作系统安全性要求较低,且需要以 gbasedbt 用户进行互信配置的环境。
配置 REMOTE_SERVER_CFG 参数 1、创建 hosts.trust 文件
在数据库安装目录下的 etc 子目录中创建 hosts.trust 文件,内容如下:
1 2 3 4 5 [gbasedbt@ssc01 ~]$ cd $GBASEDBTDIR /etc [gbasedbt@ssc01 ~]$ vi hosts.trust [gbasedbt@ssc01 ~]$ cat hosts.trust + gbasedbt
2、修改 REMOTE_SERVER_CFG 参数
在主节点和辅节点上,通过使用 onmode -wf 动态修改参数或编辑 onconfig 文件后重启数据库,将 REMOTE_SERVER_CFG 设置为 hosts.trust:
1 2 3 4 [gbasedbt@ssc01 ~]$ onmode -wf REMOTE_SERVER_CFG hosts.trust [gbasedbt@ssc01 ~]$ onstat -g cfg | grep REMOTE_SERVER_CFG REMOTE_SERVER_CFG hosts.trust
适用场景 :此方法适用于操作系统安全等级高的场景,避免使用 /etc/hosts.equiv 等文件配置互信。
以上两种互信方式都需要配置 sqlhosts 文件,等下一步配置完成 sqlhosts 文件,确保 sqlhosts 文件配置正确,即可完成互信。
配置 sqlhosts 文件 所有节点都需要配置 sqlhosts 文件,使用 gbasedbt 用户编辑主辅节点的 sqlhosts 文件,sqlhosts 文件中需要加入主辅节点的集群心跳,增加集群实例、心跳实例及 cm 实例等信息,以主节点为例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [gbasedbt@ssc01 ~]$ cat <<-EOF >$GBASEDBTSQLHOSTS ## dbservername nettype hostname servicename options db_group group - - gbase01 onsoctcp 192.168.6.70 9088 g=db_group gbase02 onsoctcp 192.168.6.71 9088 g=db_group ## 集群心跳配置 ha_group group - - ha_pri onsoctcp 10.10.10.1 9099 g=ha_group ha_ssc onsoctcp 10.10.10.2 9099 g=ha_group ## 后续需要部署 2 个 CM,所以提前添加参数 cm_read group - - oltp_read1 onsoctcp 192.168.6.70 9200 g=cm_read oltp_read2 onsoctcp 192.168.6.71 9200 g=cm_read ## 后续需要部署 2 个 CM,所以提前添加参数 cm_update group - - oltp_update1 onsoctcp 192.168.6.70 9300 g=cm_update oltp_update2 onsoctcp 192.168.6.71 9300 g=cm_update EOF
主辅节点都需完成上述操作。
配置 onconfig 文件 所有节点都需要配置 onconfig 文件,配置文件参数介绍如下:
使用 gbasedbt 用户,将 $GBASEDBTDIR/etc 目录中的 onconfig.std 文件复制一份,命名为 $ONCONFIG 变量指定的名称:
1 [gbasedbt@ssc01 ~]$ cp $GBASEDBTDIR /etc/onconfig.std $GBASEDBTDIR /etc/$ONCONFIG
编辑 $ONCONFIG 配置文件,初始化数据库实例,以此配置参数初始化数据库,要求系统内存在 8GB 以上(所有节点均执行):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 [gbasedbt@ssc01 ~]$ DATADIR=/data/gbase [gbasedbt@ssc01 ~]$ NUMCPU=`onstat -g osi |awk /"online processors" /'{print $5}' ` [gbasedbt@ssc01 ~]$ sed -i "s#^ROOTPATH.*#ROOTPATH ${DATADIR} /rootdbschk001#g" $GBASEDBTDIR /etc/$ONCONFIG sed -i "s#^ROOTSIZE.*#ROOTSIZE 1024000 #g" $GBASEDBTDIR /etc/$ONCONFIG sed -i "s#^DBSERVERNAME.*#DBSERVERNAME $GBASEDBTSERVER #g" $GBASEDBTDIR /etc/$ONCONFIG sed -i "s#^TAPEDEV.*#TAPEDEV /dev/null#g" $GBASEDBTDIR /etc/$ONCONFIG sed -i "s#^LTAPEDEV.*#LTAPEDEV /dev/null#g" $GBASEDBTDIR /etc/$ONCONFIG sed -i "s#^MULTIPROCESSOR.*#MULTIPROCESSOR 1#g" $GBASEDBTDIR /etc/$ONCONFIG ; sed -i "s#^CLEANERS.*#CLEANERS 32#g" $GBASEDBTDIR /etc/$ONCONFIG ; sed -i "s#^LOCKS.*#LOCKS 5000000#g" $GBASEDBTDIR /etc/$ONCONFIG ; sed -i "s#^DEF_TABLE_LOCKMODE.*#DEF_TABLE_LOCKMODE row#g" $GBASEDBTDIR /etc/$ONCONFIG ; sed -i "s#^DS_TOTAL_MEMORY.*#DS_TOTAL_MEMORY 2048000#g" $GBASEDBTDIR /etc/$ONCONFIG ; sed -i "s#^SHMVIRTSIZE.*#SHMVIRTSIZE 2048000#g" $GBASEDBTDIR /etc/$ONCONFIG ; sed -i "s#^SHMADD.*#SHMADD 1024000#g" $GBASEDBTDIR /etc/$ONCONFIG sed -i "s#^STACKSIZE.*#STACKSIZE 1024#g" $GBASEDBTDIR /etc/$ONCONFIG sed -i "s#^SBSPACENAME.*#SBSPACENAME sbspace01#g" $GBASEDBTDIR /etc/$ONCONFIG sed -i "s#^DBSPACETEMP.*#DBSPACETEMP tempdbs01,tempdbs02,tempdbs03#g" $GBASEDBTDIR /etc/$ONCONFIG sed -i "s#^VPCLASS cpu.*#VPCLASS cpu,num=${NUMCPU} ,noage#g" $GBASEDBTDIR /etc/$ONCONFIG sed -i "s#^TEMPTAB_NOLOG.*#TEMPTAB_NOLOG 1#g" $GBASEDBTDIR /etc/$ONCONFIG sed -i "s#^NS_CACHE.*#NS_CACHE host=0,service=0,user=0,group=0#g" $GBASEDBTDIR /etc/$ONCONFIG sed -i "s#^DUMPSHMEM.*#DUMPSHMEM 0#g" $GBASEDBTDIR /etc/$ONCONFIG echo "BUFFERPOOL size=16k,buffers=512000,lrus=64,lru_min_dirty=50,lru_max_dirty=60" >>$GBASEDBTDIR /etc/$ONCONFIG sed -i "s#^SDS_TEMPDBS.*#SDS_TEMPDBS sdstmpdbs,/data/gbase/sdsdbspacetmp,16,0,5120000#g" $GBASEDBTDIR /etc/$ONCONFIG sed -i "s#^SDS_PAGING.*#SDS_PAGING /data/gbase/page1,/data/gbase/page2#g" $GBASEDBTDIR /etc/$ONCONFIG sed -i "s#^SDS_ALTERNATE.*#SDS_ALTERNATE ssc_alt_comm#g" $GBASEDBTDIR /etc/$ONCONFIG sed -i "s#^SDS_FLOW_CONTROL.*#SDS_FLOW_CONTROL -1#g" $GBASEDBTDIR /etc/$ONCONFIG
如果集群配置了心跳 IP,修改心跳别名(所有节点均执行):
1 2 3 4 sed -i "s#^DBSERVERALIASES.*#DBSERVERALIASES ha_pri#g" $GBASEDBTDIR /etc/$ONCONFIG sed -i "s#^HA_ALIAS.*#HA_ALIAS ha_pri#g" $GBASEDBTDIR /etc/$ONCONFIG
启用辅节点服务器功能:
1 2 3 4 sed -i "s#^SDS_ENABLE.*#SDS_ENABLE 0#g" $GBASEDBTDIR /etc/$ONCONFIG sed -i "s#^SDS_ENABLE.*#SDS_ENABLE 1#g" $GBASEDBTDIR /etc/$ONCONFIG
📢注意 :相关参数中用到的文件不存在的需要以 gbasedbt 用户身份创建。
1 2 3 [gbasedbt@ssc01 ~]$ cd /data/gbase/ [gbasedbt@ssc01 ~]$ touch sdsdbspacetmp page1 page2 [gbasedbt@ssc01 ~]$ chmod 660 sdsdbspacetmp page1 page2
配置好之后,就可以开始搭建 SSC 集群了。
搭建集群关系 首先需要初始化并启动主节点的数据库服务,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 [gbasedbt@ssc01 tmp]$ oninit -iwvy Your evaluation license will expire on 2025-12-11 00:00:00 attn: Ignoring unknown or deprecated config parameter (STARTHASH_TEMP_OPT) Reading configuration file '/opt/gbase/etc/onconfig.gbase01' ...succeeded Creating /GBASEDBTTMP/.infxdirs...succeeded Allocating and attaching to shared memory...succeeded Creating resident pool 681586 kbytes...succeeded Creating infos file "/opt/gbase/etc/.infos.gbase01" ...succeeded Linking conf file "/opt/gbase/etc/.conf.gbase01" ...succeeded Initializing rhead structure...rhlock_t 524288 (16384K)... rlock_t (664062K)... Writing to infos file...succeeded Initialization of Encryption...succeeded Initializing ASF...succeeded Initializing Dictionary Cache and SPL Routine Cache...succeeded Bringing up ADM VP...succeeded Creating VP classes...succeeded Forking main_loop thread...succeeded Initializing DR structures...succeeded Forking 1 'soctcp' listener threads...succeeded Forking 1 'soctcp' listener threads...succeeded Starting tracing...succeeded Initializing 32 flushers...succeeded Initializing log /checkpoint information...succeeded Initializing dbspaces...succeeded Opening primary chunks...succeeded Validating chunks...succeeded Creating database partition...succeeded Initialize Async Log Flusher...succeeded Starting B-tree Scanner...succeeded Init ReadAhead Daemon...succeeded Init DB Util Daemon...succeeded Initializing DBSPACETEMP list...succeeded Init Auto Tuning Daemon...succeeded Checking database partition index...succeeded Initializing dataskip structure...succeeded Checking for temporary tables to drop...succeeded Updating Global Row Counter...succeeded Forking onmode_mon thread...succeeded Creating periodic thread...succeeded Creating periodic thread...succeeded Starting scheduling system...succeeded Verbose output complete: mode = 5
注意:如果这一步初始化失败的话,再次执行初始化之前需要设置参数 FULL_DISK_INIT,否则会执行报错。
1 2 sed -i "s#^FULL_DISK_INIT 0*#FULL_DISK_INIT 1#g" $GBASEDBTDIR /etc/$ONCONFIG
确保初始化成功之后继续下面的操作。
当主节点数据库服务起来之后,就可以创建物理日志和逻辑日志,数据空间,临时数据空间,智能大数据空间,路径指向共享盘,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [gbasedbt@ssc01 ~]$ DATADIR=/data/gbase [gbasedbt@ssc01 ~]$ onspaces -c -d plogdbs -p $DATADIR /plogdbschk001 -o 0 -s 4000000 [gbasedbt@ssc01 ~]$ onspaces -c -d llogdbs -p $DATADIR /llogdbschk001 -o 0 -s 4000000 [gbasedbt@ssc01 ~]$ onspaces -c -d tempdbs01 -p $DATADIR /tempdbschk001 -t -k 16 -o 0 -s 4000000 [gbasedbt@ssc01 ~]$ onspaces -c -d tempdbs02 -p $DATADIR /tempdbschk002 -t -k 16 -o 0 -s 4000000 [gbasedbt@ssc01 ~]$ onspaces -c -d tempdbs03 -p $DATADIR /tempdbschk003 -t -k 16 -o 0 -s 4000000 [gbasedbt@ssc01 ~]$ onspaces -c -d datadbs01 -p $DATADIR /datadbschk001 -k 16 -o 0 -s 4000000 [gbasedbt@ssc01 ~]$ onspaces -c -d datadbs02 -p $DATADIR /datadbschk002 -k 16 -o 0 -s 4000000 [gbasedbt@ssc01 ~]$ onspaces -c -d sbspace01 -p $DATADIR /sbspacechk001 -k 16 -o 0 -s 4000000 [gbasedbt@ssc01 ~]$ onspaces -c -b ssc_alt_comm -p /data/gbase/commdbschk001 -g 16k -o 0 -s 4000000 [gbasedbt@ssc01 ~]$ onmode -l
创建完需把逻辑日志和物理日志从 rootdbs 中迁移出来:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 [gbasedbt@ssc01 ~]$ onparams -p -d plogdbs -s 2000000 -y [gbasedbt@ssc01 ~]$ for i in `seq 20`;do onparams -a -d llogdbs -s 100000;done [gbasedbt@ssc01 ~]$ for i in `seq 7`;do onmode -l;done [gbasedbt@ssc01 ~]$ onmode -c [gbasedbt@ssc01 ~]$ for i in `seq 6`;do onparams -d -l $i -y;done
创建默认数据库 使用 gbasedbt 用户执行以下命令:
1 2 3 [gbasedbt@ssc01 ~]$ dbaccess - -<<-EOF create database gbasedb in datadbs01 with log; EOF
创建默认数据库 gbasedb,数据存储于 datadbs01 空间。
配置集群主节点 在主节点执行以下命令,配置集群主节点为心跳实例,gbasedbt 用户执行:
1 [gbasedbt@ssc01 ~]$ onmode -d set SDS primary ha_pri
此时我们可以看下集群关系:
1 2 3 4 5 6 [gbasedbt@ssc01 ~]$ onstat -g sds Your evaluation license will expire on 2025-12-11 00:00:00 On-Line -- Up 00:26:18 -- 11142884 Kbytes Local server type : Standard Number of SDS servers:0
启动辅节点库 接下来就是启动辅节点数据库服务:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 [gbasedbt@ssc02 gbase]$ oninit -vy Your evaluation license will expire on 2025-12-11 00:00:00 attn: Ignoring unknown or deprecated config parameter (STARTHASH_TEMP_OPT) Reading configuration file '/opt/gbase/etc/onconfig.gbase02' ...succeeded Creating /GBASEDBTTMP/.infxdirs...succeeded Allocating and attaching to shared memory...succeeded Creating resident pool 681586 kbytes...succeeded Creating infos file "/opt/gbase/etc/.infos.gbase02" ...succeeded Linking conf file "/opt/gbase/etc/.conf.gbase02" ...succeeded Initializing rhead structure...rhlock_t 524288 (16384K)... rlock_t (664062K)... Writing to infos file...succeeded Initialization of Encryption...succeeded Initializing ASF...succeeded Initializing Dictionary Cache and SPL Routine Cache...succeeded Bringing up ADM VP...succeeded Creating VP classes...succeeded Forking main_loop thread...succeeded Initializing DR structures...succeeded Forking 1 'soctcp' listener threads...succeeded Forking 1 'soctcp' listener threads...succeeded Starting tracing...succeeded Initializing 32 flushers...succeeded Initializing SDS Server network connections...succeeded Initializing log /checkpoint information...succeeded Initializing dbspaces...succeeded Opening primary chunks...succeeded Validating chunks...succeeded Initializing SDS Server disks...succeeded Initialize Async Log Flusher...succeeded Starting B-tree Scanner...succeeded Init ReadAhead Daemon...succeeded Init DB Util Daemon...succeeded Initializing DBSPACETEMP list...succeeded Init Auto Tuning Daemon...succeeded Initializing dataskip structure...succeeded Updating Global Row Counter...succeeded Forking onmode_mon thread...succeeded Creating periodic thread...succeeded Creating periodic thread...succeeded Verbose output complete: mode = 2
检查集群状态 当主辅节点数据库服务都启动之后,就可以分别在主辅节点查看数据库集群状态:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [gbasedbt@ssc01 ~]$ onstat -g sds Your evaluation license will expire on 2025-12-11 00:00:00 On-Line -- Up 00:48:59 -- 11142884 Kbytes Local server type : Primary Number of SDS servers:1 SDS server information SDS srv SDS srv Connection Last LPG sent Supports name status status (log id ,page) Proxy Writes ha_ssc Active Connected 13,2377 N [gbasedbt@ssc02 etc]$ onstat -g sds Your evaluation license will expire on 2025-12-11 00:00:00 Read-Only (SDS) -- Up 00:02:50 -- 11142884 Kbytes Local server type : SDS Server Status : Active Source server name: ha_pri Connection status: Connected Last log page received(log id ,page): 13,2377
可以看到集群关系已经是搭建完成。
连接数据库 在 GBase 8s 数据库中,许多信息可以通过查询系统表直接获取,其中主辅节点信息也不例外。在 sysmaster 库中的 syscluster 表中,可以通过查询该表获取部分内容,这些内容与 onstat -g cluster、onstat -g dri 和 onstat -g ath 等命令的输出相关:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 > database sysmaster; 数据库已关闭。 数据库已被选用。 > select * from syscluster; name ha_pri role P syncmode SYNC nodetype PRIMARY supports_updates Y server_status Active connection_status delayed_apply stop_apply Not Used logid_sent logpage_sent logid_acked logpage_acked ack_time 2024-12-11 22:20:15 sdscycle 277 sdscycle_acked name ha_ssc role S syncmode SYNC nodetype SDS supports_updates N server_status Active connection_status Connected delayed_apply stop_apply Not Used logid_sent 13 logpage_sent 2925 logid_acked 13 logpage_acked 2925 ack_time 2024-12-11 22:20:04 sdscycle 277 sdscycle_acked 277 查询到 2 行。
使用 gbasedbt 用户连接数据库,创建测试表:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 [gbasedbt@ssc01 ~]$ dbaccess - - > database gbasedb; 数据库已被选用。 > create table test (id int, name varchar(20)); 表已建妥。 > insert into test values(1, 'lucifer' ); 1 行被插入。 > select * from test ; id name 1 lucifer 查询到 1 行。 > drop table if exists test ; 表已取消。
数据库建表测试正常。
辅节点可更新 在正常情况下,集群搭建完成后,辅节点默认处于只读、不可更新的状态:
1 2 3 4 5 6 7 8 9 10 11 [gbasedbt@ssc02 ~]$ onstat -g cluster Your evaluation license will expire on 2025-12-11 00:00:00 Read-Only (SDS) -- Up 01:17:38 -- 11142884 Kbytes Primary Server:ha_pri Index page logging status: Disabled Server ACKed Log Supports Status (log , page) Updates ha_ssc 13,3002 No SYNC(SDS),Connected,Active
通过修改 onconfig 配置文件中的 UPDATABLE_SECONDARY 参数,可以将辅节点设置为可更新。UPDATABLE_SECONDARY 的默认值为 0:
1 2 3 [gbasedbt@ssc02 ~]$ cat $GBASEDBTDIR /etc/$ONCONFIG | grep UPDATABLE_SECONDARY UPDATABLE_SECONDARY 0
启用该参数后,表示辅节点到主节点传输更新指令的连接线程数,可设置范围为 1 到 CPU VP 的两倍。
需要注意的是,辅节点的可更新机制是通过接收 DML 命令后,将其通过指定线程传递给主节点,由主节点执行后再同步更新至辅节点。
当在辅节点将 UPDATABLE_SECONDARY 参数值修改为 1:
1 2 3 4 [gbasedbt@ssc02 ~]$ sed -i "s#^UPDATABLE_SECONDARY 0*#UPDATABLE_SECONDARY 1#g" $GBASEDBTDIR /etc/$ONCONFIG [gbasedbt@ssc02 ~]$ cat $GBASEDBTDIR /etc/$ONCONFIG | grep UPDATABLE_SECONDARY UPDATABLE_SECONDARY 1
重启辅节点后:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 [gbasedbt@ssc02 ~]$ onmode -ky Your evaluation license will expire on 2025-12-11 00:00:00 [gbasedbt@ssc02 ~]$ oninit -vy Your evaluation license will expire on 2025-12-11 00:00:00 attn: Ignoring unknown or deprecated config parameter (STARTHASH_TEMP_OPT) Reading configuration file '/opt/gbase/etc/onconfig.gbase02' ...succeeded Creating /GBASEDBTTMP/.infxdirs...succeeded Allocating and attaching to shared memory...succeeded Creating resident pool 681586 kbytes...succeeded Creating infos file "/opt/gbase/etc/.infos.gbase02" ...succeeded Linking conf file "/opt/gbase/etc/.conf.gbase02" ...succeeded Initializing rhead structure...rhlock_t 524288 (16384K)... rlock_t (664062K)... Writing to infos file...succeeded Initialization of Encryption...succeeded Initializing ASF...succeeded Initializing Dictionary Cache and SPL Routine Cache...succeeded Bringing up ADM VP...succeeded Creating VP classes...succeeded Forking main_loop thread...succeeded Initializing DR structures...succeeded Forking 1 'soctcp' listener threads...succeeded Forking 1 'soctcp' listener threads...succeeded Starting tracing...succeeded Initializing 32 flushers...succeeded Initializing SDS Server network connections...succeeded Initializing log /checkpoint information...succeeded Initializing dbspaces...succeeded Opening primary chunks...succeeded Validating chunks...succeeded Initializing SDS Server disks...succeeded Initialize Async Log Flusher...succeeded Starting B-tree Scanner...succeeded Init ReadAhead Daemon...succeeded Init DB Util Daemon...succeeded Initializing DBSPACETEMP list...succeeded Init Auto Tuning Daemon...succeeded Initializing dataskip structure...succeeded Updating Global Row Counter...succeeded Forking onmode_mon thread...succeeded Creating periodic thread...succeeded Creating periodic thread...succeeded Verbose output complete: mode = 2
再次查看集群状态:
1 2 3 4 5 6 7 8 9 10 11 [gbasedbt@ssc02 ~]$ onstat -g cluster Your evaluation license will expire on 2025-12-11 00:00:00 Updatable (SDS) -- Up 00:01:55 -- 11142884 Kbytes Primary Server:ha_pri Index page logging status: Disabled Server ACKed Log Supports Status (log , page) Updates ha_ssc 13,3045 Yes SYNC(SDS),Connected,Active
此时 Supports Updates 状态将变为 Yes,即辅节点进入可更新状态:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [gbasedbt@ssc02 ~]$ dbaccess - - > database gbasedb; 数据库已被选用。 > create table test (id int, name varchar(20)); 表已建妥。 > > insert into test values(1, 'lucifer' ); 1 行被插入。 > select * from test ; id name 1 lucifer 查询到 1 行。
辅节点可以正常建表插入数据。
连接管理器 CM CM 介绍 连接管理器 CM 为单独组件,不依赖数据库服务,可独立运行于仲裁服务器,为了节省服务器资源,CM 与数据库 SERVER 运行于同一服务器,CM 以组的形式和数据库集群交叉部署,如仲裁 CM 和主节点配置为不位于同一服务器,确保某一服务器故障集群可正常切换,由于 CM 和数据库 SERVER 运行于同一服务器,不再单独配置 sqlhosts 文件,与 server 共用同一 sqlhosts 文件,该文件在前述章节已配置。
CM 可以配置一个也可以配置多个,如果在两个数据库节点上部署 CM,优先级最高的 CM 尽量不要与数据库 Primary 节点在一台服务器上。CM 优先级可以通过 PRIORITY 参数来区分,参数数值越大,优先级越低。CM 可以部署在数据库服务器节点上,也可以部署在应用节点上,不管在哪部署都需要配置互信,在实际生产中,推荐在应用节点上部署 CM。
CM 集成在 CSDK 安装包里,之前章节已经在主辅节点都部署了 CSDK(CSDK 的版本号需与数据库版本号一致)。
CM 连接方式 连接管理器可以重定向客户机连接请求或充当代理服务器并处理所有客户机/服务器通信。使用服务级别协议 MODE=REDIRECT 或 MODE=PROXY 属性可指定连接管理器如何处理客户机连接请求。
那么分别使用代理方式和重定向方式会有什么不同呢?
重定向方式 在重定向方式下,连接管理器将相应服务器节点、IP 地址和端口号返回给发出连接请求的客户机应用程序。然后,客户机应用程序使用连接管理器提供的 IP 地址和端口号来连接到指定的数据库服务器。
代理方式 在代理方式下,连接管理器充当代理服务器,并管理客户机与数据库服务器的通信。当客户机应用程序无法连接到位于防火墙后面的数据库服务器时,请使用代理方式。要避免连接管理器成为单个故障点,在使用代理方式时,请配置多个连接管理器实例。
配置 CM 文件 接下来,需要配置文件,在安装录下的 etc 目录下有 cmsm.cfg.sample.all,也就是配置文件的模板,可以根据需求,按此文件进行配置。
创建配置文件,使用 gbasedbt 用户执行:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 [gbasedbt@ssc01 ~]$ cat <<-\EOF>$GBASEDBTDIR /etc/cmsm.cm1 NAME CM1 LOGFILE ${GBASEDBTDIR} /tmp/cm1.log SQLHOSTS LOCAL LOG 1 DEBUG 0 CLUSTER CLUSTER1 { GBASEDBTSERVER db_group SLA oltp_update1 DBSERVERS=PRI WORKERS=8 MODE=redirect USEALIASES=OFF SLA oltp_read1 DBSERVERS=SDS WORKERS=8 MODE=redirect USEALIASES=OFF FOC ORDER=ENABLED TIMEOUT=10 RETRY=3 PRIORITY=2 } EOF [gbasedbt@ssc02 ~]$ cat <<-\EOF>$GBASEDBTDIR /etc/cmsm.cm2 NAME CM2 LOGFILE ${GBASEDBTDIR} /tmp/cm2.log SQLHOSTS LOCAL LOG 1 DEBUG 0 CLUSTER CLUSTER2 { GBASEDBTSERVER db_group SLA oltp_update2 DBSERVERS=PRI WORKERS=8 MODE=redirect USEALIASES=OFF SLA oltp_read2 DBSERVERS=SDS WORKERS=8 MODE=redirect USEALIASES=OFF FOC ORDER=ENABLED TIMEOUT=10 RETRY=3 PRIORITY=1 } EOF
📢注意 :CM 配置文件中的 PRIORITY 是 CM 的优先级,数字越大,优先级越小。我们把优先级高的(也就是熟悉小的)CM 部署在辅节点:
主节点 cmsm.cm1 文件中为 PRIORITY=1;
辅节点 cmsm.cm2 文件中为 PRIORITY=2;
修改 ONCONFIG 文件 配置完 CM 文件,我们还需确认一下 ONCONFIG 文件中的两个参数:DRAUTO 、HA_FOC_ORDER 。
DRAUTO 参数 :确定故障切换方式的参数,部署 CM,让 CM 来控制故障转移,需要把 DRAUTO 参数设置成 3。
HA_FOC_ORDER 参数 :故障转移规则,该值默认值为 SDS/HDR/RSS;也就是说如果主节点发生故障,先转移到 SSC 辅助服务器,然后是 HAC 辅助服务器,再然后是 RHAC 辅助服务器。。
使用 gbasedbt 用户修改 $ONCONFIG 配置文件(所有节点均执行):
1 2 3 4 5 6 [gbasedbt@ssc01 ~]$ sed -i "s#^DRAUTO.*#DRAUTO 3#g" $GBASEDBTDIR /etc/$ONCONFIG [gbasedbt@ssc01 ~]$ cat $GBASEDBTDIR /etc/$ONCONFIG | grep HA_FOC_ORDER HA_FOC_ORDER SDS,HDR,RSS
配置好之后就可以启动CM来监听数据库状态了。
启动 CM 为了方便在启动 CM 时不指定 config 参数,建议配置环境变量:
1 2 3 4 5 6 7 [gbasedbt@ssc01 ~]$ echo "export CMCONFIG=\$GBASEDBTDIR/etc/cmsm.cm1" >>/home/gbasedbt/.bash_profile [gbasedbt@ssc01 ~]$ source /home/gbasedbt/.bash_profile [gbasedbt@ssc02 ~]$ echo "export CMCONFIG=\$GBASEDBTDIR/etc/cmsm.cm2" >>/home/gbasedbt/.bash_profile [gbasedbt@ssc02 ~]$ source /home/gbasedbt/.bash_profile
使用 gbasedbt 用户在所有节点均执行 CM 启动命令:
1 2 3 [gbasedbt@ssc01 ~]$ oncmsm Connection Manager started successfully Please check GBase Connection Manager log file: /opt/gbase/tmp/cm1.log
如显示 Connection Manager started successfully 表示启动成功。
执行 onstat -g cmsm 查看数据库是否已连接到 CM:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [gbasedbt@ssc01 ~]$ onstat -g cmsm Your evaluation license will expire on 2025-12-11 00:00:00 On-Line -- Up 01:40:55 -- 11142884 Kbytes Unified Connection Manager: CM1 Hostname: ssc01 CLUSTER CLUSTER1 LOCAL GBasedbt Servers: db_group SLA Connections Service/Protocol Rule oltp_update1 0 9300/onsoctcp DBSERVERS=PRI WORKERS=8 MODE=redirect USEALIASES=OFF oltp_read1 0 9200/onsoctcp DBSERVERS=SDS WORKERS=8 MODE=redirect USEALIASES=OFF Failover Arbitrator: Failover is enabled ORDER=SDS,HDR,RSS PRIORITY=2 TIMEOUT=10 Unified Connection Manager: CM2 Hostname: ssc02 CLUSTER CLUSTER2 LOCAL GBasedbt Servers: db_group SLA Connections Service/Protocol Rule oltp_update2 0 9300/onsoctcp DBSERVERS=PRI WORKERS=8 MODE=redirect USEALIASES=OFF oltp_read2 0 9200/onsoctcp DBSERVERS=SDS WORKERS=8 MODE=redirect USEALIASES=OFF Failover Arbitrator: Active Arbitrator, Primary is up ORDER=SDS,HDR,RSS PRIORITY=1 TIMEOUT=10
可以看到,HA_FOC_ORDER 参数未作修改,用默认值的时候,发生故障,故障转移的顺序为 SSC、HAC、RHAC。
写在最后 GBase 8s SSC 共享集群和我之前接触的很多数据库集群部署方式差别比较大,所以还是花费了不少时间去查阅资料,在文字斟酌上也耗费了不少时间,希望能让读者更清晰的了解整个安装思路,本文目前应该是全网最详尽的 GBase 8s SSC 部署步骤了,希望能帮助到你。
如果有遗漏或者不足的地方,欢迎评论区补充或者投稿,感谢阅读!
往期精彩文章
达梦数据库安装最详细教程 一招教你学会达梦数据库的免密登录 一文讲透达梦数据库的大小写敏感 效率翻倍!达梦数据库 disql 使用技巧全攻略 达梦数据库参数配置与一键优化指南 达梦 AWR 报告快速上手指南 金仓数据库 KingbaseES V9 单机安装指南 KingbaseES KSQL 免密登录的几种方式 KingbaseES 控制文件冗余与恢复秘籍 金仓 KingbaseES RAC 入门指南 金仓 KDTS 初探:Oracle 到 KingbaseES 一键迁移 GBase 8a MPP 集群部署最佳实践 GBase 8a GDCA 认证课后练习题大全(题库) 南大通用 GBASE 8s V8.8 数据库最全安装指南 GBase 8s GDCA 认证课后练习题大全(题库) GBase 8s 数据库巡检报告及一键巡检脚本 YashanDB 一键生成 AWR 报告 YashanDB 数据库安装部署 YashanDB 共享集群(YAC)入门指南与技术详解 基于 TencentOS 3 的 OpenTenBase 集群搭建实践
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」