使用 Docker Compose 部署 Nebula Graph¶
使用 Docker Compose 可以基于准备好的配置文件快速部署 Nebula Graph 服务,仅建议在测试 Nebula Graph 功能时使用该方式。
前提条件¶
- 主机上安装如下应用程序。
应用程序 推荐版本 官方安装参考 Docker 最新版本 Install Docker Engine Docker Compose 最新版本 Install Docker Compose Git 最新版本 Download Git
- 如果使用非 root 用户部署 Nebula Graph,请授权该用户 Docker 相关的权限。详细信息,请参见 Manage Docker as a non-root user。
- 启动主机上的 Docker 服务。
- 如果已经通过 Docker Compose 在主机上部署了另一个版本的 Nebula Graph,为避免兼容性问题,需要删除目录
nebula-docker-compose/data
。
部署和连接 Nebula Graph¶
-
通过 Git 克隆
nebula-docker-compose
仓库的3.0.1
分支到主机。Danger
master
分支包含最新的未测试代码。请不要在生产环境使用此版本。$ git clone -b v3.0.1 https://github.com/vesoft-inc/nebula-docker-compose.git
-
切换至目录
nebula-docker-compose
。$ cd nebula-docker-compose/
-
执行如下命令启动 Nebula Graph 服务。
从 3.0.2 开始,Nebula Graph 在 Docker Hub 上的 Docker 支持 ARM64 架构。用户可以在 ARM macOS 的 Docker Desktop 上或者 ARM Linux Server 上运行容器化的 Nebula Graph。
Note
如果长期未更新镜像,请先更新 Nebula Graph 镜像和 Nebula Console 镜像。
[nebula-docker-compose]$ docker-compose up -d Creating nebula-docker-compose_metad0_1 ... done Creating nebula-docker-compose_metad2_1 ... done Creating nebula-docker-compose_metad1_1 ... done Creating nebula-docker-compose_graphd2_1 ... done Creating nebula-docker-compose_graphd_1 ... done Creating nebula-docker-compose_graphd1_1 ... done Creating nebula-docker-compose_storaged0_1 ... done Creating nebula-docker-compose_storaged2_1 ... done Creating nebula-docker-compose_storaged1_1 ... done
Note
上述服务的更多信息,请参见架构总览。
-
连接 Nebula Graph。
-
使用 Nebula Console 镜像启动一个容器,并连接到 Nebula Graph 服务所在的网络(nebula-docker-compose_nebula-net)中。
$ docker run --rm -ti --network nebula-docker-compose_nebula-net --entrypoint=/bin/sh vesoft/nebula-console:v3.0.0
Note
本地网络可能和示例中的
nebula-docker-compose_nebula-net
不同,请使用如下命令查看。$ docker network ls NETWORK ID NAME DRIVER SCOPE a74c312b1d16 bridge bridge local dbfa82505f0e host host local ed55ccf356ae nebula-docker-compose_nebula-net bridge local 93ba48b4b288 none null local
-
通过 Nebula Console 连接 Nebula Graph。
docker> nebula-console -u <user_name> -p <password> --address=graphd --port=9669
Note
默认情况下,身份认证功能是关闭的,只能使用已存在的用户名(默认为
root
)和任意密码登录。如果想使用身份认证,请参见身份认证。 -
执行如下命令将
nebula-storaged
进程增加为可用状态。nebula> ADD HOSTS "storaged0":9779,"storaged1":9779,"storaged2":9779; nebula> SHOW HOSTS; +-------------+------+----------+--------------+----------------------+------------------------+---------+ | Host | Port | Status | Leader count | Leader distribution | Partition distribution | Version | +-------------+------+----------+--------------+----------------------+------------------------+---------+ | "storaged0" | 9779 | "ONLINE" | 0 | "No valid partition" | "No valid partition" | "3.0.1" | | "storaged1" | 9779 | "ONLINE" | 0 | "No valid partition" | "No valid partition" | "3.0.1" | | "storaged2" | 9779 | "ONLINE" | 0 | "No valid partition" | "No valid partition" | "3.0.1" | +-------------+------+----------+--------------+----------------------+------------------------+---------+
Note
从 3.0 开始,上报到 metad 的
nebula-storaged
服务需要人为ADD HOSTS
之后才可以被使用。
-
-
执行两次
exit
可以退出容器。
查看 Nebula Graph 服务的状态和端口¶
执行命令docker-compose ps
可以列出 Nebula Graph 服务的状态和端口。
$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
nebula-docker-compose_graphd1_1 ./bin/nebula-graphd --flag ... Up (health: starting) 13000/tcp, 13002/tcp, 0.0.0.0:33295->19669/tcp, 0.0.0.0:33291->19670/tcp,
3699/tcp, 0.0.0.0:33298->9669/tcp
nebula-docker-compose_graphd2_1 ./bin/nebula-graphd --flag ... Up (health: starting) 13000/tcp, 13002/tcp, 0.0.0.0:33285->19669/tcp, 0.0.0.0:33284->19670/tcp,
3699/tcp, 0.0.0.0:33286->9669/tcp
nebula-docker-compose_graphd_1 ./bin/nebula-graphd --flag ... Up (health: starting) 13000/tcp, 13002/tcp, 0.0.0.0:33288->19669/tcp, 0.0.0.0:33287->19670/tcp,
3699/tcp, 0.0.0.0:9669->9669/tcp
nebula-docker-compose_metad0_1 ./bin/nebula-metad --flagf ... Up (health: starting) 11000/tcp, 11002/tcp, 0.0.0.0:33276->19559/tcp, 0.0.0.0:33275->19560/tcp,
45500/tcp, 45501/tcp, 0.0.0.0:33278->9559/tcp
nebula-docker-compose_metad1_1 ./bin/nebula-metad --flagf ... Up (health: starting) 11000/tcp, 11002/tcp, 0.0.0.0:33279->19559/tcp, 0.0.0.0:33277->19560/tcp,
45500/tcp, 45501/tcp, 0.0.0.0:33281->9559/tcp
nebula-docker-compose_metad2_1 ./bin/nebula-metad --flagf ... Up (health: starting) 11000/tcp, 11002/tcp, 0.0.0.0:33282->19559/tcp, 0.0.0.0:33280->19560/tcp,
45500/tcp, 45501/tcp, 0.0.0.0:33283->9559/tcp
nebula-docker-compose_storaged0_1 ./bin/nebula-storaged --fl ... Up (health: starting) 12000/tcp, 12002/tcp, 0.0.0.0:33290->19779/tcp, 0.0.0.0:33289->19780/tcp,
44500/tcp, 44501/tcp, 0.0.0.0:33294->9779/tcp
nebula-docker-compose_storaged1_1 ./bin/nebula-storaged --fl ... Up (health: starting) 12000/tcp, 12002/tcp, 0.0.0.0:33296->19779/tcp, 0.0.0.0:33292->19780/tcp,
44500/tcp, 44501/tcp, 0.0.0.0:33299->9779/tcp
nebula-docker-compose_storaged2_1 ./bin/nebula-storaged --fl ... Up (health: starting) 12000/tcp, 12002/tcp, 0.0.0.0:33297->19779/tcp, 0.0.0.0:33293->19780/tcp,
44500/tcp, 44501/tcp, 0.0.0.0:33300->9779/tcp
Nebula Graph 默认使用9669
端口为客户端提供服务,如果需要修改端口,请修改目录nebula-docker-compose
内的文件docker-compose.yaml
,然后重启 Nebula Graph 服务。
查看 Nebula Graph 服务的数据和日志¶
Nebula Graph 的所有数据和日志都持久化存储在nebula-docker-compose/data
和nebula-docker-compose/logs
目录中。
目录的结构如下:
nebula-docker-compose/
|-- docker-compose.yaml
├── data
│ ├── meta0
│ ├── meta1
│ ├── meta2
│ ├── storage0
│ ├── storage1
│ └── storage2
└── logs
├── graph
├── graph1
├── graph2
├── meta0
├── meta1
├── meta2
├── storage0
├── storage1
└── storage2
停止 Nebula Graph 服务¶
用户可以执行如下命令停止 Nebula Graph 服务:
$ docker-compose down
如果返回如下信息,表示已经成功停止服务。
Stopping nebula-docker-compose_graphd2_1 ... done
Stopping nebula-docker-compose_graphd1_1 ... done
Stopping nebula-docker-compose_graphd_1 ... done
Stopping nebula-docker-compose_storaged1_1 ... done
Stopping nebula-docker-compose_storaged2_1 ... done
Stopping nebula-docker-compose_storaged0_1 ... done
Stopping nebula-docker-compose_metad0_1 ... done
Stopping nebula-docker-compose_metad1_1 ... done
Stopping nebula-docker-compose_metad2_1 ... done
Removing nebula-docker-compose_graphd2_1 ... done
Removing nebula-docker-compose_graphd1_1 ... done
Removing nebula-docker-compose_graphd_1 ... done
Removing nebula-docker-compose_storaged1_1 ... done
Removing nebula-docker-compose_storaged2_1 ... done
Removing nebula-docker-compose_storaged0_1 ... done
Removing nebula-docker-compose_metad0_1 ... done
Removing nebula-docker-compose_metad1_1 ... done
Removing nebula-docker-compose_metad2_1 ... done
Removing network nebula-docker-compose_nebula-net
Danger
命令docker-compose down -v
的参数-v
将会删除所有本地的数据。如果使用的是 nightly 版本,并且有一些兼容性问题,请尝试这个命令。
修改配置¶
Docker Compose 部署的 Nebula Graph,配置文件位置为nebula-docker-compose/docker-compose.yaml
,修改该文件内的配置并重启服务即可使新配置生效。
具体的配置说明请参见配置管理。
常见问题¶
如何固定 Docker 映射到外部的端口?¶
在目录nebula-docker-compose
内修改文件docker-compose.yaml
,将对应服务的ports
设置为固定映射,例如:
graphd:
image: vesoft/nebula-graphd:v3.0.2
...
ports:
- 9669:9669
- 19669
- 19670
9669:9669
表示内部的 9669 映射到外部的端口也是 9669,下方的19669
表示内部的 19669 映射到外部的端口是随机的。
如何升级/更新 Nebula Graph 服务的 Docker 镜像?¶
-
在文件
nebula-docker-compose/docker-compose.yaml
中,找到所有服务的image
并修改其值为相应的镜像版本。 -
在目录
nebula-docker-compose
内执行命令docker-compose pull
,更新 Graph 服务、Storage 服务和 Meta 服务的镜像。 -
执行命令
docker-compose up -d
启动 Nebula Graph 服务。 -
通过 Nebula Console 连接 Nebula Graph 后,分别执行命令
SHOW HOSTS GRAPH
、SHOW HOSTS STORAGE
、SHOW HOSTS META
查看各服务版本。
执行命令docker-compose pull
报错ERROR: toomanyrequests
¶
可能遇到如下错误:
ERROR: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit
以上错误表示已达到 Docker Hub 的速率限制。解决方案请参见 Understanding Docker Hub Rate Limiting。
如何更新 Nebula Console?¶
执行如下命令可以更新 Nebula Console 客户端镜像。
docker pull vesoft/nebula-console:v3.0.0
为什么更新 nebula-docker-compose 仓库(Nebula Graph 2.0.0-RC)后,无法通过端口3699
连接 Nebula Graph?¶
从 Nebula Graph 2.0.0-RC 版本开始,默认端口从3699
改为9669
。请使用9669
端口连接,或修改配置文件docker-compose.yaml
内的端口。
为什么更新 nebula-docker-compose 仓库后,无法访问数据?(2021 年 01 月 04 日)¶
如果在 2021 年 01 月 04 日后更新过 nebula-docker-compose 仓库,而且之前已经有数据,请修改文件docker-compose.yaml
,将端口修改为之前使用的端口。详情请参见修改默认端口。
为什么更新 nebula-docker-compose 仓库后,无法访问数据?(2021 年 01 月 27 日)¶
2021 年 01 月 27 日修改了数据格式,无法兼容之前的数据,请执行命令docker-compose down -v
删除所有本地数据。