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整体架构

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
(user@127.0.0.1) [(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
(user@192.168.8.14) [(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

图数据库 Nebula Graph 的安装部署的更多相关文章

  1. 分布式图数据库 Nebula Graph 中的集群快照实践

    1 概述 1.1 需求背景 图数据库 Nebula Graph 在生产环境中将拥有庞大的数据量和高频率的业务处理,在实际的运行中将不可避免的发生人为的.硬件或业务处理错误的问题,某些严重错误将导致集群 ...

  2. 分布式图数据库 Nebula Graph 的 Index 实践

    导读 索引是数据库系统中不可或缺的一个功能,数据库索引好比是书的目录,能加快数据库的查询速度,其实质是数据库管理系统中一个排序的数据结构.不同的数据库系统有不同的排序结构,目前常见的索引实现类型如 B ...

  3. 图数据库 Nebula Graph TTL 特性

    导读 身处在现在这个大数据时代,我们处理的数据量需以 TB.PB, 甚至 EB 来计算,怎么处理庞大的数据集是从事数据库领域人员的共同问题.解决这个问题的核心在于,数据库中存储的数据是否都是有效的.有 ...

  4. 初识分布式图数据库 Nebula Graph 2.0 Query Engine

    摘要:本文主要介绍 Query 层的整体结构,并通过一条 nGQL 语句来介绍其通过 Query 层的四个主要模块的流程. 一.概述 分布式图数据库 Nebula Graph 2.0 版本相比 1.0 ...

  5. 图数据库 Nebula Graph 的数据模型和系统架构设计

    Nebula Graph:一个开源的分布式图数据库.作为唯一能够存储万亿个带属性的节点和边的在线图数据库,Nebula Graph 不仅能够在高并发场景下满足毫秒级的低时延查询要求,而且能够提供极高的 ...

  6. 图数据库 Nebula Graph 是什么

    图数据库(英语:Graph Database)是一个使用图结构进行语义查询的数据库.该系统的关键概念是图,形式上是点 (Node 或者 Vertex) 和边 (Edge 或者 Relationship ...

  7. GraphX 在图数据库 Nebula Graph 的图计算实践

    不同来源的异构数据间存在着千丝万缕的关联,这种数据之间隐藏的关联关系和网络结构特性对于数据分析至关重要,图计算就是以图作为数据模型来表达问题并予以解决的过程. 一.背景 随着网络信息技术的飞速发展,数 ...

  8. 图数据库 Nebula Graph 在 Boss 直聘的应用

    本文首发于 Nebula Graph 官方博客:https://nebula-graph.com.cn/posts/nebula-graph-risk-control-boss-zhipin/ 摘要: ...

  9. 使用图数据库 Nebula Graph 数据导入快速体验知识图谱 OwnThink

    前言 本文由 Nebula Graph 实习生@王杰贡献. 最近 @Yener 开源了史上最大规模的中文知识图谱--OwnThink(链接:https://github.com/ownthink/Kn ...

随机推荐

  1. Unity5优秀插件分享

    转载请标明原文地址:http://www.cnblogs.com/zhangyukof/p/6836001.html  天空盒:1.SkyboxesUnity4中自带的天空盒,经常用到.不知道为什么U ...

  2. 语句知识总结(js)

    函数声明语句和函数定义表达式有什么不同 首先看一下函数声明语句和函数定义表达式的例子,表达式会返回一个值,而语句就是js中的一整句,下面例子中第6行是函数声明语句,第10行是函数定义表达式. f(); ...

  3. SAP Business One对象清单

    中文描述 对象号 表名 主键 英文描述 总账科目 1 OACT AcctCode G/L Accounts 业务伙伴 2 OCRD CardCode Business Partner 银行代码 3 O ...

  4. CRM、ERP是什么?

    CRM 全称 Customer Relationship Management,中文意思是客户关系管理. 为什么会有CRM? 因为我们进入到了产能过剩时代,从卖方市场过渡到买方市场,为了将产品卖出去, ...

  5. 安卓JNI精细化讲解,让你彻底了解JNI(二):用法解析

    目录 用法解析 ├── 1.JNI函数 │ ├── 1.1.extern "C" │ ├── 1.2.JNIEXPORT.JNICALL │ ├── 1.3.函数名 │ ├── 1 ...

  6. 知识图谱基础之RDF,RDFS与OWL

    https://blog.csdn.net/u011801161/article/details/78833958 https://blog.csdn.net/baidu_15113429/artic ...

  7. 好用的Markdown编辑器安利-Typora

    Typora,一款还用极简优秀的免费开源Markdown编辑器,非常值得每一位爱好Markdown的朋友学习和使用.我个人是深深被它吸引了,不论是写博客还是记笔记,Typora都是我十足的好帮手.Ty ...

  8. 文件系统之parted 分区

    parted分区命令 1.分区表区别 我们 Linux 系统中有两种常见的分区表 MBR 分区表(主引导记录分区表)和 GPT 分区表(GUID 分 区表) MBR 分区表:支持的最大分区是 2TB( ...

  9. SpringBoot源码篇:Spring5内置tomcat实现code-based的web.xml实现

    一.简介 上篇文章讲了SpingBoot诞生的历史背景和技术演进背景,并通过源码说明了SpringBoot是如何实现零配置的包括如何省去web.xml配置的原理.本文接上一篇文章,通过demo演示Sp ...

  10. SpringMVC的工作流程?Mybatis和hibernate区别?

    SpringMVC的工作流程?1. 用户发送请求至前端控制器DispatcherServlet2. DispatcherServlet收到请求调用HandlerMapping处理器映射器.3. 处理器 ...