跳转至

使用 Docker Compose 部署 Nebula Graph

使用 Docker Compose 可以基于准备好的配置文件快速部署 Nebula Graph 服务,仅建议在测试 Nebula Graph 功能时使用该方式。

前提条件

  • 启动主机上的 Docker 服务。
  • 如果已经通过 Docker Compose 在主机上部署了另一个版本的 Nebula Graph,为避免兼容性问题,需要删除目录nebula-docker-compose/data

部署和连接 Nebula Graph

  1. 通过 Git 克隆nebula-docker-compose仓库的3.0.1分支到主机。

    Danger

    master分支包含最新的未测试代码。请不要在生产环境使用此版本。

    $ git clone -b v3.0.1 https://github.com/vesoft-inc/nebula-docker-compose.git
    
  2. 切换至目录nebula-docker-compose

    $ cd nebula-docker-compose/
    
  3. 执行如下命令启动 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

    上述服务的更多信息,请参见架构总览

  4. 连接 Nebula Graph。

    1. 使用 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
      
    2. 通过 Nebula Console 连接 Nebula Graph。

      docker> nebula-console -u <user_name> -p <password> --address=graphd --port=9669
      

      Note

      默认情况下,身份认证功能是关闭的,只能使用已存在的用户名(默认为root)和任意密码登录。如果想使用身份认证,请参见身份认证

    3. 执行如下命令将 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 之后才可以被使用。

  5. 执行两次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/datanebula-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 镜像?

  1. 在文件nebula-docker-compose/docker-compose.yaml中,找到所有服务的image并修改其值为相应的镜像版本。

  2. 在目录nebula-docker-compose内执行命令docker-compose pull,更新 Graph 服务、Storage 服务和 Meta 服务的镜像。

  3. 执行命令docker-compose up -d启动 Nebula Graph 服务。

  4. 通过 Nebula Console 连接 Nebula Graph 后,分别执行命令SHOW HOSTS GRAPHSHOW HOSTS STORAGESHOW 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删除所有本地数据。


最后更新: March 7, 2023