1. 首页 > 国产数据库教程 > GBase教程 > 正文

数据库教程FGMT85:国产数据库GBase数据库工程师培训实战教程(南大通用分布式数据库)

数据库教程FGMT85:国产数据库GBase数据库工程师培训实战教程(南大通用分布式数据库)

## 前言与内容大纲介绍

风哥教程本文面向希望系统掌握南大通用 GBase 数据库的工程师,内容覆盖 GBase 8a MPP 分布式集群的架构原理、规划准备、安装部署、扩容收缩、节点替换、日常运维,以及 GBase 8s 事务型数据库的安装与初始化。本套风哥教程以生产环境可落地为目标,理论部分讲清”为什么这样做”,实战部分给出可逐条执行的步骤与命令,所有示例均按 64G 内存、8 颗 CPU 的服务器规格设定,安装目录统一为 /fgedudb,数据库名、实例名统一为 fgedudb,业务用户名统一为 fgedu,示例节点主机名固定为

风哥先说明本套风哥教程的内容组织。全文分为四大块:第一块是前言与大纲介绍,帮助读者建立整体认知;第二块是理论篇,讲解 GBase 产品定位、8a MPP 分布式架构、8s 事务型架构以及集群规划与环境准备的底层原理;第三块是实战篇,按”环境准备—单 VC 安装—扩容—收缩—多 VC—节点替换—日常管理维护—8s 安装”的顺序展开,每一步都给出命令与预期结果;第四块是风哥针对本文总结,提炼关键操作要点与排错思路。

风哥教程本文的大纲对应六大模块:模块一为南大通用 GBase 数据库基础与架构,包含产品介绍、8a 架构与功能特性;模块二为集群规划与环境准备;模块三为 GBase 8a 分布式集群单 VC 模式的安装配置与管理,包含七节点安装、七加六扩容、十三缩六收缩;模块四为多 VC 模式的安装、协调节点与数据节点扩容收缩;模块五为日常管理与维护入门,包含 SQL 基础与开发、备份恢复与数据加载、日常维护与监控;模块六为 GBase 8s 事务型数据库安装过程。读者可以按顺序通读,也可以在实际操作时直接跳到对应实战章节查阅命令。

需要提前说明的是,本套风哥教程中的 IP 地址、密码、目录均为教学示例,生产环境中应按实际网络规划与安全规范替换;命令中的操作系统管理员用户为 fgedu,与数据库业务用户 fgedu 同名仅为教学简化,生产环境建议区分。

学习本套风哥教程建议按”先理论后动手”的顺序:先读理论篇建立组件与概念的整体地图,再对照实战篇逐台敲命令,环境允许时建议准备两台以上虚机复刻安装与扩缩容过程。读者需要具备 Linux 基础操作、s-hell 命令与关系型数据库 SQL 基础,不需要预先了解 GBase 产品特性。风哥在每个实战步骤后都标注了判定标准与常见报错,读者遇到问题时先对照本节自检,再查阅官方产品手册对应章节。

—

## 理论篇

### 一、GBase 产品家族与本套风哥教程的定位

南大通用 GBase 产品线覆盖分析型与事务型两大类。GBase 8a MPP Cluster 是面向大数据量分析场景的分布式关系型数据库,采用 s-hared-Nothing 无共享架构,数据按分片分布在多个数据节点上,查询由协调节点并行下发、各节点并行计算后汇聚结果,适合数仓、报表、历史数据归档等 OLAP 场景。GBase 8s 是面向联机事务处理的事务型数据库,采用经典的共享内存架构,支持高并发短事务、行级锁、日志恢复,适合核心业务系统。本套风哥教程以 8a MPP 集群为主线,最后补充 8s 的安装与初始化,帮助工程师同时掌握分析型与事务型两类国产数据库的部署能力。

8a MPP 的核心价值在于横向扩展:单节点容量不足时,增加数据节点即可线性扩展存储与计算能力;节点故障时,分片副本自动接管,业务不中断。理解这一点,才能理解后续扩容、收缩、节点替换等操作为什么要围绕”分片分布”展开。

### 二、GBase 8a MPP 架构原理

#### 2.1 三大核心组件

GBase 8a MPP Cluster 在逻辑上由三类进程组件构成,理解组件职责是看懂所有管理命令的前提。

第一类是 gcware,即集群协调组件。gcware 运行在协调节点上,负责集群元数据管理、节点状态仲裁、分布式锁、failover 接管记录与事件日志(eventlog)的存储与分发。它是集群的”大脑”,本身不存储业务数据。gcware 通常部署三个节点形成仲裁多数派,当在线的 gcware 节点数小于总数一半时,集群为保护数据安全会停用 gcware 服务,此时任何数据库操作都无法执行,因此协调节点一般采用奇数个部署。

第二类是 gcluster,即协调节点(Coordinator)。gcluster 接收客户端 SQL,完成语法解析、优化器生成执行计划、把计算任务并行下发给数据节点,再汇聚各节点结果返回客户端。gcluster 不存储业务数据,只保存元数据与执行上下文。客户端通过 gccli 连接的就是 gcluster,默认端口 5258。

第三类是 gnode,即数据节点(Data Node)。gnode 负责存储分片数据并执行本地计算,是真正的”存储与计算单元”。每个 gnode 上还运行 syncserver 同步服务,负责主备分片之间的数据同步。

此外,gcrecover 是自动恢复服务,当节点重新上线或分片不一致时,由它根据备份分片自动把数据补齐。

#### 2.2 VC 虚拟集群与 root cluster、free node

VC(Virtual Cluster,虚拟集群)是 8a 对数据节点的逻辑划分单位。一个物理集群可以划分出多个 VC,每个 VC 拥有独立的分片分布(distribution)与独立的数据节点集合,VC 之间数据隔离,可分别启停、分别做资源管理。

集群安装完成后,所有数据节点先进入 root cluster(根集群)。未分配到任何 VC 的数据节点称为 free node(空闲节点)。多 VC 模式下,新安装的数据节点默认先成为 free node,再通过 addnodes 命令加入指定 VC;单 VC 兼容模式下,节点直接进入默认集群。

#### 2.3 distribution 分片分布与 p、d 参数

distribution(分布信息表)描述每一条数据分片存放在哪个节点、主分片在哪个节点、备份分片在哪个节点。创建 distribution 时两个核心参数:p num 表示每个数据节点上存放的主分片数量,d num 表示每个主分片的备份份数,d 可取 0、1、2。p 值乘以数据节点总数不能超过 65535。

分布模式有两种:pattern 1 为负载均衡模式,按 rack(机架逻辑分组)调整分片摆放,使主备分片尽量落在不同 rack,是默认模式;pattern 2 为高可用模式,主分片自动完整备份到相邻节点,与 rack 无关,最多可承受集群内一半节点故障。

每个分片都有主分片(primary)与备份分片(duplicate)。当主分片所在节点故障,备份分片自动提升为主分片继续服务,这就是 8a 的高可用基础。d 为 1 表示一份备份,d 为 2 表示两份备份,备份越多可用性越高,但存储开销越大。

#### 2.4 集群模式与节点状态

集群有三种运行模式。NORMAL 为正常模式,可执行全部 SQL 操作;READONLY 为只读模式,扩容、备份、节点替换期间集群自动进入该模式,只允许查询,DDL、DML、加载操作排队等待模式恢复;RECOVERY 为恢复模式,执行集群级数据恢复时进入,该模式下禁止任何 DDL、DML、DQL 操作。管理员也可以用 gcadmin switchmode 手动切换模式。

节点模组进程状态分为 OPEN、CLOSE、OFFLINE、Failure、Unavailable:OPEN 表示正常;CLOSE 表示进程启动失败或意外关闭,常见原因是端口占用、配置文件权限或参数错误;OFFLINE 表示进程下线,一般为硬件断电、断网;Failure 表示节点被标识为故障,DDL、DML 不再下发到该节点而是记入 eventlog;Unavailable 表示节点被标识为不可用,必须通过节点替换才能恢复。数据一致性状态 DataState 为 0 表示正常,为 1 表示不一致。

#### 2.5 failover 机制

当正在执行 SQL 的 gcluster 协调节点故障时,gcware 中记录的 SQL 执行信息会被其他可用的 gcluster 依次领取并接管继续执行,这就是 failover。接管信息包含 commit id、数据库名、表名、SCN 号、类型、创建时间、原始节点、接管节点与接管次数,可用 gcadmin s-howfailover 查看。理解 failover 有助于排查协调节点故障后任务为何没有丢失。

#### 2.6 查询执行流程与哈希分布

一条 SQL 从客户端发出到返回结果,在 8a 内部经历五个阶段。第一,协调节点 gcluster 接收连接,完成词法分析、语法分析与语义检查。第二,优化器基于统计信息与分布信息生成分布式执行计划,决定哪些算子下推到数据节点、哪些在协调节点汇聚。第三,gcluster 把执行片段并行下发到所有相关 gnode。第四,各 gnode 在本地分片上并行执行扫描、过滤、连接、聚合,中间结果按哈希或广播方式在节点间重分布。第五,gcluster 汇聚各节点结果,做最终排序、聚合并返回客户端。

数据分布采用哈希分片:建表时指定分布列(distributed by),系统对分布列计算哈希值,按分片映射表把行落到对应主分片,再按 d 参数复制备份分片到其他节点。选择分布列的原则是高基数、查询高频过滤与连接使用的列,尽量让关联键落在同一节点,避免跨节点数据重分布带来的网络开销。若分布列选择不当,会出现数据倾斜,个别节点负载远高于其他节点,这是分析型集群最常见的性能问题。

rack 是 VC 内节点的逻辑分组,pattern 1 模式下主备分片尽量落在不同 rack,一个 rack 整体故障时另一个 rack 的备份仍可服务;pattern 2 与 rack 无关,采用相邻节点互备,适合机柜物理分隔的部署。两种模式都不能同时容忍同一分片的主备节点同时故障。

#### 2.7 与传统单机关系型数据库的差异

传统 Oracle、MySQL 单机数据库垂直扩展,靠升级单台服务器的 CPU、内存、磁盘提升性能,容量与吞吐存在物理上限。8a MPP 水平扩展,增加节点即可线性增加存储与计算能力,代价是引入了分片管理、分布式一致性、扩缩容重分布等复杂性。工程师迁移思路也要转变:单机时代关注单实例参数调优,MPP 时代还要关注分布列设计、分片均衡、节点健康度、重分布窗口与备份策略。

### 三、GBase 8s 事务型架构原理

GBase 8s 采用共享内存(s-hared Memory)架构,所有数据库进程访问同一块共享内存区,不依赖网络即可完成大部分事务处理,因此单节点事务响应快。其存储单位是 dbspace(数据库空间),dbspace 由一个或多个 chunk(块)组成,chunk 对应磁盘上的文件或裸设备;rootdbs 是初始根空间,存放系统表与元数据。

日志体系由物理日志与逻辑日志构成。物理日志记录数据页的前映像,用于快速恢复;逻辑日志记录事务的前滚与回滚信息,用于崩溃恢复与备份恢复。检查点(checkpoint)周期性把共享内存中的脏页刷写到磁盘,并同步日志位置,是实例崩溃后能够一致恢复的关键。

实例通过 oninit 启动、onmode 管理运行模式、onstat 查看状态。关键配置文件有三个:onconfig 是主参数文件,定义 ROOTPATH、SERVERNUM、DBSERVERNAME、s-hM_SIZE、BUFFERPOOL、TAPEDEV、LTAPEDEV 等;sqlhosts 定义监听地址与端口,默认端口 9088;profile 环境变量文件定义 GBASEDBTSERVER、GBASEDBTDIR、ONCONFIG 等环境变量。备份工具为 ontape(简单磁带/文件备份)与 ON-Bar(企业级存储管理)。

按 64G 内存、8 CPU 的规格,8s 的共享内存不宜超过系统内存的一半,建议 s-hM_SIZE 取 20480MB 左右,缓冲池按实例实际负载分配,避免与操作系统、其他服务争抢内存。

8s 的进程模型分为主线程(listener)与若干 VP(虚拟处理器):CPU VP 负责执行 SQL 与事务,IO VP 负责磁盘读写,AIO VP 负责异步 IO,日志 VP 负责逻辑日志写入,恢复 VP 负责崩溃恢复。CPU_VPS 参数决定 CPU VP 数量,按 8 颗 CPU 取 8,使每个 CPU VP 绑定一颗核心,避免上下文切换。

事务隔离级别支持脏读、提交读、可重复读与可串行化,默认提交读。锁粒度分为行锁、页锁与表锁,OLTP 高并发场景优先使用行锁,批量加载与 DDL 期间可能升级为表锁。日志模式有缓冲日志(buffered)、非缓冲日志(unbuffered)与 ANSI 日志,生产环境核心库建议使用非缓冲日志,事务提交即落盘,崩溃时不丢已提交事务。

### 四、集群规划与环境准备理论

#### 4.1 资源规划(64G 内存、8 CPU)

本套风哥教程所有示例节点均按 64G 内存、8 颗 CPU 规划。8a 数据节点上,gnode 内存池建议分配约 30G(gbase_memory_pool_size 取 32212254720 字节),排序缓冲 sort_buffer_size 取 2G,连接/哈希缓冲 join_buffer_size 取 2G,哈希分桶数与并行线程数按 8 颗 CPU 取 8,剩余内存留给操作系统与 syncserver。协调节点不存数据,内存占用低于数据节点。磁盘方面,数据目录与日志目录建议分盘存放,避免日志与数据争抢 IO。

#### 4.2 操作系统基线要求

集群安装前,所有节点必须完成统一的操作系统基线配置,否则 gcinstall.py 会在预检阶段报错。第一,主机名与 /etc/hosts:每个节点设置唯一主机名,并在 /etc/hosts 中配置 IP 与主机名的对应关系,本套风哥教程示例节点为 fgedu-net-cn1、fgedu-net-cn2。第二,关闭 firewalld 防火墙并禁止开机自启,避免集群内部多端口通信被拦截。第三,关闭 SELinux,或设置为 permissive 模式,避免安装脚本写入被策略拦截。第四,时间同步:所有节点通过 chrony 或 ntp 同步到同一时间源,集群对时间一致性敏感,时间偏差过大会导致元数据同步异常。第五,Ss-h 互信:dbaUser 用户在所有节点之间免密互通,安装与扩容脚本依赖 Ss-h 推送。第六,内核参数与资源限制:按 ipcs -l 对照调整共享内存、信号量、文件句柄数;关闭 RemoveIPC(RHEL7 及以上需注意,该特性会在用户登出时清理 IPC 资源,影响数据库进程)。第七,创建统一的 dbaUser 操作系统用户与组,安装目录 /fgedudb 的属主改为该用户。

#### 4.3 网络与端口规划

8a 集群内部使用多播(mcastAddr、mcastPort)做节点发现,业务端口默认 5258,syncserver 同步端口、gcrecover 恢复端口等由安装程序自动分配。规划时应保证集群节点之间网络互通、带宽充足,扩容与节点替换期间数据搬移对网络要求较高。生产环境建议使用独立的业务内网,避免与公网混用。

#### 4.4 容量估算与备份窗口

容量估算按”原始数据量乘以副本数乘以冗余系数”计算。以 d=1 为例,总存储约为原始数据量的两倍,再预留百分之二十到三十的冗余空间用于临时表、排序落盘与重分布中间数据。64G 内存节点上,单节点可承载的数据量与磁盘转速、表宽、并发查询数相关,规划时先按业务五年增长量倒推节点数,再用 p num 把主分片均匀切到各节点,保证单节点分片数与磁盘容量匹配。

备份窗口要结合业务低峰安排。8a 的 gcrcman 全量备份对集群只读,不影响查询,但会占用磁盘与网络带宽;增量备份(level 1)只备上一次备份后变化的分片,速度快、空间小。实践中建议每周一次 level 0 全备、每日一次 level 1 增备,备份目录与数据目录分盘,备份保留期按合规要求设定。

#### 4.5 64G 8CPU 规格的参数取值依据

按 64G 内存、8 颗 CPU 的规格,8a 数据节点 gbase_memory_pool_size 取 32212254720 字节(即 30G),留给操作系统约 4G、syncserver 与 gcrecover 约 4G、其余为预留;sort_buffer_size 取 2G 是单次排序可使用的最大内存,join_buffer_size 取 2G 用于哈希连接,哈希分桶数与并行执行线程数取 8,与 CPU 核数对齐,避免超订导致上下文切换。协调节点不需要大内存池,主要消耗在结果汇聚与连接管理。8s 的 s-hM_SIZE 取 20480MB 是共享内存总量,不超过物理内存一半,防止 OOM 风险。

—

## 实战篇

### 实战一:操作系统环境准备(所有节点通用)

本套风哥教程以 fgedu-net-cn1(192.168.10.11,安装管理节点)与 fgedu-net-cn2(192.168.10.12,示例数据节点)为演示主机,其余节点操作完全相同,按 IP 逐台执行。以下命令均以 root 用户执行。

**步骤 1:设置主机名并配置 /etc/hosts。**

在 fgedu-net-cn1 上:

“`
# hostnamectl set-hostname fgedu-net-cn1
“`

在 fgedu-net-cn2 上:

“`
# hostnamectl set-hostname fgedu-net-cn2
“`

编辑 /etc/hosts,所有节点保持一致:

“`
# cat >> /etc/hosts << ‘EOF’
192.168.10.11 fgedu-net-cn1
192.168.10.12 fgedu-net-cn2
EOF
“`

其余节点按同样方式追加各自 IP 与主机名的对应关系,确保任意节点之间可以用主机名互相解析。

**步骤 2:关闭防火墙并禁止开机自启。**

“`
# systemctl stop firewalld
# systemctl disable firewalld
# systemctl status firewalld | grep Active
“`

**步骤 3:关闭 SELinux。**

“`
# setenforce 0
# sed -i ‘s/^SELINUX=.*/SELINUX=disabled/’ /etc/selinux/config
# getenforce
“`

输出应为 Disabled 或 Permissive。

**步骤 4:配置时间同步。**

“`
# yum install -y chrony
# systemctl enable chronyd
# systemctl start chronyd
# chronyc sources
“`

所有节点指向同一时间源,确认同步成功后再继续。

**步骤 5:创建 dbaUser 用户与组。**

本套风哥教程统一使用操作系统用户 fgedu 作为集群管理员:

“`
# groupadd fgedu
# useradd -g fgedu fgedu
# echo ‘Fgedu@123’ | passwd –stdin fgedu
“`

**步骤 6:创建安装目录并授权。**

“`
# mkdir -p /fgedudb/gcinstall /fgedudb/data /fgedudb/log /fgedudb/backup
# chown -R fgedu:fgedu /fgedudb
# chmod 755 /fgedudb
“`

**步骤 7:配置内核参数与资源限制。**

先查看当前 IPC 参数:

“`
# ipcs -l
“`

按安装手册要求调整 /etc/sysctl.conf,追加以下内容(64G 内存规格):

“`
# cat >> /etc/sysctl.conf << ‘EOF’
kernel.s-hmmax = 68719476736
kernel.s-hmall = 16777216
kernel.sem = 250 32000 100 128
net.core.somaxconn = 65535
net.ipv4.tcp_max_tw_buckets = 65535
EOF
# sysctl -p
“`

编辑 /etc/security/limits.conf,追加:

“`
# cat >> /etc/security/limits.conf << ‘EOF’
fgedu soft nofile 1048576
fgedu hard nofile 1048576
fgedu soft nproc 65535
fgedu hard nproc 65535
EOF
“`

关闭 RemoveIPC(RHEL7 及以上):

“`
# mkdir -p /etc/systemd/logind.conf.d
# cat > /etc/systemd/logind.conf.d/removeipc.conf << ‘EOF’
[Login]
RemoveIPC=no
EOF
# systemctl restart systemd-logind
“`

**步骤 8:配置 Ss-h 互信。**

在 fgedu-net-cn1 上切换到 fgedu 用户生成密钥并分发到所有节点:

“`
# su – fgedu
$ ss-h-keygen -t rsa -N ” -f ~/.ss-h/id_rsa
$ ss-h-copy-id fgedu@192.168.10.11
$ ss-h-copy-id fgedu@192.168.10.12
“`

其余节点同样执行 ss-h-copy-id 完成双向互信,并用 `ss-h fgedu@192.168.10.12 hostname` 验证免密登录。

**步骤 9:执行系统环境脚本 SetSysEnv.py。**

把安装包中的 SetSysEnv.py 拷贝到每个节点并以 root 执行:

“`
# scp /fgedudb/gcinstall/SetSysEnv.py root@192.168.10.12:/fgedudb/
# python /fgedudb/SetSysEnv.py –dbaUser=fgedu –installPrefix=/fgedudb –cgroup
“`

参数 –installPrefix 必须与 demo.options 中的 installPrefix 一致,–dbaUser 必须与 demo.options 中的 dbaUser 一致,–cgroup 在使用资源管理功能时必加。gcware 独立部署的节点不需要执行该脚本。

**步骤 10:环境自检。**

安装前在所有节点上逐项自检,避免安装中途报错返工:

“`
# hostname && hostname -f
# getent hosts fgedu-net-cn1 fgedu-net-cn2
# systemctl is-active firewalld
# getenforce
# timedatectl
# su – fgedu -c “ss-h -o BatchMode=yes fgedu@192.168.10.12 hostname”
# free -g && nproc
# df -h /fgedudb
“`

主机名解析必须返回正确 IP,互信测试不能提示输入密码,内存与 CPU 满足 64G、8 核规格,/fgedudb 所在盘预留充足空间。自检全部通过后再进入安装环节。

风哥数据库教程 itpux-com

### 实战二:单 VC(兼容模式)七节点安装

**步骤 1:上传并解压安装包。**

以 fgedu 用户在 fgedu-net-cn1 上操作:

“`
$ su – fgedu
$ cp /tmp/GBase8a_MPP_Cluster-NoLicense-9.5.3.17-redhat7.3-x86_64.tar.bz2 /fgedudb/
$ cd /fgedudb
$ tar xjf GBase8a_MPP_Cluster-NoLicense-9.5.3.17-redhat7.3-x86_64.tar.bz2
$ ls /fgedudb/gcinstall
“`

解压后生成 gcinstall 目录。带 license 的版本还需准备 hostslicense.txt 许可文件。

**步骤 2:编辑 demo.options。**

进入 gcinstall 目录,编辑安装配置文件。本套风哥教程初始集群为七节点:三个协调节点(192.168.10.11、.12、.13),四个数据节点(.14、.15、.16、.17),其中 .11 即 fgedu-net-cn1,.12 即 fgedu-net-cn2:

“`
$ vi /fgedudb/gcinstall/demo.options
“`

“`
installPrefix= /fgedudb
coordinateHost = 192.168.10.11,192.168.10.12,192.168.10.13
coordinateHostNodeID = 11,12,13
dataHost = 192.168.10.11,192.168.10.12,192.168.10.13,192.168.10.14,192.168.10.15,192.168.10.16,192.168.10.17
#existCoordinateHost =
#existDataHost =
gcwareHost = 192.168.10.11,192.168.10.12,192.168.10.13
gcwareHostNodeID = 11,12,13
dbaUser = fgedu
dbaGroup = fgedu
dbaPwd = ‘Fgedu@123’
rootPwd = ‘Root@123’
mcastAddr = 226.94.1.39
mcastPort = 5493
“`

字段说明:installPrefix 为软件安装目录;coordinateHost 为协调节点列表;dataHost 为数据节点列表;gcwareHost 为协调组件节点;dbaUser、dbaGroup、dbaPwd 为操作系统管理员用户与密码;rootPwd 为各节点 root 统一密码;mcastAddr、mcastPort 为集群多播发现地址与端口。密码含特殊符号时用单引号包围,无需转义。

填写注意事项:coordinateHost 与 gcwareHost 在单 VC 兼容模式下可以重合,即协调节点同时承担 gcware;coordinateHostNodeID、gcwareHostNodeID 是节点在集群内的唯一编号,与 IP 一一对应,扩容新增节点时编号不能与存量重复;dataHost 列表中协调节点 IP 同时出现,表示该节点既做协调又存数据;existCoordinateHost、existDataHost 在全新安装时注释掉,扩容时才填写存量节点;mcastAddr 使用 224.0.0.0 到 239.255.255.255 之间未被占用的 D 类地址,同一网络内多个集群必须使用不同多播地址,否则节点互相发现导致集群串扰。

风哥教程 113257174

**步骤 3:执行静默安装。**

必须在任意一个协调节点上以 dbaUser 执行:

“`
$ cd /fgedudb/gcinstall
$ ./gcinstall.py –silent=demo.options –license_file=/fgedudb/gcinstall/hostslicense.txt
“`

NoLicense 版本可省略 –license_file。安装过程中脚本会逐节点推送软件、创建目录、启动 gcware 与 gcluster、gnode 服务,全程无需人工干预。安装成功后会在 gcinstall 目录生成 gcChangeInfo.xml,用于描述数据分布方式。

**步骤 4:查看集群状态。**

“`
$ source ~/.gbase_profile
$ gcadmin
“`

正常输出中,协调节点与数据节点的 gcware、gcluster、gnode、syncserver 状态均为 OPEN,DataState 为 0,CLUSTER STATE 为 ACTIVE。

**步骤 5:创建 distribution。**

安装完毕且建立 distribution 之后,S首执行 SQL 前必须初始化节点数据映射。先创建分布信息,按 64G 内存、8 CPU 规格,每个数据节点主分片数 p 取 2,备份份数 d 取 1,采用 pattern 1 负载均衡模式:

“`
$ cd /fgedudb/gcinstall
$ gcadmin distribution gcChangeInfo.xml p 2 d 1 pattern 1 db_user fgedu db_pwd ‘Fgedu@123’
“`

**步骤 6:初始化节点数据映射。**

用数据库 root 用户登录(初始密码 Admin2O11O531),执行 initnodedatamap:

“`
$ gccli -uroot -pAdmin2O11O531
gbase> initnodedatamap;
Query OK, 0 rows affected
“`

**步骤 7:验证分片分布。**

“`
$ gcadmin s-howdistribution node
“`

输出中可看到 Distribution ID、各节点 primary 分片与 duplicate 分片的对应关系,确认主备分片落在不同节点。

**步骤 8:修改 root 初始密码并创建业务用户。**

安装完成后 root 使用初始密码 Admin2O11O531,生产环境必须立即修改:

“`
$ gccli -uroot -pAdmin2O11O531
gbase> set password for root = password(‘Fgedu@123’);
gbase> create user ‘fgedu’@’%’ identified by ‘Fgedu@123’;
gbase> grant all privileges on fgedudb.* to ‘fgedu’@’%’;
gbase> flus-h privileges;
“`

**步骤 9:写入测试数据并验证并行查询。**

“`
gbase> create database fgedudb;
gbase> use fgedudb;
gbase> create table t_test (id int, info varchar(64)) distributed by (‘id’) key columns;
gbase> insert into t_test values (1,’node-a’),(2,’node-b’),(3,’node-c’);
gbase> select count(*) from t_test;
“`

再用 gcadmin s-howcluster 复核所有节点 OPEN、DataState 为 0、CLUSTER STATE 为 ACTIVE。至此单 VC 七节点集群安装完成。

**常见安装报错与处理:** gcinstall.py 在预检阶段报 Ss-h 不通,先检查 fgedu 用户互信与 /etc/hosts;报端口占用,确认旧进程残留并执行 gcluster_services all stop;报权限错误,确认 /fgedudb 属主为 fgedu:fgedu;报多播地址冲突,更换 mcastAddr 为其他 D 类地址;安装卡在启动 gnode,检查 SetSysEnv.py 是否在新节点执行、内核参数是否生效。

网上搜索风哥教程可以学习全套数据库教程

### 实战三:扩容七加六(七节点扩到十三节点)

扩容目标:在原有七节点基础上增加六个数据节点(192.168.10.21 至 .26),集群从七节点扩到十三节点。

**步骤 1:新节点环境准备。**

六个新节点按实战一的步骤完成主机名、/etc/hosts、防火墙、SELinux、时间同步、fgedu 用户、/fgedudb 目录授权、内核参数、Ss-h 互信,并执行 SetSysEnv.py:

“`
# python /fgedudb/SetSysEnv.py –dbaUser=fgedu –installPrefix=/fgedudb –cgroup
“`

**步骤 2:修改 demo.options。**

扩容时只填写新增节点,已存在的节点填入 existCoordinateHost、existDataHost:

“`
$ vi /fgedudb/gcinstall/demo.options
“`

“`
installPrefix= /fgedudb
#coordinateHost =
dataHost = 192.168.10.21,192.168.10.22,192.168.10.23,192.168.10.24,192.168.10.25,192.168.10.26
existCoordinateHost = 192.168.10.11,192.168.10.12,192.168.10.13
existDataHost = 192.168.10.11,192.168.10.12,192.168.10.13,192.168.10.14,192.168.10.15,192.168.10.16,192.168.10.17
dbaUser = fgedu
dbaGroup = fgedu
dbaPwd = ‘Fgedu@123’
rootPwd = ‘Root@123’
mcastAddr = 226.94.1.39
mcastPort = 5493
“`

**步骤 3:执行扩容安装。**

“`
$ cd /fgedudb/gcinstall
$ ./gcinstall.py –silent=demo.options –license_file=/fgedudb/gcinstall/hostslicense.txt
“`

安装完成后,新数据节点自动加入 root cluster 成为 free node。

**步骤 4:将新节点加入集群并创建新 distribution。**

单 VC 兼容模式下,安装程序自动调用 addnodes;若需手工加入,编辑 gcChangeInfo.xml 只填写新增节点:

“`
<?xml version=”1.0″ encoding=”utf-8″?>
<servers>
<rack>
<node ip=”192.168.10.21″ />
<node ip=”192.168.10.22″ />
<node ip=”192.168.10.23″ />
<node ip=”192.168.10.24″ />
<node ip=”192.168.10.25″ />
<node ip=”192.168.10.26″ />
</rack>
</servers>
“`

“`
$ gcadmin addnodes gcChangeInfo.xml
“`

创建带 extension 参数的新 distribution,使原有分片尽量保留在原节点,只把新增分片放到新节点:

“`
$ gcadmin distribution gcChangeInfo.xml p 2 d 1 extension pattern 1 db_user fgedu db_pwd ‘Fgedu@123′
“`

**步骤 5:初始化映射并重分布数据。**

“`
$ gccli -uroot -pAdmin2O11O531
gbase> initnodedatamap;
gbase> rebalance instance;
“`

查看重分布进度:

“`
gbase> select index_name,status,percentage,priority,host,distribution_id from gclusterdb.rebalancing_status;
“`

所有表状态为 COMPLETED、percentage 为 100 后,删除旧 distribution:

“`
$ gcadmin rmdistribution <旧Distribution ID>
“`

**步骤 6:验证扩容结果。**

“`
$ gcadmin s-howcluster
$ gcadmin s-howdistribution node
“`

确认十三个节点全部 OPEN、DataState 为 0,新分片均匀分布到新增节点。扩容期间集群自动进入 READONLY,完成后恢复 NORMAL。

extension 参数的作用是保留原有分片在旧节点上的摆放,只把新增分片放到新节点,避免一次性全量重分布造成长时间只读窗口;不带 extension 时,新 distribution 会按新节点数重新均衡所有分片,数据搬移量更大。观察重分布进度时,定期查询 gclusterdb.rebalancing_status,percentage 达到 100、status 为 COMPLETED 后才能执行 rmdistribution;若中途失败,不要删除旧 distribution,先修复失败节点、重新执行 rebalance instance,确认全部完成后再清理。扩容期间禁止执行 DDL 与数据加载,待集群恢复 NORMAL 后再开放业务。

扩容完成后做数据一致性校验:对比扩容前后各表行数,确认无丢失无重复:

“`
gbase> select table_name, table_rows from information_schema.tables
where table_schema=’fgedudb’ order by table_name;
gbase> select count(*) from fgedudb.orders;
“`

再用 s-howdistribution node 核对新增节点上的主备分片数量与其他节点均衡,分片数差异过大说明分布不均,需检查 p num 设置。

上51CTO搜索风哥可以学习全套数据库教程

### 实战四:收缩十三缩六(十三节点收回六节点)

收缩目标:从十三节点集群移除七个节点,保留六个节点。收缩前先确认待移除节点上的分片均有可用备份,避免数据丢失。

**步骤 1:编辑收缩用 gcChangeInfo.xml。**

只填写待移除节点:

“`
<?xml version=”1.0″ encoding=”utf-8″?>
<servers>
<rack>
<node ip=”192.168.10.15″ />
<node ip=”192.168.10.16″ />
<node ip=”192.168.10.17″ />
<node ip=”192.168.10.21″ />
<node ip=”192.168.10.22″ />
<node ip=”192.168.10.23″ />
<node ip=”192.168.10.24″ />
</rack>
</servers>
“`

**步骤 2:从集群移除数据节点。**

“`
$ gcadmin rmnodes gcChangeInfo.xml
“`

兼容模式下,被移除节点先变为 root cluster 中的 free node。

**步骤 3:创建收缩后的新 distribution。**

“`
$ gcadmin distribution gcChangeInfo.xml p 2 d 1 extension pattern 1 db_user fgedu db_pwd ‘Fgedu@123’
“`

**步骤 4:初始化映射并重分布。**

“`
$ gccli -uroot -pAdmin2O11O531
gbase> initnodedatamap;
gbase> rebalance instance;
“`

等待 rebalancing_status 全部 COMPLETED 后删除旧 distribution:

“`
$ gcadmin rmdistribution <旧Distribution ID>
“`

**步骤 5:卸载被移除节点的软件。**

在被移除节点上停止服务并卸载:

“`
$ gcluster_services all stop
$ gcware_services all stop
“`

然后修改 demo.options,coordinateHost 只保留保留节点,existCoordinateHost、existDataHost 填写保留节点,执行卸载安装即可。协调节点的移除直接卸载软件即可,无需 rmnodes。

**步骤 6:验证收缩结果。**

“`
$ gcadmin s-howcluster
$ gcadmin s-howdistribution node
“`

确认剩余六节点全部 OPEN、分片分布正常。

收缩前必须核对两点:一是待移除节点上的每一个主分片都至少有一个健康备份分片保留在剩余节点,二是剩余节点的磁盘容量能够承接迁出的数据。收缩同样经历 READONLY 窗口,rebalance instance 完成前不要卸载被移除节点的软件,否则备份分片来源丢失。收缩后用 s-howdistribution node 确认旧节点已不在任何 distribution 中,再执行卸载。协调节点收缩不涉及分片迁移,直接卸载软件即可,但协调节点总数建议保持奇数,避免仲裁多数派不足。

风哥 itpux-com

### 实战五:多 VC 模式安装、扩容与收缩

多 VC 模式指安装集群后用 gcadmin createvc 把数据节点划分为多个 VC,每个 VC 独立创建 distribution。前提是集群运行正常、root cluster 中存在 free node。

**步骤 1:生成并创建 VC1。**

“`
$ su – fgedu
$ cd /fgedudb/gcinstall
$ gcadmin createvc e create_vc1.xml
“`

编辑生成的 create_vc1.xml,填写 free node 的 IP:

“`
<?xml version=”1.0″ encoding=”utf-8″?>
<vc_name name=”vc1″ comment=”vc1 cluster”>
<nodes>
<node ip=”192.168.10.14″ />
<node ip=”192.168.10.15″ />
<node ip=”192.168.10.16″ />
</nodes>
</vc_name>
“`

执行创建:

“`
$ gcadmin createvc create_vc1.xml
“`

**步骤 2:为 VC1 创建 distribution。**

“`
$ cp gcChangeInfo.xml gcChangeInfo_vc1.xml
$ gcadmin distribution gcChangeInfo_vc1.xml p 2 d 1 pattern 1 db_user fgedu db_pwd ‘Fgedu@123’ vc vc1
“`

**步骤 3:初始化 VC1 节点映射。**

“`
$ gccli -uroot -pAdmin2O11O531
gbase> initnodedatamap;
“`

每个 VC 创建完 distribution 后都必须单独执行 initnodedatamap。

**步骤 4:按同样方式创建 VC2。**

“`
$ gcadmin createvc e create_vc2.xml
$ gcadmin createvc create_vc2.xml
$ gcadmin distribution gcChangeInfo_vc2.xml p 2 d 1 pattern 1 db_user fgedu db_pwd ‘Fgedu@123’ vc vc2
“`

VC 之间不能共享节点,createvc 配置文件中的 node IP 必须是 root cluster 中的 free node。

**步骤 5:多 VC 扩容——为 VC 添加数据节点。**

新节点安装软件后先成为 free node,再用 addnodes 加入指定 VC:

“`
$ gcadmin addnodes gcChangeInfo.xml vc1
$ gcadmin s-howcluster vc vc1
“`

为 VC 添加协调节点时,修改 demo.options 的 coordinateHost 与 existCoordinateHost,执行 gcinstall.py 后新协调节点自动加入协调节点集群。

**步骤 6:多 VC 收缩——把节点移出 VC。**

“`
$ gcadmin rmnodes gcChangeInfo.xml vc1
“`

被移除节点变为 root cluster 的 free node,再按需卸载。停止与删除 VC 使用:

“`
$ gcadmin stopvc vc1 fgedu ‘Fgedu@123’
$ gcadmin startvc vc1 fgedu ‘Fgedu@123′
$ gcadmin rmvc vc1
“`

删除 VC 前需先手工删除 gbase 库中该 VC 的资源管理信息,否则无法删除。

多 VC 的价值在于资源隔离:不同业务线、不同租户使用各自 VC,一个 VC 内的重分布或故障不影响其他 VC 的查询。VC 之间的数据互访需要通过外部导入导出或跨 VC 联邦查询,不能直接跨 VC JOIN。规划 VC 时,每个 VC 至少保留两个数据节点以支撑 d=1 的主备高可用,协调节点由全集群共享,不为单个 VC 独占。新增 VC 节点时,新节点先在 root cluster 中作为 free node 待命,再按业务需要分配,避免提前占用资源。

风哥 itpux-com

### 实战六:节点替换

节点替换适用于节点硬件故障、硬件升级两种场景。替换过程集群从 NORMAL 进入 READONLY,只允许查询,完成后恢复 NORMAL;节点状态经历 OFFLINE → UNAVAILABLE → REPLACE → ONLINE。替换协调节点时,同时替换的协调节点数不能超过协调节点总数的一半,否则集群进入锁定;替换数据节点时,不能同时替换主备分片所在的两个节点,必须保证分片有可用备份源。

**步骤 1:检查网络与分片状态。**

“`
$ gcadmin s-howcluster
$ gcadmin s-howdistribution node
“`

确认被替换节点的分片存在可用备份,网络畅通。

**步骤 2:把待替换节点置为 unavailable。**

“`
$ gcadmin setnodestate 192.168.10.14 unavailable
“`

置为 unavailable 后只能做替换操作,不能再改回 normal。

**步骤 3:清理故障节点的事件日志。**

“`
$ gcadmin rmfeventlog 192.168.10.14
“`

该命令删除该节点上的 ddl、dml、dmlstorage 事件日志,回答 yes 确认。

**步骤 4:准备替换机器。**

新机器操作系统版本与原节点一致,IP 改为被替换节点的 IP,删除旧 Ss-h 互信密钥,按实战一完成防火墙、SELinux、时间同步、fgedu 用户、目录授权与互信。

**步骤 5:执行替换。**

替换数据节点:

“`
$ cd /fgedudb/gcinstall
$ ./replace.py –host=192.168.10.14 –type=data –dbaUser=fgedu –dbaUserPwd=’Fgedu@123′ –generalDBUser=fgedu –generalDBPwd=’Fgedu@123′
“`

替换协调节点:

“`
$ ./replace.py –host=192.168.10.12 –type=coor –dbaUser=fgedu –dbaUserPwd=’Fgedu@123′ –generalDBUser=fgedu –generalDBPwd=’Fgedu@123′
“`

**步骤 6:导出并修改 distribution。**

替换完成后,用 getdistribution 导出当前分布信息,让被替换节点不再持有任何分片:

“`
$ gcadmin getdistribution <Distribution ID> distribution_info.xml
“`

编辑 distribution_info.xml:若被替换节点是主分片所在节点,把备份节点改为主分片并删除该节点;若被替换节点是备份分片节点,直接删除其 duplicatenodes 标签。再让 gcChangeInfo.xml 引用该文件:

“`
<?xml version=”1.0″ encoding=”utf-8″?>
<servers>
<cfgFile file=”distribution_info.xml” />
</servers>
“`

创建新 distribution:

“`
$ gcadmin distribution gcChangeInfo.xml
“`

**步骤 7:初始化映射、重分布、清理旧分布。**

“`
$ gccli -uroot -pAdmin2O11O531
gbase> initnodedatamap;
gbase> rebalance instance;
“`

“`
$ gcadmin rmdistribution <旧Distribution ID>
“`

**步骤 8:异常恢复。**

若 replace.py 被强杀或执行机器掉电,集群可能停在 READONLY 无法自行恢复,执行:

“`
$ gcadmin switchmode normal
“`

恢复 NORMAL 后继续操作。替换后用 gcadmin s-howcluster 确认节点状态为 ONLINE、DataState 为 0。

替换操作的三条红线:第一,被替换节点必须至少保留一个可用备份分片,否则 replace.py 无法取数,应先补备份再替换;第二,同一分片的主备节点不能同时替换,否则该分片无数据源;第三,协调节点同时替换数量不能超过总数一半,否则仲裁失效、集群锁定。替换期间集群只读,业务侧应安排在低峰窗口;替换完成后核对 s-howfailover 无新增接管记录、s-howddlevent 与 s-howdmlevent 无积压事件,再开放写入。

风哥教程 113257174

### 实战七:日常管理与维护

#### 7.1 gccli 登录与 SQL 基础开发

gccli 是客户端命令行工具,语法为 gccli -u<用户> -p<密码> [-h<协调节点IP>] [-P<端口,默认5258>] [-D<库名>] [-e “sql”]:

“`
$ gccli -ufgedu -p’Fgedu@123’ -h192.168.10.11 -P5258 -Dfgedudb
“`

多协调节点高可用时,-h 后用逗号分隔多个 IP。登录后创建数据库与分布表:

“`
gbase> create database fgedudb;
gbase> use fgedudb;
gbase> create table orders (
order_id bigint not null,
cust_id bigint,
amt decimal(18,2),
order_time datetime
) distributed by (‘order_id’) key columns;
gbase> create table orders_detail (
detail_id bigint not null,
order_id bigint,
item varchar(128),
qty int
) distributed by (‘order_id’) key columns;
“`

常用查询:

“`
gbase> select count(*) from fgedudb.orders;
gbase> select cust_id, sum(amt) from fgedudb.orders group by cust_id order by 2 desc limit 20;
“`

执行计划查看与索引使用:

“`
gbase> explain select count(*) from fgedudb.orders where order_time >= ‘2026-01-01’;
“`

explain 输出中关注是否做了分片裁剪、是否发生跨节点广播 JOIN、过滤条件能否命中分布列。8a 是分析型库,普通 B 树索引用于点查与小范围过滤,大表全表扫描反而依赖并行扫描,不要盲目建索引。

#### 7.2 数据加载与导出

本地文件加载,使用 LOAD DATA INFILE,支持 file://、ftp://、http://、hdp:// 协议:

“`
gbase> LOAD DATA INFILE ‘file://192.168.10.11/fgedudb/data/load/orders.txt’
INTO TABLE fgedudb.orders
FIELDS TERMINATED BY ‘|’
LINES TERMINATED BY ‘\n’;
“`

查看加载任务状态:

“`
gbase> select * from information_schema.load_status;
gbase> s-how load logs <task_id>;
“`

LOAD DATA 常用子句:指定错误行容忍度用 ERRORS NUM 限制跳过的坏行数,指定并发加载线程用 THREADS n,忽略首行表头用 IGNORE 1 LINES,分区表指定目标分区用 INTO PARTITION。加载失败先看 s-how load logs 报的具体行号与字段,常见原因是分隔符不匹配、字段类型转换失败、文件编码非 UTF-8;单文件过大时可按行拆分为多份并行加载,提高吞吐。加载完成后核对目标表行数与源文件行数一致,再统计关键字段汇总值做对账。

查询结果导出:

“`
gbase> select * from fgedudb.orders where order_time >= ‘2026-01-01’
INTO OUTFILE ‘/fgedudb/export/orders_2026.txt’
FIELDS TERMINATED BY ‘|’;
“`

表结构导出使用 gcdump:

“`
$ gcdump -uroot -pAdmin2O11O531 -B -R fgedudb > /fgedudb/backup/fgedudb_schema.sql
“`

权限管理与视图开发是日常开发的高频操作。创建只读账号并授权:

“`
gbase> create user ‘fgedu_ro’@’%’ identified by ‘Fgedu@123’;
gbase> grant select on fgedudb.* to ‘fgedu_ro’@’%’;
gbase> flus-h privileges;
“`

创建视图把高频聚合逻辑固化,应用侧只查视图,不直接暴露底层分片表:

“`
gbase> create view fgedudb.v_order_month as
select substr(order_time,1,7) mon, cust_id, sum(amt) total_amt, count(*) cnt
from fgedudb.orders
group by substr(order_time,1,7), cust_id;
gbase> select * from fgedudb.v_order_month order by total_amt desc limit 10;
“`

常用管理 SQL:查看库下表清单与分片行数:

“`
gbase> select table_schema, table_name, table_rows
from information_schema.tables
where table_schema=’fgedudb’;
gbase> select host, count(*) from gclusterdb.rebalancing_status group by host;
“`

查看当前连接与会话:

“`
gbase> s-how processlist;
gbase> kill <process_id>;
“`

#### 7.3 备份与恢复

备份工具 gcrcman.py 位于 $GCLUSTER_BASE/server/bin 下。参数 -d 指定备份目录,-P 为 dba 用户密码,-p 为数据库用户密码。

集群级全量备份:

“`
$ python $GCLUSTER_BASE/server/bin/gcrcman.py -d /fgedudb/backup -P ‘Fgedu@123’ -p ‘Fgedu@123’ -e “backup level 0”
“`

数据库级备份:

“`
$ python $GCLUSTER_BASE/server/bin/gcrcman.py -d /fgedudb/backup -P ‘Fgedu@123’ -p ‘Fgedu@123’ -e “backup database fgedudb level 0”
“`

表级备份:

“`
$ python $GCLUSTER_BASE/server/bin/gcrcman.py -d /fgedudb/backup -P ‘Fgedu@123’ -p ‘Fgedu@123’ -e “backup table fgedudb.orders level 0”
“`

查看备份信息:

“`
$ python $GCLUSTER_BASE/server/bin/gcrcman.py -d /fgedudb/backup -P ‘Fgedu@123’ -p ‘Fgedu@123’ -e “s-how backup”
“`

实例级恢复到最新备份点:

“`
$ python $GCLUSTER_BASE/server/bin/gcrcman.py -d /fgedudb/backup -P ‘Fgedu@123’ -p ‘Fgedu@123’ -e “recover”
“`

恢复到指定周期与备份点:

“`
$ python $GCLUSTER_BASE/server/bin/gcrcman.py -d /fgedudb/backup -P ‘Fgedu@123’ -p ‘Fgedu@123’ -e “recover 2 1”
“`

表级恢复前先删除待恢复表,恢复后必须执行 refres-h table:

“`
$ gccli -uroot -pAdmin2O11O531 -e “drop table fgedudb.orders”
$ python $GCLUSTER_BASE/server/bin/gcrcman.py -d /fgedudb/backup -P ‘Fgedu@123’ -p ‘Fgedu@123’ -e “recover table fgedudb.orders”
$ gccli -uroot -pAdmin2O11O531 -e “refres-h table fgedudb.orders”
$ gcluster_services all restart
“`

库级恢复前先 drop database,恢复后同样需要 refres-h 库内所有表或重启集群服务。

增量备份链以 level 0 全备为基线,后续 level 1 增备依次叠加;恢复时先恢复最近一次 level 0,再按时间顺序依次恢复其后的 level 1,gcrcman 会自动识别备份周期与备份点。备份目录需保留完整的备份链,删除中间某份备份会导致其后的增备无法使用。表级恢复只针对单表,恢复前必须 drop table,恢复后执行 refres-h table 让元数据生效,再重启 gcluster 服务;库级恢复会覆盖整库,操作前先导出表结构与权限定义,避免恢复后丢失。

风哥数据库教程 itpux-com

#### 7.4 监控巡检

日常巡检使用 gcadmin 系列命令:

“`
$ gcadmin s-howcluster # 查看集群整体状态、节点状态、集群模式
$ gcadmin s-howcluster vc vc1 # 查看指定 VC 的 CLUSTER MODE
$ gcadmin s-howdistribution node # 查看分片分布与主备关系
$ gcadmin s-howlock # 查看集群中的锁
$ gcadmin s-howddlevent # 查看 DDL 事件日志
$ gcadmin s-howdmlevent # 查看 DML 事件日志
$ gcadmin s-howfailover # 查看 failover 接管记录
“`

进程状态检查:

“`
$ gcluster_services all info
$ gcware_services all info
“`

日志位置:安装目录 /fgedudb/<节点IP>/ 下,gcware 目录存协调组件日志,gcluster 目录存协调节点日志,gnode 目录存数据节点日志与用户数据,syncserver 日志用于排查同步延迟。巡检时重点关注节点是否 OPEN、DataState 是否为 0、事件日志是否持续堆积、rebalancing_status 是否全部完成。

巡检判定标准:s-howcluster 中所有节点状态 OPEN、DataState 为 0、CLUSTER STATE 为 ACTIVE、CLUSTER MODE 为 NORMAL 为健康;出现 CLOSE 先看该节点 gnode 日志中的启动报错,常见为端口被占用、内存池参数超过实际内存、数据目录残留;出现 Failure 时用 s-howddlevent、s-howdmlevent 查看未同步的事件,待备份补齐后由 gcrecover 自动恢复;事件日志持续增长且长时间不消费,说明存在节点未在线,应先恢复节点再清理。

系统层巡检补充命令:

“`
$ free -g # 检查内存余量,数据节点内存占用不应超过 90%
$ df -h /fgedudb/data # 检查数据盘使用率,超过 80% 需规划扩容
$ uptime # 检查负载,单节点 load 持续高于 8 需排查倾斜
$ iostat -x 2 5 # 检查 IO 等待,%util 持续接近 100% 需检查磁盘
“`

锁与等待排查:s-howlock 输出中锁定对象与持有会话,长时间未释放的锁对应 s-how processlist 中的会话,确认业务后再 kill;s-howfailover 中接管次数持续增长,说明协调节点反复故障,应检查协调节点网络与资源。

#### 7.5 服务启停

停止集群(先停 gcluster 侧,再停 gcware):

“`
$ gcluster_services all stop
$ gcware_services all stop
“`

启动集群:

“`
$ gcware_services all start
$ gcluster_services all start
“`

单个组件管理:

“`
$ gcluster_services gcluster restart
$ gcluster_services syncserver info
$ gcware_services gcware restart
“`

服务无法正常停止时可加 –force 参数强制结束进程。集群模式手动切换:

“`
$ gcadmin switchmode normal
$ gcadmin switchmode readonly
“`

**常见故障处理流程:** 节点状态为 CLOSE 时,先在该节点上执行 gcluster_services all info 查看未启动组件,再到 /fgedudb/<节点IP>/gnode/log 下找最近日志,端口占用用 ss -tlnp 核对,内存不足检查 gbase_memory_pool_size 是否超出实际内存;节点为 Failure 时,先排除网络与电源,节点重新上线后由 gcrecover 自动补齐分片,期间用 s-howdmlevent 观察事件消费;节点为 Unavailable 时不能直接修复,必须走实战六的替换流程;集群卡在 READONLY 且无扩缩容任务在跑,用 gcadmin switchmode normal 手动恢复,同时检查是否有遗留的 replace.py 进程;s-howfailover 频繁接管时,检查协调节点网络抖动与系统负载。任何故障处理前先保留日志与 s-howcluster、s-howdistribution 输出,便于回溯。

网上搜索风哥教程可以学习全套数据库教程

### 实战八:GBase 8s 事务型数据库安装与初始化

本套风哥教程的 8s 部署在 fgedu-net-cn2(192.168.10.12)上,按 64G 内存、8 CPU 规格配置。8s 的操作系统超级用户按产品要求固定为 gbasedbt;实例名 fgedudb,数据库名 fgedudb,业务用户名 fgedu。

**步骤 1:安装依赖包。**

“`
# yum install -y unzip glibc-devel ncurses-libs libnsl libaio
“`

若报 libnsl.so.1 缺失,做软链接:

“`
# ln -s /usr/lib64/libnsl.so.2 /usr/lib64/libnsl.so.1
“`

**步骤 2:创建 gbasedbt 用户与组。**

“`
# groupadd gbasedbt
# useradd -g gbasedbt gbasedbt
# echo ‘gbasedbt:Gbase@123’ | chpasswd
“`

**步骤 3:创建目录并授权。**

“`
# mkdir -p /fgedudb/ids /fgedudb/dbs /fgedudb/backup
# chown -R gbasedbt:gbasedbt /fgedudb
# chmod 775 /fgedudb/dbs
“`

**步骤 4:执行安装程序。**

控制台交互模式:

“`
# cd /fgedudb/soft
# s-h ids_install
“`

图形模式:

“`
# ./ids_install -i swing
“`

静默模式先录制响应文件再安装:

“`
# s-h ids_install -i swing -r /fgedudb/soft/bundle.properties
# s-h ids_install -i silent -f /fgedudb/soft/bundle.properties
“`

安装过程中选择软件安装目录 /fgedudb/ids,实例名填写 fgedudb,服务 IP 填写 192.168.10.12,监听端口默认 9088。建议安装时选择不自动创建实例,由管理员手工初始化,避免 sqlhosts 使用机器名导致建库卡住。

**步骤 5:配置环境变量文件 profile.fgedudb。**

切换到 gbasedbt 用户:

“`
# su – gbasedbt
$ cp ~/.bas-h_profile ~/profile.fgedudb
$ cat >> ~/profile.fgedudb << ‘EOF’
export GBASEDBTSERVER=fgedudb
export GBASEDBTDIR=/fgedudb/ids
export ONCONFIG=onconfig.fgedudb
export GBASEDBTSQLHOSTS=$GBASEDBTDIR/etc/sqlhosts.fgedudb
export PATH=$GBASEDBTDIR/bin:$GBASEDBTDIR/sbin:$PATH
export DB_LOCALE=zh_CN.utf8
export CLIENT_LOCALE=zh_CN.utf8
export LD_LIBRARY_PATH=${GBASEDBTDIR}/lib:${GBASEDBTDIR}/lib/esql:${GBASEDBTDIR}/lib/cli
EOF
$ source ~/profile.fgedudb
“`

并在 ~/.bas-h_profile 末尾追加 `source ~/profile.fgedudb`,保证登录自动生效。

**步骤 6:配置 onconfig.fgedudb。**

“`
$ cd /fgedudb/ids/etc
$ cp onconfig.std onconfig.fgedudb
$ vi onconfig.fgedudb
“`

按 64G 内存、8 CPU 规格修改关键参数:

“`
ROOTPATH /fgedudb/dbs/rootdbs
SERVERNUM 1
DBSERVERNAME fgedudb
TAPEDEV /dev/null
LTAPEDEV /dev/null
s-hM_SIZE 20480
BUFFERPOOL size=163840, p_default
CPU_VPS 8
NETTYPE onsoctcp,9088,8,NET
“`

参数说明:ROOTPATH 为根 dbspace 文件路径;SERVERNUM 为实例编号,多实例必须唯一;DBSERVERNAME 为实例名;TAPEDEV、LTAPEDEV 在无磁带设备时设为 /dev/null;s-hM_SIZE 单位 MB,取 20480(约 20G,不超过系统内存一半);BUFFERPOOL 为默认缓冲池;CPU_VPS 按 8 颗 CPU 设置;NETTYPE 指定监听协议、端口与并发线程数。

64G 内存规格下,除默认缓冲池外,还可按业务增加多个 BUFFERPOOL 段,分别给不同 pagesize 的表使用;物理日志与逻辑日志大小在初始化后可通过 onparams 调整,逻辑日志总数按事务量规划,避免日志写满阻塞业务。onconfig 修改后需重新 oninit 或通过 onmode 热加载对应参数,不能只改文件不重启。

上51CTO搜索风哥可以学习全套数据库教程

创建 rootdbs 空文件并授权:

“`
$ touch /fgedudb/dbs/rootdbs
$ chown gbasedbt:gbasedbt /fgedudb/dbs/rootdbs
$ chmod 660 /fgedudb/dbs/rootdbs
“`

**步骤 7:配置 sqlhosts.fgedudb。**

“`
$ cd /fgedudb/ids/etc
$ cp sqlhosts.std sqlhosts.fgedudb
$ cat >> sqlhosts.fgedudb << ‘EOF’
fgedudb onsoctcp 192.168.10.12 9088
EOF
“`

**步骤 8:初始化实例。**

“`
$ oninit -ivyw
“`

参数 -i 初始化磁盘空间,-v 显示详细输出,-y 自动确认,-w 等待初始化完成。初始化过程依次创建共享内存、rhead 结构、dbspace、日志文件,输出 Verbose output complete 即成功。

**步骤 9:查看在线状态。**

“`
$ onstat –
“`

输出 `On-Line — Up 00:01:06 — 173360 Kbytes` 表示实例在线。常用状态命令:

“`
$ onstat -g cfg # 查看配置参数
$ onstat -d # 查看 dbspace 与 chunk
$ onstat -l # 查看日志文件
$ onstat -k # 查看锁
“`

**步骤 10:停库与连接。**

停库:

“`
$ onmode -k
“`

重新启动:

“`
$ oninit
“`

使用 dbaccess 连接并创建数据库与业务用户:

“`
$ dbaccess fgedudb
“`

“`
CREATE DATABASE fgedudb WITH LOG;
CREATE USER fgedu WITH PASSWORD ‘Fgedu@123’;
GRANT DBA TO fgedu;
“`

建表与事务示例:

“`
CREATE TABLE t_order (
order_id BIGINT PRIMARY KEY,
cust_id BIGINT,
amt DECIMAL(18,2),
order_time DATETIME YEAR TO SECOND
);
BEGIN WORK;
INSERT INTO t_order VALUES (1001, 88, 128.50, CURRENT YEAR TO SECOND);
COMMIT WORK;
SELECT * FROM t_order WHERE order_id = 1001;
“`

dbspace 容量不足时在线追加 chunk,不影响业务:

“`
$ touch /fgedudb/dbs/dbs2
$ chown gbasedbt:gbasedbt /fgedudb/dbs/dbs2
$ chmod 660 /fgedudb/dbs/dbs2
$ onspaces -a rootdbs -p /fgedudb/dbs/dbs2 -o 0 -s 204800
“`

**步骤 11:ontape 备份。**

“`
$ ontape -s -L 0 # 0 级全量备份
$ ontape -l # 逻辑日志备份
$ ontape -r # 恢复
“`

**步骤 12:常用实例管理命令。**

onmode 用于在线调整实例运行状态:

“`
$ onmode -m # 从静态模式切到在线模式
$ onmode -c # 强制触发检查点
$ onmode -l # 切换到下一个逻辑日志
$ onmode -k # 干净停库(等待事务结束)
$ onmode -u # 立即停库(强制,慎用)
$ onmode -p 10 cpu # 在线增加 CPU VP 数量
$ onstat -g ses # 查看会话
$ onstat -g sql <sid> # 查看指定会话 SQL
$ onstat -p # 查看性能计数器
“`

备份恢复演练:先做 0 级全备,再插入测试行后做逻辑日志备份,模拟损坏后执行 ontape -r,按提示选择备份集恢复,恢复完成后 onstat – 确认 On-Line,再用 dbaccess 核对数据。恢复过程要求 TAPEDEV、LTAPEDEV 指向有效备份路径,/dev/null 只用于无备份的初始化环境。

**常见安装报错与处理:** 报 libnsl.so.1 缺失,执行软链接命令;报 locale 错误,确认 DB_LOCALE 与 CLIENT_LOCALE 均为 zh_CN.utf8 且系统已生成该 locale;oninit 报共享内存不足,检查 s-hM_SIZE 是否超过系统可用内存;报 rootdbs 权限错误,确认文件属主为 gbasedbt:gbasedbt、权限 660;dbaccess 连不上,先检查 sqlhosts 中 IP 与端口、再确认 9088 端口未被防火墙拦截;初始化卡住不动,多为 sqlhosts 使用机器名且 DNS 解析失败,改为 IP 即可。

至此 GBase 8s 实例安装、初始化、连接与备份全部完成。

—

## 风哥针对本文总结

风哥针对本文总结如下。本套风哥教程围绕南大通用 GBase 8a MPP 分布式集群与 GBase 8s 事务型数据库展开,理论部分讲清了三类组件(gcware、gcluster、gnode)、VC 与 free node、distribution 的 p/d 参数与两种分布模式、三种集群模式与五种节点状态、failover 接管机制,以及 8s 的共享内存、dbspace、物理日志与逻辑日志、检查点原理。

实战部分的主线是:先按 64G 内存、8 CPU 规格完成操作系统基线(主机名与 /etc/hosts、关闭 firewalld、关闭 SELinux、时间同步、Ss-h 互信、内核参数、关闭 RemoveIPC、创建 fgedu 用户与 /fgedudb 目录);再用 gcinstall.py –silent=demo.options 完成单 VC 七节点安装,gcadmin distribution 创建分片,gccli 执行 initnodedatamap;扩容用 existCoordinateHost/existDataHost 标记存量节点、gcinstall.py 安装新节点、addnodes 加入 VC、带 extension 的新 distribution、initnodedatamap 与 rebalance instance、rmdistribution 清理旧分布;收缩用 rmnodes 移出节点后同样走新分布与重分布;多 VC 用 createvc 划分节点、每个 VC 单独建 distribution 与 initnodedatamap;节点替换按 setnodestate unavailable → rmfeventlog → replace.py –type=coor/data → getdistribution 改分布 → initnodedatamap → rebalance instance → rmdistribution 的顺序执行,卡在 READONLY 时用 switchmode normal 恢复。日常运维掌握 gccli、LOAD DATA、SELECT INTO OUTFILE、gcdump、gcrcman 备份恢复、gcadmin 巡检与 gcluster_services/gcware_services 启停。8s 部分按依赖包、gbasedbt 用户、ids_install、profile/onconfig/sqlhosts 三文件、oninit -ivyw、onstat 巡检、dbaccess 建库、ontape 备份的顺序落地。

风哥提醒三点:一是任何扩缩容与替换操作前先备份、先确认分片有可用备份;二是集群进入 READONLY 是正常现象,操作完成后自动恢复,不要强行改模式;三是所有命令中的 IP、密码、路径在生产环境按实际规划替换,本套风哥教程的 /fgedudb、fgedudb、fgedu、fgedu-net-cn1、fgedu-net-cn2 均为教学示例。

—

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息