使用 Docker Swarm 部署 Nebula Graph 集群

本文档介绍如何使用 Docker Swarm 部署 Nebula Graph 集群。

前提条件

部署集群前,请确保所有机器已安装 Docker 和 Docker Compose。如果需要自定义负载均衡和高可用,请安装 HAProxy 和 Keepalived。

机器准备:

IP内存(Gb)CPU(核数)角色
192.168.1.166164manager
192.168.1.167164worker
192.168.1.168164worker

创建 Nebula Graph 集群

初始化 Docker Swarm 集群

在机器 192.168.1.166 上执行以下命令初始化 Docker Swarm 集群:

  1. $ docker swarm init --advertise-addr 192.168.1.166

返回以下信息:

  1. Swarm initialized: current node (dxn1zf6l61qsb1josjja83ngz) is now a manager.
  2. To add a worker to this swarm, run the following command:
  3. docker swarm join \
  4. --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
  5. 192.168.1.166:2377
  6. To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

创建集群工作节点

根据 docker swarm init 命令的提示内容,创建 Swarm 集群的工作节点,分别在机器 192.168.1.167192.168.1.168 上执行以下命令:

  1. $ docker swarm join \
  2. --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
  3. 192.168.1.166:2377

返回以下信息:

  1. This node joined a swarm as a worker.

验证集群

在 manager 节点上执行以下命令列出 Docker Swarm 节点信息:

  1. $ docker node ls

返回以下信息:

  1. ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
  2. h0az2wzqetpwhl9ybu76yxaen * KF2-DATA-166 Ready Active Reachable 18.06.1-ce
  3. q6jripaolxsl7xqv3cmv5pxji KF2-DATA-167 Ready Active Leader 18.06.1-ce
  4. h1iql1uvm7123h3gon9so69dy KF2-DATA-168 Ready Active 18.06.1-ce

配置 Docker Stack

在 manager 节点上执行以下命令添加 Docker Stack 配置文件:

  1. $ vi docker-stack.yml

请根据您的 IP 地址与端口号进行配置。示例配置文件参考 docker-stack.yml

在 manager 节点上执行以下命令添加 nebula.env 配置文件:

  1. $ vi nebula.env

nebula.env 文件中加入如下内容:

  1. TZ=UTC
  2. USER=root

启动集群

在 manager 节点上执行以下命令启动 Nebula Graph 集群:

  1. $ docker stack deploy nebula -c docker-stack.yml

查看集群服务

在 manager 节点上执行以下命令查看服务状态:

  1. $ docker service ls

返回以下信息:

  1. ID NAME MODE REPLICAS IMAGE PORTS
  2. 43abplqq0h2z nebula_graphd1 replicated 1/1 vesoft/nebula-graphd:nightly
  3. jkmnyzy2772s nebula_graphd2 replicated 1/1 vesoft/nebula-graphd:nightly
  4. uo79ebcp41uw nebula_graphd3 replicated 1/1 vesoft/nebula-graphd:nightly
  5. p50k0l1pvth0 nebula_metad0 replicated 1/1 vesoft/nebula-metad:nightly
  6. oafq5jph8e65 nebula_metad1 replicated 1/1 vesoft/nebula-metad:nightly
  7. qr4t5a8u5vjv nebula_metad2 replicated 1/1 vesoft/nebula-metad:nightly
  8. ivs5i0o69505 nebula_storaged0 replicated 1/1 vesoft/nebula-storaged:nightly
  9. y1xlsym8q90s nebula_storaged1 replicated 1/1 vesoft/nebula-storaged:nightly
  10. xwgu2sfi2qso nebula_storaged2 replicated 1/1 vesoft/nebula-storaged:nightly

集群负载均衡及高可用配置(可选)

目前,Nebula Graph 的客户端(1.X)未提供负载均衡,而是随机选一个 graphd 服务连接。因此生产使用时需自行配置负载均衡和高可用。文档中的负载均衡和高可用仅为示例方案,您可以根据需要添加其他的第三方方案。

负载均衡配置

HAProxy 使用 Docker Compose 配置。分别编辑以下三个文件:

Dockerfile 文件中加入以下内容:

  1. FROM haproxy:1.7
  2. COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
  3. EXPOSE 3640

docker-compose.yml 文件加入以下内容:

  1. version: "3.2"
  2. services:
  3. haproxy:
  4. container_name: haproxy
  5. build: .
  6. volumes:
  7. - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
  8. ports:
  9. - 3640:3640
  10. restart: always
  11. networks:
  12. - app_net
  13. networks:
  14. app_net:
  15. external: true

haproxy.cfg 文件加入以下内容:

请根据您的 IP 地址与端口号进行配置。

  1. global
  2. daemon
  3. maxconn 30000
  4. log 127.0.0.1 local0 info
  5. log 127.0.0.1 local1 warning
  6. defaults
  7. log-format %hr\ %ST\ %B\ %Ts
  8. log global
  9. mode http
  10. option http-keep-alive
  11. timeout connect 5000ms
  12. timeout client 10000ms
  13. timeout server 50000ms
  14. timeout http-request 20000ms
  15. # customize your own frontends && backends && listen conf
  16. #CUSTOM
  17. listen graphd-cluster
  18. bind *:3640
  19. mode tcp
  20. maxconn 300
  21. balance roundrobin
  22. server server1 192.168.1.166:3699 maxconn 300 check
  23. server server2 192.168.1.167:3699 maxconn 300 check
  24. server server3 192.168.1.168:3699 maxconn 300 check
  25. listen stats
  26. bind *:1080
  27. stats refresh 30s
  28. stats uri /stats

启动 HAProxy

  1. $ docker-compose up -d

高可用配置

192.168.1.166192.168.1.167192.168.1.168 进行以下操作:

安装 Keepalived

执行以下命令安装 Keepalived:

  1. apt-get update && apt-get upgrade && apt-get install keepalived -y

配置 Keepalived

更改 Keepalived 配置文件 /etc/keepalived/keepalived.conf(三台机器中 priority 必须设置成不同值以确定优先级)。示例配置文件参考 keepalived.conf

注意:配置 Keepalived 需预先准备好虚拟 IP,在以下配置中 192.168.1.99 即为虚拟 IP。

FAQ

如何实现离线部署

将镜像更改为私有镜像库即可实现离线部署。