使用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

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

    Danger

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

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

    1. $ cd nebula-docker-compose/
  3. 执行如下命令启动Nebula Graph服务。

    Note

    如果长期未更新镜像,请先更新Nebula Graph镜像Nebula Console镜像

    1. [nebula-docker-compose]$ docker-compose up -d
    2. Creating nebula-docker-compose_metad0_1 ... done
    3. Creating nebula-docker-compose_metad2_1 ... done
    4. Creating nebula-docker-compose_metad1_1 ... done
    5. Creating nebula-docker-compose_graphd2_1 ... done
    6. Creating nebula-docker-compose_graphd_1 ... done
    7. Creating nebula-docker-compose_graphd1_1 ... done
    8. Creating nebula-docker-compose_storaged0_1 ... done
    9. Creating nebula-docker-compose_storaged2_1 ... done
    10. Creating nebula-docker-compose_storaged1_1 ... done

    Note

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

  4. 连接Nebula Graph。

    1. 使用Nebula Console镜像启动一个容器,并连接到Nebula Graph服务所在的网络(nebula-docker-compose_nebula-net)中。

      1. $ docker run --rm -ti --network nebula-docker-compose_nebula-net --entrypoint=/bin/sh vesoft/nebula-console:v2.6.0

      Note

      本地网络可能和示例中的nebula-docker-compose_nebula-net不同,请使用如下命令查看。

      1. $ docker network ls
      2. NETWORK ID NAME DRIVER SCOPE
      3. a74c312b1d16 bridge bridge local
      4. dbfa82505f0e host host local
      5. ed55ccf356ae nebula-docker-compose_nebula-net bridge local
      6. 93ba48b4b288 none null local
    2. 通过Nebula Console连接Nebula Graph。

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

      Note

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

    3. 执行如下命令检查nebula-storaged进程状态。

      1. nebula> SHOW HOSTS;
      2. +-------------+------+----------+--------------+----------------------+------------------------+
      3. | Host | Port | Status | Leader count | Leader distribution | Partition distribution |
      4. +-------------+------+----------+--------------+----------------------+------------------------+
      5. | "storaged0" | 9779 | "ONLINE" | 0 | "No valid partition" | "No valid partition" |
      6. | "storaged1" | 9779 | "ONLINE" | 0 | "No valid partition" | "No valid partition" |
      7. | "storaged2" | 9779 | "ONLINE" | 0 | "No valid partition" | "No valid partition" |
      8. | "Total" | | | 0 | | |
      9. +-------------+------+----------+--------------+----------------------+------------------------+
  5. 执行两次exit 可以退出容器。

查看Nebula Graph服务的状态和端口

执行命令docker-compose ps可以列出Nebula Graph服务的状态和端口。

  1. $ docker-compose ps
  2. Name Command State Ports
  3. -------------------------------------------------------------------------------------------------------------------------------------------------------------------
  4. 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,
  5. 3699/tcp, 0.0.0.0:33298->9669/tcp
  6. 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,
  7. 3699/tcp, 0.0.0.0:33286->9669/tcp
  8. 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,
  9. 3699/tcp, 0.0.0.0:9669->9669/tcp
  10. 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,
  11. 45500/tcp, 45501/tcp, 0.0.0.0:33278->9559/tcp
  12. 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,
  13. 45500/tcp, 45501/tcp, 0.0.0.0:33281->9559/tcp
  14. 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,
  15. 45500/tcp, 45501/tcp, 0.0.0.0:33283->9559/tcp
  16. 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,
  17. 44500/tcp, 44501/tcp, 0.0.0.0:33294->9779/tcp
  18. 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,
  19. 44500/tcp, 44501/tcp, 0.0.0.0:33299->9779/tcp
  20. 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,
  21. 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目录中。

目录的结构如下:

  1. nebula-docker-compose/
  2. |-- docker-compose.yaml
  3. ├── data
  4. ├── meta0
  5. ├── meta1
  6. ├── meta2
  7. ├── storage0
  8. ├── storage1
  9. └── storage2
  10. └── logs
  11. ├── graph
  12. ├── graph1
  13. ├── graph2
  14. ├── meta0
  15. ├── meta1
  16. ├── meta2
  17. ├── storage0
  18. ├── storage1
  19. └── storage2

停止Nebula Graph服务

用户可以执行如下命令停止Nebula Graph服务:

  1. $ docker-compose down

如果返回如下信息,表示已经成功停止服务。

  1. Stopping nebula-docker-compose_graphd2_1 ... done
  2. Stopping nebula-docker-compose_graphd1_1 ... done
  3. Stopping nebula-docker-compose_graphd_1 ... done
  4. Stopping nebula-docker-compose_storaged1_1 ... done
  5. Stopping nebula-docker-compose_storaged2_1 ... done
  6. Stopping nebula-docker-compose_storaged0_1 ... done
  7. Stopping nebula-docker-compose_metad0_1 ... done
  8. Stopping nebula-docker-compose_metad1_1 ... done
  9. Stopping nebula-docker-compose_metad2_1 ... done
  10. Removing nebula-docker-compose_graphd2_1 ... done
  11. Removing nebula-docker-compose_graphd1_1 ... done
  12. Removing nebula-docker-compose_graphd_1 ... done
  13. Removing nebula-docker-compose_storaged1_1 ... done
  14. Removing nebula-docker-compose_storaged2_1 ... done
  15. Removing nebula-docker-compose_storaged0_1 ... done
  16. Removing nebula-docker-compose_metad0_1 ... done
  17. Removing nebula-docker-compose_metad1_1 ... done
  18. Removing nebula-docker-compose_metad2_1 ... done
  19. 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设置为固定映射,例如:

  1. graphd:
  2. image: vesoft/nebula-graphd:v2.6.1
  3. ...
  4. ports:
  5. - 9669:9669
  6. - 19669
  7. - 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服务的镜像。

    Note

    执行docker-compose pull命令更新服务镜像前,确保已停止Nebula Graph。

  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客户端镜像。

  1. docker pull vesoft/nebula-console:v2.6.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删除所有本地数据。

相关视频

用户也可以查看视频快速部署Nebula Graph 2.0。

使用 docker compose 部署 Nebula Graph 2.0 和 Web Studio(18分10秒)


最后更新: November 4, 2021