图数据库 Nebula Graph 的部署安装 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Evaz0716
V2EX    开源软件

图数据库 Nebula Graph 的部署安装

  •  
  •   Evaz0716 2019-08-29 20:36:18 +08:00 3956 次点击
    这是一个创建于 2285 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Nebula Graph:一个开源的分布式图数据库。作为唯一能够存储万亿个带属性的节点和边的在线图数据库,Nebula Graph 不仅能够在高并发场景下满足毫秒级的低时延查询要求,还能够实现服务高可用且保障数据安全性。

    文目录

    1. 简介
    2. Nebula 整体架构
      1. Meta Service
      2. Storage Service
      3. Graph Service
    3. 安装部署
      1. 单机运行
      2. 集群部署
        1. 环境准备
        2. 安装
        3. 配置
      3. 测试集群

    简介

    Nebula Graph 是开源的第三代分布式图数据库,不仅能够存储万亿个带属性的节点和边,而且还能在高并发场景下满足毫秒级的低时延查询要求。不同于 Gremlin 和 Cypher,Nebula 提供了一种 SQL-LIKE 的查询语言 nGQL,通过三种组合方式(管道分号变量)完成对图的 CRUD 的操作。在存储层 Nebula Graph 目前支持 RocksDBHBase 两种方式。

    感谢 Nebula Graph 社区 Committer 伊兴路供稿本文。

    Nebula Graph 整体架构

    img

    Nebula Graph 主要有三个服务进程:

    Meta Service

    Meta Service 是整个集群的元数据管理中心,采用 Raft 协议保证高可用。主要提供两个功能:

    1. 管理各种元信息,比如 Schema
    2. 指挥存储扩容和数据迁移

    Storage Service

    Storage Service 负责 Graph 数据存储。图数据被切分成很多的分片 Partition,相同 ID 的 Partition 组成一个 Raft Group,实现多副本一致性。Nebula Graph 默认的存储引擎是 RocksDB 的 Key-Value 存储。

    Graph Service

    Graph Service 位于架构中的计算层,负责同 Console 等 Client 通信,解析 nGQL 的请求并生成执行计划。执行计划经过优化器优化之后,交与执行引擎执行。执行引擎会向 MetaService 请求点边的 Schema 和向存储引擎获取点边的数据。

    GraphService 是个无状态的服务,可以无限的水平拓展,并且计算层的执行计划最终会下发到数据节点执行。

    安装部署

    Nebula Graph 提供两种部署方式:单机集群单机部署主要用于测试和体验使用,生产场景推荐集群方式

    单机运行

    在单机上实践或者测试 Nebula Graph 的最好方式是通过 Docker 容器运行,参照文档拉取镜像,并进入容器:

     $ docker pull vesoft/nebula-graph:latest $ docker run --rm -ti vesoft/nebula-graph:latest bash 

    进入容器之后首先启动 Nebula 的所有 Services,再通过 Console 客户端连接本容器内部的 graphd 服务来执行 nGQL 语句

     $ cd /usr/local/nebula $ ./scripts/nebula.service start all $ ./bin/nebula -u user -p password ([email protected]) [(none)]> SHOW HOSTS; =============================== | Ip | Port | Status | =============================== | 172.17.0.2 | 44500 | online | ------------------------------- Got 1 rows (Time spent: 15621/16775 us) 

    集群部署

    环境准备

    Nebula 支持编译安装和通过打包好的 Package 安装。由于 Nebula 依赖较多,简便起见推荐使用安装包安装

    本文准备了 3 台装有 CentOS 7.5 系统的机器,IP 如下所示:

     192.168.8.14 # cluster-14 192.168.8.15 # cluster-15 192.168.8.16 # cluster-16 

    在每台机器上下载对应的安装包

     $ wget -O nebula-1.0.0-beta.el7-5.x86_64.rpm https://github.com/vesoft-inc/nebula/releases/download/v1.0.0-beta/nebula-1.0.0-beta.el7-5.x86_64.rpm 

    此外由于 Nebula 的服务之间通信需要开放一些端口,所以可以临时关掉所有机器上的防火墙: (具体使用端口见 /usr/local/nebula/etc/ 下面的配置文件)

     $ systemctl disable firewalld 

    本文将按如下的方式部署 Nebula 的集群:

     - cluster-14: metad/storaged/graphd - cluster-15: metad/storaged - cluster-16: metad/storaged 
    安装

    使用 rpm 安装上步准备好的安装包

     $ rpm -ivh nebula-*.rpm 

    Nebula 默认的安装目录位于 /usr/local/nebula

    配置

    Nebula 的所有配置文件都位于 /usr/local/nebula/etc 目录下,并且提供了三份默认配置。分别编辑这些配置文件:

    第一份配置文件:nebula-metad.conf

    metad 通过 raft 协议保证高可用,需要为每个 metad 的 service 都配置该服务部署的机器 ip 和端口。主要涉及 meta_server_addrslocal_ip 两个字段,其他使用默认配置。 cluster-14 上的两项配置示例如下所示:

     # Peers --meta_server_addrs=192.168.8.14:45500,192.168.8.15:45500,192.168.8.16:45500 # Local ip --local_ip=192.168.8.14 # Meta daemon listening port --port=45500 

    第二份配置文件:nebula-graphd.conf

    graphd 运行时需要从 metad 中获取 schema 数据,所以在配置中必须显示指定集群中 metad 的 ip 地址和端口选项 meta_server_addrs ,其他使用默认配置。 cluster-14 上的 graphd 配置如下:

     # Meta Server Address --meta_server_addrs=192.168.8.14:45500,192.168.8.15:45500,192.168.8.16:45500 

    第三份配置文件:nebula-storaged.conf

    storaged 也是使用的 raft 协议保证高可用,在数据迁移时会与 metad 通信,所以需要配置 metad 的地址和端口 meta_server_addrs 和本机地址 local_ip ,其 peers 可以通过 metad 获得。 cluster-14 上的部分配置选项如下:

     # Meta server address --meta_server_addrs=192.168.8.14:45500,192.168.8.15:45500,192.168.8.16:45500 # Local ip --local_ip=192.168.8.14 # Storage daemon listening port --port=44500 
    启动集群

    cluster-14

     $ /usr/local/nebula/scripts/nebula.service start all [INFO] Starting nebula-metad... [INFO] Done [INFO] Starting nebula-graphd... [INFO] Done [INFO] Starting nebula-storaged... [INFO] Done 

    cluster-15/cluster-16

     $ /usr/local/nebula/scripts/nebula.service start metad [INFO] Starting nebula-metad... [INFO] Done $ /usr/local/nebula/scripts/nebula.service start storaged [INFO] Starting nebula-storaged... [INFO] Done 

    注:部分用户可能会遇到

     [WARN] The maximum files allowed to open might be too few: 1024 

    可以自己修改 /etc/security/limits.conf

    测试集群

    登陆集群中的一台,执行如下命令:

     $ /usr/local/nebula/bin/nebula -u user -p password --addr 192.168.8.14 --port 3699 ([email protected]) [(none)]> SHOW HOSTS; ================================== | Ip | Port | Status | ================================== | 192.168.8.14 | 44500 | offline | ---------------------------------- Got 1 rows (Time spent: 3511/4024 us) 

    附录

    Nebula Graph:一个开源的分布式图数据库。

    GitHub:https://github.com/vesoft-inc/nebula

    知乎: https://www.zhihu.com/org/nebulagraph/posts

    微博: https://weibo.com/nebulagraph

    2 条回复    2019-08-30 13:36:24 +08:00
    lazyyz
        1
    lazyyz  
       2019-08-29 21:26:57 +08:00 via Android
    请问这个与 neo4j 的区别和优势是什么?
    Evaz0716
        2
    Evaz0716  
    OP
       2019-08-30 13:36:24 +08:00   1
    @lazyyz 区别:
    1. 两者的查询语言类似但不一样;
    2. Neo4j 开源是个单机版,分布式架构也是把图结构放在单机上。Nebula 选择把所有的点和边都打散,做成完全的分布式。因此对于 scale out 的能力不一样;
    3. 不同的开发语言( Neo4j 用的 Java,Nebula 用的 C++);
    4. Neo4j 发布时间更久,功能相对完备。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3202 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 11:35 PVG 19:35 LAX 03:35 JFK 06:35
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86