nebula2-python中如何使用nebula-python中的获取全部点和边的方法scan_vertex,scan_edge

好像就是端口搞错了,那请问一下,我创建meta client的时候应该指定哪个端口:

我的docker的启动是按照上面的compose来的。

45500

:eyes: docker 启动的应该还会有连不上的情况(网络不通),等你的下一个回复

首先你的docker-compose文件需要更新下image的名字,现在改为v2-nightly,你要用最新的版本,不然接口不对应的,metad的没有映射端口出来,你需要用它动态的端口。首先你需要确定你运行的服务能不能访问你docker的网络,不能的话,你需要把docker网络模式配置成host模式,不然你需要去容器里面运行程序才能正常运行

:expressionless:就是丁丁大佬说的这个了,期待能从nebula方面能解决这个

@jude-zhu 再次艾特jude

你可以看着这帖子

我看了一下netstat的端口状态,宿主机当前是35931和35932这两个端口,而不是45500和45501。
所以我试了一下,meta_client连45500是连不上的;
连35931和35932可以连上,但是执行scan的时候报错了:
nebula2\mclient_init_.py", line 321, in get_part_leaders
raise SpaceNotFoundException(space_name)
nebula2.Exception.SpaceNotFoundException:

感觉是连接没有获取到nebula的元信息数据。

mac上不通的话,用这个解决 @zealot-shin

你确认下你scan的space name是否存在,这里告诉你scan的space不存在

存在的。

我运行代码是在windows环境下的pycharm里面跑的。
nebula是部署在另一个服务器,用docker启动的。
我是不是可以先telnet一下nebula服务器的meta 、storage的ip和44500、45500端口?

1 个赞

你有打印“Update meta data failed”吗?连不上是会抛异常的,你都没有抛异常,说明是正常连上的

打印了:
Update meta data failed: TSocket read 0 bytes
[2020-12-29 17:35:11,347]:Traceback (most recent call last):
File “venv\lib\site-packages\nebula2_python-2.0.0.post1-py3.8.egg\nebula2\mclient_init_.py”, line 191, in _load_all
spaces = self._meta_client.list_spaces()

你看下服务端有没有异常,这个看着是连上了,但是后面请求后,服务挂掉了?

@dingding @zealot-shin 1.x版本打断点调试会发现从meta节点获取到的storage节点的ip为172.x.x.x,而执行scan脚本的这台机器访问不通172.x.x.x ,调试信息会发现有timeout error

这个是正常的现象,1.0 docker用的是内部的子网,外部访问不了,2.0用的还是还是内部域名,更加不能直接访问。所以你们要用docker-compose启动的服务做scan 操作,要么网络改成host模式,要么自己起个容器运行。

1 个赞

我这边自己尝试了一些连接,作出了一个猜测,麻烦各位大佬看下是不是这样:
我用windows环境的pycharm运行scan的代码,meta client连接时,指定的ip和端口分别为宿主机的ip和启动docker的metad的宿主机端口(上面docker图片中35931)
(windows上使用telnet可以正常访问宿主机的ip和端口,但是无法访问docker中nebula指定的172.28.x.x的ip和端口。)
此时连接metad可以正常连接,但是通过metad得知storage的ip和端口是172.28.2.2 和44500,所以无法正常连接到storaged,之后获取nebula中的listspace以及查询具体的space时,都是空的。

所以,如果我能让windows环境可以连接docker启动的172.28.1.1以及172.28.2.2以及各自的端口,应该就可以正常运行scan的代码了。

是不是这样呢?

1 个赞

可以这样

:confused: 我的看法这个是不正常的,目的只想在其他机器访问docker部署的nebula scan接口,既然端口映射出来了,通过宿主机ip+端口就应该能访问才是。艾特一下大佬 @min.wu @dingding

不过目前来看,想要让外部网络访问容器启动的nebula的ip和端口,只有使用host模式来启动容器才可以做到吧。

我现在启动的nebula容器其实已经做了宿主机的端口映射了,但是由于我刚才提到的从metad获取的storaged总是容器内部的ip和端口,所以即使连接metad通过映射的宿主机ip和端口能够成功,之后的连接storaged是一定会失败的。。

看来,目前的解决办法是只有改成host模式了。

不知道我的理解对不对。

bingo