Skip to content
Merged
Show file tree
Hide file tree
Changes from 13 commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
134 changes: 134 additions & 0 deletions content/cn/docs/guides/hugegraph-docker-cluster.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
---
title: "HugeGraph Docker 集群部署指南"
linkTitle: "Docker 集群"
weight: 5
---

## 概述

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/`](https://github.com/apache/hugegraph/tree/master/docker) 目录下提供了三个 compose 文件:

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

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

## 单节点快速启动

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

验证:
```bash
curl http://localhost:8080/versions
```

## 3 节点集群快速启动

```bash
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 健康后最后启动

验证集群正常:(重要)
```bash
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_HOST` | 是 | — | `grpc.host` |
| `HG_PD_RAFT_ADDRESS` | 是 | — | `raft.address` |
| `HG_PD_RAFT_PEERS_LIST` | 是 | — | `raft.peers-list` |
| `HG_PD_INITIAL_STORE_LIST` | 是 | — | `pd.initial-store-list` |
| `HG_PD_GRPC_PORT` | 否 | `8686` | `grpc.port` |
| `HG_PD_REST_PORT` | 否 | `8620` | `server.port` |
| `HG_PD_DATA_PATH` | 否 | `/hugegraph-pd/pd_data` | `pd.data-path` |
| `HG_PD_INITIAL_STORE_COUNT` | 否 | `1` | `pd.initial-store-count` |

> **已弃用的别名**:`GRPC_HOST` → `HG_PD_GRPC_HOST`、`RAFT_ADDRESS` → `HG_PD_RAFT_ADDRESS`、`RAFT_PEERS` → `HG_PD_RAFT_PEERS_LIST`

### Store 变量

| 变量 | 必填 | 默认值 | 映射配置 |
|------|------|--------|----------|
| `HG_STORE_PD_ADDRESS` | 是 | — | `pdserver.address` |
| `HG_STORE_GRPC_HOST` | 是 | — | `grpc.host` |
| `HG_STORE_RAFT_ADDRESS` | 是 | — | `raft.address` |
| `HG_STORE_GRPC_PORT` | 否 | `8500` | `grpc.port` |
| `HG_STORE_REST_PORT` | 否 | `8520` | `server.port` |
| `HG_STORE_DATA_PATH` | 否 | `/hugegraph-store/storage` | `app.data-path` |

> **已弃用的别名**:`PD_ADDRESS` → `HG_STORE_PD_ADDRESS`、`GRPC_HOST` → `HG_STORE_GRPC_HOST`、`RAFT_ADDRESS` → `HG_STORE_RAFT_ADDRESS`

### Server 变量

| 变量 | 必填 | 默认值 | 映射配置 |
|------|------|--------|----------|
| `HG_SERVER_BACKEND` | 是 | — | `hugegraph.properties` 中的 `backend` |
| `HG_SERVER_PD_PEERS` | 是 | — | `pd.peers` |
| `STORE_REST` | 否 | — | `wait-partition.sh` 使用 |
| `PASSWORD` | 否 | — | 启用鉴权模式 |

> **已弃用的别名**:`BACKEND` → `HG_SERVER_BACKEND`、`PD_PEERS` → `HG_SERVER_PD_PEERS`

## 端口参考

| 服务 | 宿主机端口 | 用途 |
|------|-----------|------|
| pd0 | 8620 | REST API |
| pd0 | 8686 | gRPC |
| pd1 | 8621 | REST API |
| pd1 | 8687 | gRPC |
| pd2 | 8622 | REST API |
| pd2 | 8688 | gRPC |
| store0 | 8500 | gRPC |
| store0 | 8520 | REST API |
| store1 | 8501 | gRPC |
| store1 | 8521 | REST API |
| store2 | 8502 | gRPC |
| store2 | 8522 | REST API |
| server0 | 8080 | Graph API |
| server1 | 8081 | Graph API |
| server2 | 8082 | Graph 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_*` 环境变量使用容器主机名(`pd0`、`store0`),而非 `127.0.0.1`
77 changes: 76 additions & 1 deletion content/cn/docs/quickstart/hugegraph/hugegraph-hstore.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

---
title: "HugeGraph-Store Quick Start"
linkTitle: "安装/构建 HugeGraph-Store"
Expand Down Expand Up @@ -50,6 +51,50 @@ mvn clean install -DskipTests=true
# target/apache-hugegraph-incubating-{version}.tar.gz
```

#### 3.3 Docker 部署

HugeGraph-Store Docker 镜像已发布在 DockerHub,镜像名是 `hugegraph/store`。

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

使用 docker-compose 文件部署完整的 3 节点集群(PD + Store + Server):

```bash
cd hugegraph/docker
# 注意版本号请随时保持更新 → 1.x.0
HUGEGRAPH_VERSION=1.7.0 docker compose -f docker-compose-3pd-3store-3server.yml up -d
```

通过 `docker run` 运行单个 Store 节点:

```bash
docker run -d \
-p 8520:8520 \
-p 8500:8500 \
-p 8510:8510 \
-e HG_STORE_PD_ADDRESS=<pd-ip>:8686 \
-e HG_STORE_GRPC_HOST=<your-ip> \
-e HG_STORE_RAFT_ADDRESS=<your-ip>:8510 \
-v /path/to/storage:/hugegraph-store/storage \
--name hugegraph-store \
hugegraph/store:1.7.0
```

**环境变量参考:**

| 变量 | 必填 | 默认值 | 描述 |
|------|------|--------|------|
| `HG_STORE_PD_ADDRESS` | 是 | — | PD gRPC 地址(如 `pd0:8686,pd1:8686,pd2:8686`) |
| `HG_STORE_GRPC_HOST` | 是 | — | 本节点的 gRPC 主机名/IP(如 `store0`) |
| `HG_STORE_RAFT_ADDRESS` | 是 | — | 本节点的 Raft 地址(如 `store0:8510`) |
| `HG_STORE_GRPC_PORT` | 否 | `8500` | gRPC 服务端口 |
| `HG_STORE_REST_PORT` | 否 | `8520` | REST API 端口 |
| `HG_STORE_DATA_PATH` | 否 | `/hugegraph-store/storage` | 数据存储路径 |

> **注意**:在 Docker 桥接网络中,`HG_STORE_GRPC_HOST` 应使用容器主机名(如 `store0`)而非 IP 地址。

> **已弃用的别名**:`PD_ADDRESS`、`GRPC_HOST`、`RAFT_ADDRESS` 仍可使用,但会输出弃用警告。新部署请使用 `HG_STORE_*` 名称。

### 4 配置

Store 的主要配置文件为 `conf/application.yml`,以下是关键配置项:
Expand Down Expand Up @@ -116,7 +161,7 @@ logging:
启动成功后,可以在 `logs/hugegraph-store-server.log` 中看到类似以下的日志:

```
2024-xx-xx xx:xx:xx [main] [INFO] o.a.h.s.n.StoreNodeApplication - Started StoreNodeApplication in x.xxx seconds (JVM running for x.xxx)
2026-xx-xx xx:xx:xx [main] [INFO] o.a.h.s.n.StoreNodeApplication - Started StoreNodeApplication in x.xxx seconds (JVM running for x.xxx)
```

#### 5.2 停止 Store
Expand Down Expand Up @@ -188,6 +233,36 @@ pdserver:
address: 127.0.0.1:8686,127.0.0.1:8687,127.0.0.1:8688
```

#### 6.3 Docker 分布式集群配置

3 节点 Store 集群包含在 `docker/docker-compose-3pd-3store-3server.yml` 中。每个 Store 节点拥有独立的主机名和环境变量:

```yaml
# store0
HG_STORE_PD_ADDRESS: pd0:8686,pd1:8686,pd2:8686
HG_STORE_GRPC_HOST: store0
HG_STORE_GRPC_PORT: "8500"
HG_STORE_REST_PORT: "8520"
HG_STORE_RAFT_ADDRESS: store0:8510
HG_STORE_DATA_PATH: /hugegraph-store/storage

# store1
HG_STORE_PD_ADDRESS: pd0:8686,pd1:8686,pd2:8686
HG_STORE_GRPC_HOST: store1
HG_STORE_RAFT_ADDRESS: store1:8510

# store2
HG_STORE_PD_ADDRESS: pd0:8686,pd1:8686,pd2:8686
HG_STORE_GRPC_HOST: store2
HG_STORE_RAFT_ADDRESS: store2:8510
```

Store 节点仅在所有 PD 节点通过健康检查(`/v1/health`)后启动,通过 `depends_on: condition: service_healthy` 强制执行。

运行时日志可通过 `docker logs <container-name>`(如 `docker logs hg-store0`)直接查看,无需进入容器。

完整的部署指南请参阅 [docker/README.md](https://github.com/apache/hugegraph/blob/master/docker/README.md)。

### 7 验证 Store 服务

确认 Store 服务是否正常运行:
Expand Down
52 changes: 51 additions & 1 deletion content/cn/docs/quickstart/hugegraph/hugegraph-pd.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,56 @@ mvn clean install -DskipTests=true
# target/apache-hugegraph-incubating-{version}.tar.gz
```

#### 3.3 Docker 部署

HugeGraph-PD Docker 镜像已发布在 Docker Hub,镜像名为 `hugegraph/pd`。
> 注: 后续步骤皆假设你本地**已拉取** `hugegraph` 主仓库代码 (至少是 docker 目录)

使用 docker-compose 模式部署完整的 3 节点集群(PD + Store + Server):

```bash
cd hugegraph/docker
# 注意版本号请随时保持更新 → 1.x.0
HUGEGRAPH_VERSION=1.7.0 docker compose -f docker-compose-3pd-3store-3server.yml up -d
```

通过 `docker run` 运行单个 PD 节点时,通过环境变量提供配置:

```bash
docker run -d \
-p 8620:8620 \
-p 8686:8686 \
-p 8610:8610 \
-e HG_PD_GRPC_HOST=<your-ip> \
-e HG_PD_RAFT_ADDRESS=<your-ip>:8610 \
-e HG_PD_RAFT_PEERS_LIST=<your-ip>:8610 \
-e HG_PD_INITIAL_STORE_LIST=<store-ip>:8500 \
-v /path/to/data:/hugegraph-pd/pd_data \
--name hugegraph-pd \
hugegraph/pd:1.7.0
```

**环境变量参考:**

| 变量 | 必填 | 默认值 | 描述 |
|------|------|--------|------|
| `HG_PD_GRPC_HOST` | 是 | — | 本节点的 gRPC 主机名/IP(Docker 中使用 `pd0`,裸机使用 `192.168.1.10`) |
| `HG_PD_RAFT_ADDRESS` | 是 | — | 本节点的 Raft 地址(如 `pd0:8610`) |
| `HG_PD_RAFT_PEERS_LIST` | 是 | — | 所有 PD 节点的 Raft 地址(如 `pd0:8610,pd1:8610,pd2:8610`) |
| `HG_PD_INITIAL_STORE_LIST` | 是 | — | 预期的 Store gRPC 地址(如 `store0:8500,store1:8500,store2:8500`) |
| `HG_PD_GRPC_PORT` | 否 | `8686` | gRPC 服务端口 |
| `HG_PD_REST_PORT` | 否 | `8620` | REST API 端口 |
| `HG_PD_DATA_PATH` | 否 | `/hugegraph-pd/pd_data` | 元数据存储路径 |
| `HG_PD_INITIAL_STORE_COUNT` | 否 | `1` | 集群可用所需的最小 Store 数量 |

> **注意**:在 Docker 桥接网络中,`HG_PD_GRPC_HOST` 和 `HG_PD_RAFT_ADDRESS` 应使用容器主机名(如 `pd0`)而非 IP 地址。

> **已弃用的别名**:`GRPC_HOST`、`RAFT_ADDRESS`、`RAFT_PEERS`、`PD_INITIAL_STORE_LIST` 仍可使用,但会输出弃用警告。新部署请使用 `HG_PD_*` 名称。

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

完整的集群部署指南请参阅 [docker/README.md](https://github.com/apache/hugegraph/blob/master/docker/README.md)。

### 4 配置

PD 的主要配置文件为 `conf/application.yml`,以下是关键配置项:
Expand Down Expand Up @@ -116,7 +166,7 @@ partition:
启动成功后,可以在 `logs/hugegraph-pd-stdout.log` 中看到类似以下的日志:

```
2024-xx-xx xx:xx:xx [main] [INFO] o.a.h.p.b.HugePDServer - Started HugePDServer in x.xxx seconds (JVM running for x.xxx)
2026-xx-xx xx:xx:xx [main] [INFO] o.a.h.p.b.HugePDServer - Started HugePDServer in x.xxx seconds (JVM running for x.xxx)
```

#### 5.2 停止 PD
Expand Down
59 changes: 44 additions & 15 deletions content/cn/docs/quickstart/hugegraph/hugegraph-server.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ Core 模块是 Tinkerpop 接口的实现,Backend 模块用于管理数据存
#### 3.1 使用 Docker 容器 (便于**测试**)
<!-- 3.1 is linked by another place. if change 3.1's title, please check -->

可参考 [Docker 部署方式](https://github.com/apache/hugegraph/blob/master/hugegraph-server/hugegraph-dist/docker/README.md)。
可参考 [Docker 部署方式](https://github.com/apache/hugegraph/blob/master/docker/README.md)。

我们可以使用 `docker run -itd --name=server -p 8080:8080 -e PASSWORD=xxx hugegraph/hugegraph:1.7.0` 去快速启动一个内置了 `RocksDB` 的 `Hugegraph server`.

Expand All @@ -55,23 +55,24 @@ Core 模块是 Tinkerpop 接口的实现,Backend 模块用于管理数据存
</div>


另外,如果我们希望能够在一个文件中管理除了 `server` 之外的其他 Hugegraph 相关的实例,我们也可以使用 `docker-compose`完成部署,使用命令 `docker-compose up -d`,(当然只配置 `server` 也是可以的)以下是一个样例的 `docker-compose.yml`:
> **注意**:Docker compose 文件使用桥接网络(`hg-net`),适用于 Linux 和 Mac(Docker Desktop)。如需运行 3 节点分布式集群,请为 Docker Desktop 分配至少 **12 GB** 内存(设置 → 资源 → 内存)。

```yaml
version: '3'
services:
server:
image: hugegraph/hugegraph:1.7.0
container_name: server
environment:
- PASSWORD=xxx
# - PASSWORD=xxx 为可选参数,设置的时候可以开启鉴权模式,并设置密码
# - PRELOAD=true
# - PRELOAD=true 为可选参数,为 True 时可以在启动的时候预加载一个内置的样例图
ports:
- 8080:8080
另外,如果我们希望能够一体化管理 HugeGraph 多模块实例,则可以使用 `docker compose` 方式。
[`docker/`](https://github.com/apache/hugegraph/tree/master/docker) 目录下提供了两个 compose 文件:

- **单节点快速启动**(预构建镜像):`docker/docker-compose.yml`
- **单节点开发构建**(从源码构建):`docker/docker-compose.dev.yml`

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

如需开启鉴权,可在 compose 文件的环境变量中添加 `PASSWORD=xxx`,或在 `docker run` 命令中传入 `-e PASSWORD=xxx`。

完整的部署指南请参阅 [docker/README.md](https://github.com/apache/hugegraph/blob/master/docker/README.md)。

> 注意:
>
> 1. hugegraph 的 docker 镜像是一个便捷版本,用于快速启动 hugegraph,并不是**官方发布物料包方式**。你可以从 [ASF Release Distribution Policy](https://infra.apache.org/release-distribution.html#dockerhub) 中得到更多细节。
Expand Down Expand Up @@ -307,6 +308,34 @@ curl http://localhost:8081/graphs
```bash
bin/stop-hugegraph.sh
```

#### Docker 分布式集群

通过 Docker-Compose 运行完整的分布式集群(3 PD + 3 Store + 3 Server):


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

服务通过 `hg-net` 桥接网络上的容器主机名进行通信。配置通过环境变量注入:

```yaml
# Server 配置
HG_SERVER_BACKEND: hstore
HG_SERVER_PD_PEERS: pd0:8686,pd1:8686,pd2:8686
```

验证集群:
```bash
curl http://localhost:8080/versions
curl http://localhost:8620/v1/stores
```

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

完整的环境变量参考、端口表和故障排查指南请参阅 [docker/README.md](https://github.com/apache/hugegraph/blob/master/docker/README.md)。
</details>

##### 5.1.2 RocksDB / ToplingDB
Expand Down
Loading
Loading