GBase GCDW
运维管理
文章

记录一个GCDW重启后建表失败的问题

发表于2026-07-16 11:24:4027次浏览1个评论

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

微信图片_20260716104705_677_2.jpg

接下来是一些相关记录,以供后续参考。

基本信息

项目
集群名称 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 物理机版集群服务启动顺序(自底向上):

  1. FoundationDB (FDB) —— 元数据底座,systemd 管理,开机自启
  2. MinIO 对象存储 —— 数据存储底座,需手动启动
  3. Gcware —— 集群协调服务(gcware_services)
  4. 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,导致新建空目录、原数据不可见。

正确的启动方式

  1. 清理误建的空目录:

    ssh gcdw3 "rm -rf /data/minio"
    
  2. 用正确的数据目录 /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 &"
    
  3. 验证启动日志,确认 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

后续运维建议

  1. MinIO 开机自启:当前 MinIO 通过 nohup 手动启动,建议配置 systemd 服务(参考 /etc/systemd/system/minio.service,需修正 UserEnvironmentFileMINIO_VOLUMES=/data),并 systemctl enable minio
  2. 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
  3. MinIO 凭证安全:当前使用默认 minioadmin:minioadmin,生产环境建议通过 MINIO_ROOT_USER / MINIO_ROOT_PASSWORD 环境变量设置强凭证,并同步更新 demo.options 与 gcluster/gnode 的 *.cnf
  4. 数据目录备份:MinIO 数据目录 /data 与 FDB 数据目录 /var/lib/foundationdb/data 应纳入定期备份计划。
  5. 重启 Checklist:下次服务器重启后,按 FDB(自启)→ MinIO(手动)→ Gcware(三节点)→ Gcluster(三节点)→ gcadmin showcluster + gccli 验证 顺序操作即可。

End

最近整理了一套 GCDW 的相关文档,大概200页,还在校对中,考虑一下已什么形式发布出来。


Have a nice day ~ ☕

🌻 往期内容 ▼

👉 这里有得聊

如果你对国产基础软件(操作系统、数据库、中间件)、AI Agent、Vibe Coding、OpenClaw 、Hermes Agent 等感兴趣,欢迎关注微信公众号:「少安事务所」。如果这篇文章为你带来了灵感或启发,请帮忙『点赞、转发、推荐』,感谢!ღ( ´・ᴗ・` )~

评论

登录后才可以发表评论
serenaly发表于 1个月前
好,有参考价值