docker 部署测试环境 graphd 启动不了

  • nebula 版本:2.0.0 rc

  • 部署方式 Docker

      services:
        metad0:
          image: vesoft/nebula-metad:v2-nightly
          environment:
            USER: root
            TZ:   "${TZ}"
          command:
            - --meta_server_addrs=metad0:9559
            - --local_ip=metad0
            - --ws_ip=metad0
            - --port=9559
            - --ws_http_port=19559
            - --data_path=/data/meta
            - --log_dir=/logs
            - --v=0
            - --minloglevel=0
          ports:
            - 9559
            - 19559
            - 19560
          volumes:
            - ./data/meta0:/data/meta
            - ./logs/meta0:/logs
          networks:
            - nebula-net
          restart: on-failure
          cap_add:
            - SYS_PTRACE
    
    
    storaged0:
      image: vesoft/nebula-storaged:v2-nightly
      environment:
        USER: root
        TZ:   "${TZ}"
      command:
        - --meta_server_addrs=metad0: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
    
    
    graphd:
      image: vesoft/nebula-graphd:v2-nightly
      environment:
        USER: root
        TZ:   "${TZ}"
      command:
        - --meta_server_addrs=metad0:9559
        - --port=9669
        - --ws_ip=graphd
        - --ws_http_port=19669
        - --log_dir=/logs
        - --v=0
        - --minloglevel=0
      depends_on:
        - metad0
        - metad1
        - metad2
      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
    

现在只部署了一个节点, metad 和 storaged 都跑起来了,但是 graphd 显示:

Failed to start web service: 99failed to bind to async server socket: 10.43.90.185:19669: Cannot assign requested address

已经查了端口,没有被占用。

首先这份配置文件的这里有问题:

  depends_on:
    - metad0
    - metad1
    - metad2

按道理,storage 和 graph 都起不来才合理,需要把上面的 metad1metad2 删除。

我没有配置这个 depends_on,它就起来了。

但是我现在有另一个问题,就是进到 nebula-console 里面不能使用 “CREATE SPACE test;" 语句,会报这个错:

这是我 Linux 内核版本:

看起来是 nebula-console 跟 nebula-graph 的版本没对应的问题,如果 nebula 的镜像用的 nightly,nebula-console 最好也用 nightly 的镜像或者使用最新的 master 分支的代码编译。

这两个都是用的 v2-nightly

那麻烦你验证一下,通过 nebula-console 连接 graphd 之后,创建 space 是否会导致 graphd 的容器重启?能否查看一下对应 graphd 的相关日志,看看是否有什么 Error 信息?

我现在感觉像是 meta0 里的19559 这个 IP 端口连不上

检查一下 19559 这个端口是否有被其他进程占用?

我换了一个端口号,现在的报错变成这个了:

这个应该是加载 job 数据时除了错,忽略这个错误的话,所有的服务都能正常启动了吗?再用 console 连接并创建 space 还会不会报错?

还是连不上,我觉得我可能是 IP 和端口写错了,我想问下 local ip 和 ws_ip 一般都写什么呀,要区分内网外网吗

local ip 写你的 service 的 name,比如 metad0, ws_ip 写 0.0.0.0

我改完之后现在是这个错:

[ERROR (-8)]: RPC failure in MetaClient: N6apache6thrift9transport19TTransportExceptionE: Channel is !good()

我用 telnet ping 了之后都可以连通。

能否执行下 docker-compose ps 看看是否所有的 nebula 的容器进程都正常?错误是 graphd 连不上 metad,需要确认所有的容器进程都是 healthy 的之后再尝试操作 console .

这个是 rancher 上显示的状态,都是 running 状态的。

那你用 ranker 部署 nebula 的时候,直接部署的 metad/storaged 为 POD 类型?不是以 statefulset 类似的对象部署的?

嗯嗯对的,是 pod, 需要改吗?

如果是 pod 的话,你需要将对应 metad0 的端口暴露出来,不然外面的 pod 是直接访问不了这个 pod 的呀。

当然暴露端口的方式可能有多种,比如 NodePort 或者其他支持 tcp 协议转发的组件都可以。如果有需要可以让 @kevin.qiao 来更详细的回答你。

这样暴露可以吗

然后我的 graphd 和 storaged 在写配置文件的时候,是不是应该用 metad0 对应的外网 IP + 暴露出来的端口号?那它们自己的 local ip 和 ws ip 还是写 graphd 和 0.0.0.0,port 还是不变吗?比如这样:

metad0: 
 image: vesoft/nebula-metad:v2-nightly 
 environment: 
 USER: root 
 TZ: "${TZ}" 
 command: 
 - --meta_server_addrs=外网IP:32716
 - --local_ip=外网IP
 - --ws_ip=0.0.0.0 
 - --port=32716
 - --ws_http_port=32717
 - --data_path=/data/meta 
 - --log_dir=/logs 
 - --v=0 
 - --minloglevel=0 
 healthcheck: 
 test: ["CMD", "curl", "-sf", "http://外网IP:32717/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 

storaged0: 
 image: vesoft/nebula-storaged:v2-nightly 
 environment: 
 USER: root 
 TZ: "${TZ}" 
 command: 
 - --meta_server_addrs=外网IP:32716
 - --local_ip=storaged
 - --ws_ip=0.0.0.0 
 - --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 

graphd: 
 image: vesoft/nebula-graphd:v2-nightly 
 environment: 
 USER: root 
 TZ: "${TZ}" 
 command: 
 - --meta_server_addrs=外网IP:32716
 - --port=9669 
 - --ws_ip=0.0.0.0
 - --ws_http_port=19669 
 - --log_dir=/logs 
 - --v=0 
 - --minloglevel=0 
 depends_on: 
 - metad0 
 - metad1 
 - metad2 
 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

嗯嗯,麻烦详细回答一下~我卡在这里很久了 :joy:~ 谢谢啦~~