HugeGraph Docker 集群部署指南

概述

HugeGraph 通过 Docker-Compose 可快速运行完整的分布式集群版(PD + Store + Server)。该方式适用于 Linux 和 Mac。

前置条件

  • Docker Engine 20.10+ 或 Docker Desktop 4.x+
  • Docker Compose v2
  • Mac 运行 3 节点集群时,建议分配至少 12 GB 内存(设置 → 资源 → 内存)。[其他平台根据实际情况调整]

已测试环境:Linux(原生 Docker)和 macOS(Docker Desktop with ARM M4)

Compose 文件

在 HugeGraph 主仓库 docker/ 目录下提供了三个 compose 文件:

文件描述
docker-compose.yml使用预构建镜像的** 1x3 单进程(节点)**快速启动
docker-compose.dev.yml从源码构建的单节点开发模式
docker-compose-3pd-3store-3server.yml** 3x3 进程**(模拟节点)分布式集群

注: 后续步骤皆为假设你本地已拉取 hugegraph 主仓库代码 (至少是 docker 目录)

单节点快速启动

cd hugegraph/docker
 # 注意版本号请随时保持更新 → 1.x.0 
HUGEGRAPH_VERSION=1.7.0 docker compose up -d

验证:

curl http://localhost:8080/versions

3 节点集群快速启动

cd hugegraph/docker
HUGEGRAPH_VERSION=1.7.0 docker compose -f docker-compose-3pd-3store-3server.yml up -d

默认内置的启动顺序:

  1. PD (节点)最先启动,且必须通过 /v1/health 健康检查
  2. Store (节点)在所有 PD 健康后再启动
  3. Server (节点)在所有 Store + PD 健康后最后启动

验证集群正常:(重要)

curl http://localhost:8620/v1/health      # PD 健康检查
curl http://localhost:8520/v1/health      # Store 健康检查
curl http://localhost:8080/versions        # Server
curl http://localhost:8620/v1/stores       # 已注册的 Store
curl http://localhost:8620/v1/partitions   # 分区分配

环境变量参考

PD 变量

变量必填默认值映射配置
HG_PD_GRPC_HOSTgrpc.host
HG_PD_RAFT_ADDRESSraft.address
HG_PD_RAFT_PEERS_LISTraft.peers-list
HG_PD_INITIAL_STORE_LISTpd.initial-store-list
HG_PD_GRPC_PORT8686grpc.port
HG_PD_REST_PORT8620server.port
HG_PD_DATA_PATH/hugegraph-pd/pd_datapd.data-path
HG_PD_INITIAL_STORE_COUNT1pd.initial-store-count

已弃用的别名GRPC_HOSTHG_PD_GRPC_HOSTRAFT_ADDRESSHG_PD_RAFT_ADDRESSRAFT_PEERSHG_PD_RAFT_PEERS_LIST

Store 变量

变量必填默认值映射配置
HG_STORE_PD_ADDRESSpdserver.address
HG_STORE_GRPC_HOSTgrpc.host
HG_STORE_RAFT_ADDRESSraft.address
HG_STORE_GRPC_PORT8500grpc.port
HG_STORE_REST_PORT8520server.port
HG_STORE_DATA_PATH/hugegraph-store/storageapp.data-path

已弃用的别名PD_ADDRESSHG_STORE_PD_ADDRESSGRPC_HOSTHG_STORE_GRPC_HOSTRAFT_ADDRESSHG_STORE_RAFT_ADDRESS

Server 变量

变量必填默认值映射配置
HG_SERVER_BACKENDhugegraph.properties 中的 backend
HG_SERVER_PD_PEERSpd.peers
STORE_RESTwait-partition.sh 使用
PASSWORD启用鉴权模式

已弃用的别名BACKENDHG_SERVER_BACKENDPD_PEERSHG_SERVER_PD_PEERS

端口参考

服务宿主机端口用途
pd08620REST API
pd08686gRPC
pd18621REST API
pd18687gRPC
pd28622REST API
pd28688gRPC
store08500gRPC
store08520REST API
store18501gRPC
store18521REST API
store28502gRPC
store28522REST API
server08080Graph API
server18081Graph API
server28082Graph API

故障排查

  1. 容器 OOM 退出(exit code 137):将 Docker Desktop 内存增加到 12 GB 以上 (或调整被 kill 的启动 jvm 内存设置)

  2. Raft 选举超时:检查所有 PD 节点的 HG_PD_RAFT_PEERS_LIST 是否一致。验证连通性:docker exec hg-pd0 ping pd1

  3. 分区分配未完成:检查 curl http://localhost:8620/v1/stores — 3 个 Store 必须都显示 "state":"Up" 才能完成分区分配

  4. 连接被拒:确保 HG_* 环境变量使用容器主机名(pd0store0),而非 127.0.0.1

查看运行时日志:使用 docker logs <container-name>(如 docker logs hg-pd0)可直接查看日志,无需进入容器。

容器监控与健康检查

版本说明:本节描述的行为不包含在 1.7.0 镜像中。请使用 HUGEGRAPH_VERSION=latest 或等待下一个发布版本。

进程监控模型

此前,三个 Docker 入口脚本均以 tail -f /dev/null 结尾,即使 Java 进程崩溃,容器仍会保持运行状态。由于容器从未退出,Docker 的 restart: unless-stopped 策略也不会触发。

现在,入口脚本直接监控 Java 进程:

  • PD 和 Store 容器:入口脚本向启动脚本传入 -d false 参数,启动脚本通过 exec 直接替换为 Java 进程。容器进程即为 Java 进程——当 Java 退出(崩溃或正常关闭)时,容器立即退出,Docker 的重启策略随即触发。
  • Server 容器:入口脚本使用 tail --pid=$PID -f /dev/null 阻塞,直到 Java 退出。SIGTERM/SIGINT 信号陷阱会将 docker stop 信号转发给 Java 并等待其正常关闭(退出码 0)。若 Java 崩溃,入口脚本以退出码 1 退出,从而触发重启策略。
  • 所有镜像中的 PID 1 均为 dumb-init,负责将 Docker 信号转发给入口脚本进程。

健康检查端点

所有四个 Docker 镜像现已内置 HEALTHCHECK 指令。docker ps 将显示真实的健康状态。在 90 秒的启动期内,检查失败不计入统计;此后,连续三次失败将把容器标记为 unhealthy

镜像健康检查端点端口参数
hugegraph/hugegraph(server)GET /versions8080--interval=15s --timeout=10s --start-period=90s --retries=3
hugegraph/hugegraph-hstoreGET /versions8080同上
hugegraph/hugegraph-pdGET /v1/health8620同上
hugegraph/hugegraph-storeGET /v1/health8520同上

注意start-hugegraph.sh 中的 -m true 标志(基于 cron 的监控)仅适用于虚拟机/裸机部署,Docker 镜像中未安装也不使用该功能。Docker 用户应依赖内置的 HEALTHCHECK 和 Docker 重启策略。