记录一个GCDW重启后建表失败的问题
凌晨一套GCDW服务器重启了,但是数仓服务没有自动重启,手动重启后 gcadmin 检查都正常,但是建表的时候抛异常了。

接下来是一些相关记录,以供后续参考。
基本信息
| 项目 | 值 |
|---|---|
| 集群名称 | gcdwtest |
| 集群版本 | GCDW 9.8.0.8.3 |
| 操作节点 | gcdw1 (192.168.59.71) |
| 集群节点 | gcdw1 (192.168.59.71)、gcdw2 (192.168.59.72)、gcdw3 (192.168.59.73) |
| 存储类型 | S3 (MinIO, gcdw3:9000) |
| Bucket | testforgcdw |
| 集群最高权限用户 | root / 111111 |
| 操作时间 | 2026-07-16 00:00 ~ 00:43 |
| 最终状态 | CLUSTER STATE: ACTIVE,所有节点 OPEN,SQL 增删查改正常 |
集群架构与服务启动顺序
GCDW 物理机版集群服务启动顺序(自底向上):
- FoundationDB (FDB) —— 元数据底座,systemd 管理,开机自启
- MinIO 对象存储 —— 数据存储底座,需手动启动
- Gcware —— 集群协调服务(gcware_services)
- Gcluster / Gnode —— 协调节点与计算节点(gcluster_services)
⚠️ 启动顺序不可颠倒:FDB 与 MinIO 必须先于 Gcware 就绪,Gcware 必须先于 Gcluster 就绪。
操作步骤
步骤 1:检查 FoundationDB 集群状态
在三台节点上检查 FDB 服务,确认已开机自启且 active:
for h in gcdw1 gcdw2 gcdw3; do
echo "--- $h ---"
ssh $h "systemctl is-active foundationdb; systemctl is-enabled foundationdb"
done
输出(三节点一致):
active
enabled
FDB 集群连接串 /etc/foundationdb/fdb.cluster:
ebenORIJ:TrUVyMIS@192.168.59.71:4500,192.168.59.72:4500,192.168.59.73:4500
三协调器均在线,FDB 层就绪。
步骤 2:启动 MinIO 对象存储(gcdw3)
关键排查 —— MinIO 数据目录
最初 MinIO 未运行(端口 9000 关闭)。查看数据目录时发现:
/data/.minio.sys—— MinIO 系统目录(含 buckets 配置,创建于 2026-07-11)/data/testforgcdw—— 实际 bucket 数据(GCDW 的 dbid/tbid 元数据)/data/minio—— 误建的空目录(首次启动时使用,导致数据“丢失”)
结论:MinIO 之前的数据目录是 /data(不是 /data/minio)。错误启动命令曾使用 /data/minio,导致新建空目录、原数据不可见。
正确的启动方式
-
清理误建的空目录:
ssh gcdw3 "rm -rf /data/minio" -
用正确的数据目录
/data启动 MinIO:ssh gcdw3 "nohup /usr/local/bin/minio server /data \ --address 192.168.59.73:9000 \ --console-address 192.168.59.73:9001 \ > /var/log/minio.log 2>&1 &" -
验证启动日志,确认
Status: 1 Online, 0 Offline,API 地址http://192.168.59.73:9000。
MinIO 凭证
- Access Key / Secret Key:
minioadmin/minioadmin(默认凭证,demo.options 中配置一致)
步骤 3:启动 Gcware 服务(三节点)
文档中的 gcware_services all start 实测仅启动本地节点,需要在每台节点分别执行。
# gcdw1
su - gbase -c "gcware_services all start"
# gcdw2
ssh gcdw2 "su - gbase -c 'gcware_services all start'"
# gcdw3
ssh gcdw3 "su - gbase -c 'gcware_services all start'"
每节点输出:
Starting gcware : [ OK ]
Starting GCWareMonit success!
验证三节点状态:
for h in gcdw1 gcdw2 gcdw3; do
ssh $h "su - gbase -c 'gcware_services all info'"
done
三节点均输出 gcware/sbin/gcware is running。
步骤 4:启动 Gcluster / Gnode 服务(三节点)
同样地,gcluster_services all start 仅启动本地节点,需逐节点执行。
# gcdw1
su - gbase -c "gcluster_services all start"
# gcdw2
ssh gcdw2 "su - gbase -c 'gcluster_services all start'"
# gcdw3
ssh gcdw3 "su - gbase -c 'gcluster_services all start'"
每节点启动三类进程:
Starting gbase : [ OK ]
Starting syncserver : [ OK ]
Starting gcluster : [ OK ]
验证三节点状态:
for h in gcdw1 gcdw2 gcdw3; do
ssh $h "su - gbase -c 'gcluster_services all info'"
done
三节点均输出:
gcluster/server/bin/gclusterd is running
gnode/server/bin/gbased is running
gnode/server/bin/gc_sync_server is running
步骤 5:验证集群整体状态
gcadmin showcluster
su - gbase -c "gcadmin showcluster"
输出:
CLUSTER STATE: ACTIVE
=====================================
| GBASE GCWARE CLUSTER INFORMATION |
=====================================
| NodeName | IpAddress | gcware |
-------------------------------------
| gcware1 | 192.168.59.71 | OPEN |
| gcware2 | 192.168.59.72 | OPEN |
| gcware3 | 192.168.59.73 | OPEN |
-------------------------------------
=======================================================
| GBASE COORDINATOR CLUSTER INFORMATION |
=======================================================
| NodeName | IpAddress | gcluster | DataState |
-------------------------------------------------------
| coordinator1 | 192.168.59.71 | OPEN | 0 |
| coordinator2 | 192.168.59.72 | OPEN | 0 |
| coordinator3 | 192.168.59.73 | OPEN | 0 |
-------------------------------------------------------
1 warehouse: warehouse1
3 coordinator node
0 free data node
所有 gcware 节点 OPEN,所有 coordinator 节点 OPEN,DataState=0 正常。
gccli 连接 + SQL 功能验证
su - gbase -c "gccli -uroot -p111111 -e \"USE warehouse warehouse1; use testdb; \
create table if not exists restart_test (id int, ts varchar(30)); \
insert into restart_test values (1, 'restart_ok'); \
select * from restart_test; \
drop table restart_test;\""
输出:
id ts
1 restart_ok
建表 → 插入 → 查询 → 删除 全流程成功,证明:
- FoundationDB 元数据读写正常
- MinIO 对象存储数据读写正常
- Gcware 协调服务正常
- Gcluster/Gnode 计算/存储链路完整
启动过程遇到的问题与解决
| 问题 | 根因 | 解决 |
|---|---|---|
MinIO 启动后 SQL 报 PFRelasion Save failed / Fail to write s3 file to s3 server |
MinIO 数据目录配错,曾用空的 /data/minio 启动,原 bucket 数据在 /data 下不可见 |
停止错误进程,清理空目录,用正确的 /data 目录重启 MinIO |
gcware_services all start 只启动本地 |
该命令的 all 指本地所有 gcware 进程,非跨节点 |
逐节点 SSH 执行 gcware_services all start |
gcluster_services all start 只启动本地 |
同上,all 限于本地节点 |
逐节点 SSH 执行 gcluster_services all start |
后续运维建议
- MinIO 开机自启:当前 MinIO 通过
nohup手动启动,建议配置 systemd 服务(参考/etc/systemd/system/minio.service,需修正User、EnvironmentFile、MINIO_VOLUMES=/data),并systemctl enable minio。 - Gcware / Gcluster 开机自启:按文档 4.7.2 节,在
/etc/rc.d/rc.local中追加su - gbase -c "gcware_services all start"与gcluster_services all start,并chmod +x /etc/rc.d/rc.local。 - MinIO 凭证安全:当前使用默认
minioadmin:minioadmin,生产环境建议通过MINIO_ROOT_USER/MINIO_ROOT_PASSWORD环境变量设置强凭证,并同步更新 demo.options 与 gcluster/gnode 的*.cnf。 - 数据目录备份:MinIO 数据目录
/data与 FDB 数据目录/var/lib/foundationdb/data应纳入定期备份计划。 - 重启 Checklist:下次服务器重启后,按
FDB(自启)→ MinIO(手动)→ Gcware(三节点)→ Gcluster(三节点)→ gcadmin showcluster + gccli 验证顺序操作即可。
End
最近整理了一套 GCDW 的相关文档,大概200页,还在校对中,考虑一下已什么形式发布出来。
Have a nice day ~ ☕
🌻 往期内容 ▼
- Astron SkillHub加入AAIF:国产Agent基础设施的「生态卡位」
- Oracle Skills开源:AI工程正在进入"技能时代"
- MySQL 26.7 EA来了:版本号一夜跳到26,社区版正在发生变化
- MySQL 8.0结束生命周期,8.4.9 LTS、9.7.0发版上线:一个时代的交接与新生
- 金仓数据库 V9R3C18 MySQL 兼容版体验(性能篇)
- AI时代,数据库反而更重要了?——对话崖山陈志标
- TiDB认证新福利,这次不要再错过
- GBASE数据库的AI智能化探索
- Agent友好的AI数据库需要哪些特征
- 海量数据库Vastbase
- 虚谷数据库发布了一个Skills剧透了新版本特性
- 三十周年,香港相聚 —— PGConf.Asia 2026 现正征集演讲(CFP)与赞助商
👉 这里有得聊
如果你对国产基础软件(操作系统、数据库、中间件)、AI Agent、Vibe Coding、OpenClaw 、Hermes Agent 等感兴趣,欢迎关注微信公众号:「少安事务所」。如果这篇文章为你带来了灵感或启发,请帮忙『点赞、转发、推荐』,感谢!ღ( ´・ᴗ・` )~
热门帖子
- 12025-12-01浏览数:183409
- 22023-05-09浏览数:26147
- 42023-09-25浏览数:19814
- 52020-05-11浏览数:18464