You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨数据中心Docker部署NebulaGraph遇目录不存在错误,求部署方案

跨多服务器分布式部署NebulaGraph解决方案

一、先解决当前目录缺失错误

你遇到的Failed to read the directory "/data/meta/nebula"错误,是因为本地挂载的目录未提前创建,容器无法自动生成多级目录结构。在要运行服务的服务器上执行以下命令创建所需目录:

mkdir -p ./data/meta ./logs/meta ./data/storage ./logs/storage ./logs/graph

二、跨三台服务器分布式部署步骤

前提准备

  • 三台服务器开放以下端口,确保彼此能通过公网IP通信:
    • metad:9559(服务端口)、19559(HTTP端口)、19560(备用端口)
    • storaged:9779(服务端口)、19779(HTTP端口)、19780(备用端口)
    • graphd:9669(服务端口)、19669(HTTP端口)、19670(备用端口)
  • 每台服务器安装Docker和Docker Compose
  • 每台服务器创建.env文件(修正原TZ=UTS为TZ=UTC):
    TZ=UTC
    USER=root
    PASSWORD=passroot
    SERVER1=154.13.92.23
    SERVER2=154.13.92.24
    SERVER3=154.13.92.25
    

服务器1(SERVER1=154.13.92.23):部署metad + graphd

创建docker-compose.yml:

version: '3.9'
services:
  metad:
    image: vesoft/nebula-metad:v3.5.0
    environment:
      USER: "${USER}"
      PASSWORD: "${PASSWORD}"
      TZ: "${TZ}"
    command:
      - --meta_server_addrs=${SERVER1}:9559,${SERVER2}:9559,${SERVER3}:9559
      - --local_ip=${SERVER1}
      - --ws_ip=${SERVER1}
      - --port=9559
      - --ws_http_port=19559
      - --data_path=/data/meta
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    ports:
      - 0.0.0.0:9559:9559
      - 0.0.0.0:19559:19559
      - 0.0.0.0:19560:19560
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://${SERVER1}:19559/status"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s
    volumes:
      - ./data/meta:/data/meta
      - ./logs/meta:/logs
    restart: unless-stopped

  graphd:
    image: vesoft/nebula-graphd:v3.5.0
    environment:
      USER: "${USER}"
      PASSWORD: "${PASSWORD}"
      TZ: "${TZ}"
    command:
      - --meta_server_addrs=${SERVER1}:9559,${SERVER2}:9559,${SERVER3}:9559
      - --port=9669
      - --local_ip=${SERVER1}
      - --ws_ip=${SERVER1}
      - --ws_http_port=19669
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
      - --enable_authorize=true
    ports:
      - 0.0.0.0:9669:9669
      - 0.0.0.0:19669:19669
      - 0.0.0.0:19670:19670
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://${SERVER1}:19669/status"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s
    volumes:
      - ./logs/graph:/logs
    restart: unless-stopped

networks:
  default:
    name: nebula-net
    external: true

执行以下命令启动服务:

mkdir -p ./data/meta ./logs/meta ./logs/graph
docker-compose up -d

服务器2(SERVER2=154.13.92.24):部署metad + storaged

创建docker-compose.yml:

version: '3.9'
services:
  metad:
    image: vesoft/nebula-metad:v3.5.0
    environment:
      USER: "${USER}"
      PASSWORD: "${PASSWORD}"
      TZ: "${TZ}"
    command:
      - --meta_server_addrs=${SERVER1}:9559,${SERVER2}:9559,${SERVER3}:9559
      - --local_ip=${SERVER2}
      - --ws_ip=${SERVER2}
      - --port=9559
      - --ws_http_port=19559
      - --data_path=/data/meta
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    ports:
      - 0.0.0.0:9559:9559
      - 0.0.0.0:19559:19559
      - 0.0.0.0:19560:19560
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://${SERVER2}:19559/status"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s
    volumes:
      - ./data/meta:/data/meta
      - ./logs/meta:/logs
    restart: unless-stopped

  storaged:
    image: vesoft/nebula-storaged:v3.5.0
    environment:
      USER: "${USER}"
      PASSWORD: "${PASSWORD}"
      TZ: "${TZ}"
    command:
      - --meta_server_addrs=${SERVER1}:9559,${SERVER2}:9559,${SERVER3}:9559
      - --local_ip=${SERVER2}
      - --ws_ip=${SERVER2}
      - --port=9779
      - --ws_http_port=19779
      - --data_path=/data/storage
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    ports:
      - 0.0.0.0:9779:9779
      - 0.0.0.0:19779:19779
      - 0.0.0.0:19780:19780
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://${SERVER2}:19779/status"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s
    volumes:
      - ./data/storage:/data/storage
      - ./logs/storage:/logs
    restart: unless-stopped

networks:
  default:
    name: nebula-net
    external: true

执行以下命令启动服务:

mkdir -p ./data/meta ./logs/meta ./data/storage ./logs/storage
docker-compose up -d

服务器3(SERVER3=154.13.92.25):部署metad + storaged

创建docker-compose.yml:

version: '3.9'
services:
  metad:
    image: vesoft/nebula-metad:v3.5.0
    environment:
      USER: "${USER}"
      PASSWORD: "${PASSWORD}"
      TZ: "${TZ}"
    command:
      - --meta_server_addrs=${SERVER1}:9559,${SERVER2}:9559,${SERVER3}:9559
      - --local_ip=${SERVER3}
      - --ws_ip=${SERVER3}
      - --port=9559
      - --ws_http_port=19559
      - --data_path=/data/meta
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    ports:
      - 0.0.0.0:9559:9559
      - 0.0.0.0:19559:19559
      - 0.0.0.0:19560:19560
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://${SERVER3}:19559/status"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s
    volumes:
      - ./data/meta:/data/meta
      - ./logs/meta:/logs
    restart: unless-stopped

  storaged:
    image: vesoft/nebula-storaged:v3.5.0
    environment:
      USER: "${USER}"
      PASSWORD: "${PASSWORD}"
      TZ: "${TZ}"
    command:
      - --meta_server_addrs=${SERVER1}:9559,${SERVER2}:9559,${SERVER3}:9559
      - --local_ip=${SERVER3}
      - --ws_ip=${SERVER3}
      - --port=9779
      - --ws_http_port=19779
      - --data_path=/data/storage
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    ports:
      - 0.0.0.0:9779:9779
      - 0.0.0.0:19779:19779
      - 0.0.0.0:19780:19780
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://${SERVER3}:19779/status"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s
    volumes:
      - ./data/storage:/data/storage
      - ./logs/storage:/logs
    restart: unless-stopped

networks:
  default:
    name: nebula-net
    external: true

执行以下命令启动服务:

mkdir -p ./data/meta ./logs/meta ./data/storage ./logs/storage
docker-compose up -d

三、关键配置修正说明

  1. 地址格式修正:原配置中--meta_server_addrs里的多余引号会导致地址解析错误,需删除引号直接使用${SERVER1}:9559格式。
  2. IP配置修正:跨服务器部署时,local_ip和ws_ip必须使用服务器公网IP,不能用容器名,否则其他节点无法访问。
  3. 角色分配:NebulaGraph要求至少3个metad节点保证高可用,storaged节点建议为奇数,graphd可按需部署在任意节点。

四、验证部署成功

登录graphd所在服务器(如SERVER1),用nebula-console连接集群:

docker run --rm -it vesoft/nebula-console:v3.5.0 -addr 154.13.92.23 -port 9669 -u root -p passroot

执行以下命令查看集群状态:

SHOW HOSTS;
SHOW HOSTS STORAGE;

若能看到所有metad和storaged节点状态正常,则部署成功。

内容的提问来源于stack exchange,提问作者Pamungkas Jayuda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 10:04:58