avatar

甄天祥-Linux-个人小站

A text-focused Halo theme

  • 首页
  • 分类
  • 标签
  • 关于
Home Docker-compose 部署 nebula 集群数据库
文章

Docker-compose 部署 nebula 集群数据库

Posted 2025-05-18 Updated 2025-05- 18
By Administrator
62~80 min read

一、官方默认启动配置

官方默认的 compose 文件是集群模式,部署在同一台机器上,如下:

$ git clone -b release-3.5 https://github.com/vesoft-inc/nebula-docker-compose.git

查看配置文件内容

services:
  metad0:
    image: vesoft/nebula-metad:v3.5.0
    environment:
      USER: root
      TZ:   "${TZ}"
    command:
      - --meta_server_addrs=metad0:9559,metad1:9559,metad2:9559
      - --local_ip=metad0
      - --ws_ip=metad0
      - --port=9559
      - --ws_http_port=19559
      - --data_path=/data/meta
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://metad0:19559/status"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s
    ports:
      - 9559
      - 19559
      - 19560
    volumes:
      - ./data/meta0:/data/meta
      - ./logs/meta0:/logs
    networks:
      - nebula-net
    restart: on-failure
    cap_add:
      - SYS_PTRACE
​
  metad1:
    image: vesoft/nebula-metad:v3.5.0
    environment:
      USER: root
      TZ:   "${TZ}"
    command:
      - --meta_server_addrs=metad0:9559,metad1:9559,metad2:9559
      - --local_ip=metad1
      - --ws_ip=metad1
      - --port=9559
      - --ws_http_port=19559
      - --data_path=/data/meta
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://metad1:19559/status"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s
    ports:
      - 9559
      - 19559
      - 19560
    volumes:
      - ./data/meta1:/data/meta
      - ./logs/meta1:/logs
    networks:
      - nebula-net
    restart: on-failure
    cap_add:
      - SYS_PTRACE
​
  metad2:
    image: vesoft/nebula-metad:v3.5.0
    environment:
      USER: root
      TZ:   "${TZ}"
    command:
      - --meta_server_addrs=metad0:9559,metad1:9559,metad2:9559
      - --local_ip=metad2
      - --ws_ip=metad2
      - --port=9559
      - --ws_http_port=19559
      - --data_path=/data/meta
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://metad2:19559/status"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s
    ports:
      - 9559
      - 19559
      - 19560
    volumes:
      - ./data/meta2:/data/meta
      - ./logs/meta2:/logs
    networks:
      - nebula-net
    restart: on-failure
    cap_add:
      - SYS_PTRACE
​
  storaged0:
    image: vesoft/nebula-storaged:v3.5.0
    environment:
      USER: root
      TZ:   "${TZ}"
    command:
      - --meta_server_addrs=metad0:9559,metad1:9559,metad2:9559
      - --local_ip=storaged0
      - --ws_ip=storaged0
      - --port=9779
      - --ws_http_port=19779
      - --data_path=/data/storage
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    depends_on:
      - metad0
      - metad1
      - metad2
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://storaged0:19779/status"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s
    ports:
      - 9779
      - 19779
      - 19780
    volumes:
      - ./data/storage0:/data/storage
      - ./logs/storage0:/logs
    networks:
      - nebula-net
    restart: on-failure
    cap_add:
      - SYS_PTRACE
​
  storaged1:
    image: vesoft/nebula-storaged:v3.5.0
    environment:
      USER: root
      TZ:   "${TZ}"
    command:
      - --meta_server_addrs=metad0:9559,metad1:9559,metad2:9559
      - --local_ip=storaged1
      - --ws_ip=storaged1
      - --port=9779
      - --ws_http_port=19779
      - --data_path=/data/storage
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    depends_on:
      - metad0
      - metad1
      - metad2
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://storaged1:19779/status"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s
    ports:
      - 9779
      - 19779
      - 19780
    volumes:
      - ./data/storage1:/data/storage
      - ./logs/storage1:/logs
    networks:
      - nebula-net
    restart: on-failure
    cap_add:
      - SYS_PTRACE
​
  storaged2:
    image: vesoft/nebula-storaged:v3.5.0
    environment:
      USER: root
      TZ:   "${TZ}"
    command:
      - --meta_server_addrs=metad0:9559,metad1:9559,metad2:9559
      - --local_ip=storaged2
      - --ws_ip=storaged2
      - --port=9779
      - --ws_http_port=19779
      - --data_path=/data/storage
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    depends_on:
      - metad0
      - metad1
      - metad2
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://storaged2:19779/status"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s
    ports:
      - 9779
      - 19779
      - 19780
    volumes:
      - ./data/storage2:/data/storage
      - ./logs/storage2:/logs
    networks:
      - nebula-net
    restart: on-failure
    cap_add:
      - SYS_PTRACE
​
  graphd:
    image: vesoft/nebula-graphd:v3.5.0
    environment:
      USER: root
      TZ:   "${TZ}"
    command:
      - --meta_server_addrs=metad0:9559,metad1:9559,metad2:9559
      - --port=9669
      - --local_ip=graphd
      - --ws_ip=graphd
      - --ws_http_port=19669
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    depends_on:
      - storaged0
      - storaged1
      - storaged2
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://graphd:19669/status"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s
    ports:
      - "9669:9669"
      - 19669
      - 19670
    volumes:
      - ./logs/graph:/logs
    networks:
      - nebula-net
    restart: on-failure
    cap_add:
      - SYS_PTRACE
​
  graphd1:
    image: vesoft/nebula-graphd:v3.5.0
    environment:
      USER: root
      TZ:   "${TZ}"
    command:
      - --meta_server_addrs=metad0:9559,metad1:9559,metad2:9559
      - --port=9669
      - --local_ip=graphd1
      - --ws_ip=graphd1
      - --ws_http_port=19669
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    depends_on:
      - storaged0
      - storaged1
      - storaged2
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://graphd1:19669/status"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s
    ports:
      - 9669
      - 19669
      - 19670
    volumes:
      - ./logs/graph1:/logs
    networks:
      - nebula-net
    restart: on-failure
    cap_add:
      - SYS_PTRACE
​
  graphd2:
    image: vesoft/nebula-graphd:v3.5.0
    environment:
      USER: root
      TZ:   "${TZ}"
    command:
      - --meta_server_addrs=metad0:9559,metad1:9559,metad2:9559
      - --port=9669
      - --local_ip=graphd2
      - --ws_ip=graphd2
      - --ws_http_port=19669
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    depends_on:
      - storaged0
      - storaged1
      - storaged2
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://graphd2:19669/status"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s
    ports:
      - 9669
      - 19669
      - 19670
    volumes:
      - ./logs/graph2:/logs
    networks:
      - nebula-net
    restart: on-failure
    cap_add:
      - SYS_PTRACE
  
  console:
    image: vesoft/nebula-console:v3.5
    entrypoint: ""
    command: 
      - sh
      - -c
      - |
        for i in `seq 1 60`;do
          var=`nebula-console -addr graphd -port 9669 -u root -p nebula -e 'ADD HOSTS "storaged0":9779,"storaged1":9779,"storaged2":9779'`;
          if [[ $$? == 0 ]];then
            break;
          fi;
          sleep 1;
          echo "retry to add hosts.";
        done && tail -f /dev/null;
​
    depends_on:
      - graphd
    networks:
      - nebula-net
​
networks:
  nebula-net:

所以我们要拆开去部署

二、拆分启动文件

首先我这边三台机器信息

IP地址

数据库连接端口

192.168.248.41

9669

192.168.248.42

9669

192.168.248.43

9669

1. 准备第一台机器配置

# 创建相关目录
$ mkdir -pv /data/docker-app/nebula/{data/meta,data/storage,logs/meta,logs/storage,logs/graph}
$ vim docker-compose.yml
services:
  metad:
    image: vesoft/nebula-metad:v3.5.0
    network_mode: host
    environment:
      USER: root
      TZ: "Asia/Shanghai"
    command:
      - --meta_server_addrs=192.168.248.41:9559,192.168.248.42:9559,192.168.248.43:9559
      - --local_ip=192.168.248.41
      - --ws_ip=192.168.248.41
      - --port=9559
      - --ws_http_port=19559
      - --data_path=/data/meta
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    volumes:
      - ./data/meta:/data/meta
      - ./logs/meta:/logs
    restart: unless-stopped
​
  storaged:
    image: vesoft/nebula-storaged:v3.5.0
    network_mode: host
    environment:
      USER: root
      TZ: "Asia/Shanghai"
    command:
      - --meta_server_addrs=192.168.248.41:9559,192.168.248.42:9559,192.168.248.43:9559
      - --local_ip=192.168.248.41
      - --ws_ip=192.168.248.41
      - --port=9779
      - --ws_http_port=19779
      - --data_path=/data/storage
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    volumes:
      - ./data/storage:/data/storage
      - ./logs/storage:/logs
    depends_on:
      - metad
    restart: unless-stopped
​
  graphd:
    image: vesoft/nebula-graphd:v3.5.0
    network_mode: host
    environment:
      USER: root
      TZ: "Asia/Shanghai"
    command:
      - --meta_server_addrs=192.168.248.41:9559,192.168.248.42:9559,192.168.248.43:9559
      - --port=9669
      - --local_ip=192.168.248.41
      - --ws_ip=192.168.248.41
      - --ws_http_port=19669
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
      - --enable_authorize=true # 开启权限认证,使用用户密码登录
    volumes:
      - ./logs/graph:/logs
    depends_on:
      - storaged
    restart: unless-stopped

启动

$ docker-compose up -d

2. 准备第二台机器配置

# 创建相关目录
$ mkdir -pv /data/docker-app/nebula/{data/meta,data/storage,logs/meta,logs/storage,logs/graph}
$ vim docker-compose.yml
services:
  metad:
    image: vesoft/nebula-metad:v3.5.0
    network_mode: host
    environment:
      USER: root
      TZ: "Asia/Shanghai"
    command:
      - --meta_server_addrs=192.168.248.41:9559,192.168.248.42:9559,192.168.248.43:9559
      - --local_ip=192.168.248.42
      - --ws_ip=192.168.248.42
      - --port=9559
      - --ws_http_port=19559
      - --data_path=/data/meta
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    volumes:
      - ./data/meta:/data/meta
      - ./logs/meta:/logs
    restart: unless-stopped
​
  storaged:
    image: vesoft/nebula-storaged:v3.5.0
    network_mode: host
    environment:
      USER: root
      TZ: "Asia/Shanghai"
    command:
      - --meta_server_addrs=192.168.248.41:9559,192.168.248.42:9559,192.168.248.43:9559
      - --local_ip=192.168.248.42
      - --ws_ip=192.168.248.42
      - --port=9779
      - --ws_http_port=19779
      - --data_path=/data/storage
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    volumes:
      - ./data/storage:/data/storage
      - ./logs/storage:/logs
    depends_on:
      - metad
    restart: unless-stopped
​
  graphd:
    image: vesoft/nebula-graphd:v3.5.0
    network_mode: host
    environment:
      USER: root
      TZ: "Asia/Shanghai"
    command:
      - --meta_server_addrs=192.168.248.41:9559,192.168.248.42:9559,192.168.248.43:9559
      - --port=9669
      - --local_ip=192.168.248.42
      - --ws_ip=192.168.248.42
      - --ws_http_port=19669
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
      - --enable_authorize=true # 开启权限认证,使用用户密码登录
    volumes:
      - ./logs/graph:/logs
    depends_on:
      - storaged
    restart: unless-stopped

启动

$ docker-compose up -d

3. 准备第三台机器配置

# 创建相关目录
$ mkdir -pv /data/docker-app/nebula/{data/meta,data/storage,logs/meta,logs/storage,logs/graph}
$ vim docker-compose.yml
services:
  metad:
    image: vesoft/nebula-metad:v3.5.0
    network_mode: host
    environment:
      USER: root
      TZ: "Asia/Shanghai"
    command:
      - --meta_server_addrs=192.168.248.41:9559,192.168.248.42:9559,192.168.248.43:9559
      - --local_ip=192.168.248.43
      - --ws_ip=192.168.248.43
      - --port=9559
      - --ws_http_port=19559
      - --data_path=/data/meta
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    volumes:
      - ./data/meta:/data/meta
      - ./logs/meta:/logs
    restart: unless-stopped
​
  storaged:
    image: vesoft/nebula-storaged:v3.5.0
    network_mode: host
    environment:
      USER: root
      TZ: "Asia/Shanghai"
    command:
      - --meta_server_addrs=192.168.248.41:9559,192.168.248.42:9559,192.168.248.43:9559
      - --local_ip=192.168.248.43
      - --ws_ip=192.168.248.43
      - --port=9779
      - --ws_http_port=19779
      - --data_path=/data/storage
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    volumes:
      - ./data/storage:/data/storage
      - ./logs/storage:/logs
    depends_on:
      - metad
    restart: unless-stopped
​
  graphd:
    image: vesoft/nebula-graphd:v3.5.0
    network_mode: host
    environment:
      USER: root
      TZ: "Asia/Shanghai"
    command:
      - --meta_server_addrs=192.168.248.41:9559,192.168.248.42:9559,192.168.248.43:9559
      - --port=9669
      - --local_ip=192.168.248.43
      - --ws_ip=192.168.248.43
      - --ws_http_port=19669
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
      - --enable_authorize=true # 开启权限认证,使用用户密码登录
    volumes:
      - ./logs/graph:/logs
    depends_on:
      - storaged
    restart: unless-stopped

启动

$ docker-compose up -d

三、加入集群

1. 启动 nebula-console

$ docker run --rm -it vesoft/nebula-console:v3.5 \
  -u root -p nebula \
  -addr 192.168.248.41 -port 9669 \
  -e 'ADD HOSTS "192.168.248.41":9779, "192.168.248.42":9779, "192.168.248.43":9779'

2. 验证集群

首先进入集群

# 进入容器后执行操作
$ docker run --rm -it --entrypoint sh vesoft/nebula-console:v3.5
​
# 登录数据库,三台机器的 IP 地址任意都行
$ nebula-console -u root -p nebula --addr=192.168.248.41 --port=9669
​
# 或者直接连接数据库
$ docker run --rm -it vesoft/nebula-console:v3.5 \
  -u root -p nebula \
  --addr=192.168.248.41 --port=9669

# 查看当前集群节点信息
(root@nebula) [(none)]> SHOW HOSTS;
+------------------+------+----------+--------------+----------------------+------------------------+---------+
| Host             | Port | Status   | Leader count | Leader distribution  | Partition distribution | Version |
+------------------+------+----------+--------------+----------------------+------------------------+---------+
| "192.168.248.41" | 9779 | "ONLINE" | 0            | "No valid partition" | "No valid partition"   | "3.5.0" |
| "192.168.248.42" | 9779 | "ONLINE" | 0            | "No valid partition" | "No valid partition"   | "3.5.0" |
| "192.168.248.43" | 9779 | "ONLINE" | 0            | "No valid partition" | "No valid partition"   | "3.5.0" |
+------------------+------+----------+--------------+----------------------+------------------------+---------+
​
# 创建一个图空间(例如 3 副本、15 分区)
(root@nebula) [(none)]> CREATE SPACE myspace(partition_num=15, replica_factor=3, vid_type=INT64);
Execution succeeded (time spent 4.131ms/4.643147ms)
​
Sat, 17 May 2025 16:18:24 UTC
​
# 进入空间
(root@nebula) [(none)]> USE myspace;
Execution succeeded (time spent 1.253ms/1.880665ms)
​
Sat, 17 May 2025 16:18:35 UTC
​
# 查看当前集群节点信息
(root@nebula) [myspace]> SHOW HOSTS;
+------------------+------+----------+--------------+----------------------+------------------------+---------+
| Host             | Port | Status   | Leader count | Leader distribution  | Partition distribution | Version |
+------------------+------+----------+--------------+----------------------+------------------------+---------+
| "192.168.248.41" | 9779 | "ONLINE" | 0            | "No valid partition" | "myspace:15"           | "3.5.0" |
| "192.168.248.42" | 9779 | "ONLINE" | 8            | "myspace:8"          | "myspace:15"           | "3.5.0" |
| "192.168.248.43" | 9779 | "ONLINE" | 7            | "myspace:7"          | "myspace:15"           | "3.5.0" |
+------------------+------+----------+--------------+----------------------+------------------------+---------+
Got 3 rows (time spent 1.666ms/2.560771ms)
​
# 删除空间
(root@nebula) [myspace]> DROP SPACE myspace;
Execution succeeded (time spent 3.145ms/3.724806ms)
​
Sat, 17 May 2025 16:19:19 UTC
​
(root@nebula) [(none)]> SHOW HOSTS;
+------------------+------+----------+--------------+----------------------+------------------------+---------+
| Host             | Port | Status   | Leader count | Leader distribution  | Partition distribution | Version |
+------------------+------+----------+--------------+----------------------+------------------------+---------+
| "192.168.248.41" | 9779 | "ONLINE" | 0            | "No valid partition" | "No valid partition"   | "3.5.0" |
| "192.168.248.42" | 9779 | "ONLINE" | 0            | "No valid partition" | "No valid partition"   | "3.5.0" |
| "192.168.248.43" | 9779 | "ONLINE" | 0            | "No valid partition" | "No valid partition"   | "3.5.0" |
+------------------+------+----------+--------------+----------------------+------------------------+---------+
Got 3 rows (time spent 1.53ms/2.262823ms)
​
Sat, 17 May 2025 16:19:20 UTC
​
# 重置 root 账户密码
(root@nebula) [(none)]> ALTER USER root WITH PASSWORD 'nebula';
Execution succeeded (time spent 2.626ms/3.723652ms)
​
Sat, 17 May 2025 16:25:53 UTC

# 修改 root 账户密码
(root@nebula) [(none)]> CHANGE PASSWORD root FROM 'nebula' TO '123456';
Execution succeeded (time spent 2.626ms/3.723652ms)
​
Sat, 17 May 2025 16:25:53 UTC

License:  CC BY 4.0
Share

Further Reading

OLDER

常见数据库备份方案

NEWER

Linux 运维常用脚本和工具

Recently Updated

  • Kubernetes 安装部署 Alist 并配置 Onlyoffice
  • KubeSphere-04-Dev-ops 流水线插件的使用
  • KubeSphere-03-Logging 日志插件的使用
  • KubeSphere-02-Service Mesh 的使用
  • KubeSphere-01-介绍与基础使用

Trending Tags

KVM Service Mesh Docker shell 路由规则 Mysql Containerd GitOps 网络设备 Prometheus

Contents

©2025 甄天祥-Linux-个人小站. Some rights reserved.

Using the Halo theme Chirpy