图数据库 Nebula Graph 的安装部署
Nebula Graph:一个开源的分布式图数据库。作为唯一能够存储万亿个带属性的节点和边的在线图数据库,Nebula Graph 不仅能够在高并发场景下满足毫秒级的低时延查询要求,还能够实现服务高可用且保障数据安全性。
本文目录
- 简介
- Nebula 整体架构
- Meta Service
- Storage Service
- Graph Service
- 安装部署
- 单机运行
- 集群部署
- 环境准备
- 安装
- 配置
- 测试集群
简介
Nebula Graph 是开源的第三代分布式图数据库,不仅能够存储万亿个带属性的节点和边,而且还能在高并发场景下满足毫秒级的低时延查询要求。不同于 Gremlin 和 Cypher,Nebula 提供了一种 SQL-LIKE 的查询语言 nGQL,通过三种组合方式(管道、分号和变量)完成对图的 CRUD 的操作。在存储层 Nebula Graph 目前支持 RocksDB 和 HBase 两种方式。
感谢 Nebula Graph 社区 Committer 伊兴路供稿本文。
Nebula Graph整体架构

Nebula Graph 主要有三个服务进程:
Meta Service
Meta Service 是整个集群的元数据管理中心,采用 Raft 协议保证高可用。主要提供两个功能:
- 管理各种元信息,比如 Schema
- 指挥存储扩容和数据迁移
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_addrs 和 local_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:一个开源的分布式图数据库。
图数据库 Nebula Graph 的安装部署的更多相关文章
- 分布式图数据库 Nebula Graph 中的集群快照实践
1 概述 1.1 需求背景 图数据库 Nebula Graph 在生产环境中将拥有庞大的数据量和高频率的业务处理,在实际的运行中将不可避免的发生人为的.硬件或业务处理错误的问题,某些严重错误将导致集群 ...
- 分布式图数据库 Nebula Graph 的 Index 实践
导读 索引是数据库系统中不可或缺的一个功能,数据库索引好比是书的目录,能加快数据库的查询速度,其实质是数据库管理系统中一个排序的数据结构.不同的数据库系统有不同的排序结构,目前常见的索引实现类型如 B ...
- 图数据库 Nebula Graph TTL 特性
导读 身处在现在这个大数据时代,我们处理的数据量需以 TB.PB, 甚至 EB 来计算,怎么处理庞大的数据集是从事数据库领域人员的共同问题.解决这个问题的核心在于,数据库中存储的数据是否都是有效的.有 ...
- 初识分布式图数据库 Nebula Graph 2.0 Query Engine
摘要:本文主要介绍 Query 层的整体结构,并通过一条 nGQL 语句来介绍其通过 Query 层的四个主要模块的流程. 一.概述 分布式图数据库 Nebula Graph 2.0 版本相比 1.0 ...
- 图数据库 Nebula Graph 的数据模型和系统架构设计
Nebula Graph:一个开源的分布式图数据库.作为唯一能够存储万亿个带属性的节点和边的在线图数据库,Nebula Graph 不仅能够在高并发场景下满足毫秒级的低时延查询要求,而且能够提供极高的 ...
- 图数据库 Nebula Graph 是什么
图数据库(英语:Graph Database)是一个使用图结构进行语义查询的数据库.该系统的关键概念是图,形式上是点 (Node 或者 Vertex) 和边 (Edge 或者 Relationship ...
- GraphX 在图数据库 Nebula Graph 的图计算实践
不同来源的异构数据间存在着千丝万缕的关联,这种数据之间隐藏的关联关系和网络结构特性对于数据分析至关重要,图计算就是以图作为数据模型来表达问题并予以解决的过程. 一.背景 随着网络信息技术的飞速发展,数 ...
- 图数据库 Nebula Graph 在 Boss 直聘的应用
本文首发于 Nebula Graph 官方博客:https://nebula-graph.com.cn/posts/nebula-graph-risk-control-boss-zhipin/ 摘要: ...
- 使用图数据库 Nebula Graph 数据导入快速体验知识图谱 OwnThink
前言 本文由 Nebula Graph 实习生@王杰贡献. 最近 @Yener 开源了史上最大规模的中文知识图谱--OwnThink(链接:https://github.com/ownthink/Kn ...
随机推荐
- 2.java三大特性
1. 封装 方法:将属性值修饰为私有,提供get和set方法.造成所有对对象的访问都是通过方法的调用来完成(配合this的使用) 结果:用户不能直接随意改变一个对象内的属性,必须通过调用方法(验证)来 ...
- java设计模式(一)动态代理模式,JDK与CGLIB分析
-本想着这个知识点放到Spring Aop说说可能更合适一点,但因为上一篇有所提到就简单分析下,不足之处请多多评论留言,相互学习,有所提高才是关键! 什么是代理模式: 记得有本24种设计模式的书讲到代 ...
- 使用SQL语句修改Mysql数据库字符集的方法
使用SQL语句修改Mysql数据库字符集的方法 修改库: alter database [$database] character set [$character_set] collate [$c ...
- [ASP.NET Core 3框架揭秘] 配置[6]:多样化的配置源[上篇]
.NET Core采用的这个全新的配置模型的一个主要的特点就是对多种不同配置源的支持.我们可以将内存变量.命令行参数.环境变量和物理文件作为原始配置数据的来源.如果采用物理文件作为配置源,我们可以选择 ...
- shell概述与echo命令
一.Shell概述 1.什么是shell? 由此可见shell是用户与系统进行交互的接口,通过执行各种命令来完成时间处理与调度. 2.shell分类 Shell类别 易学性 可移植性 编辑性 快捷性 ...
- 用js写一个鼠标坐标实例
HTML代码 写一个div来作为鼠标区域 div中写一个span显示坐标信息 <body> <div id=""> <span></spa ...
- 【原】MAC安装Flutter
系统环境要求 Flutter因为是新出的框架,所以对系统还是有一定的要求的. MacOS(64-bit) 磁盘空间:大于700M,如果算上Android Studio等编辑工具,尽量大于3G. 命令号 ...
- 蒟蒻的PKUWC2019划水记(更新ing)
前言 (结束再补) \(Dec\ 20th\) 正式出发 今天,是正式出发的日子. 虽说是星期五,可并没有去学校晨跑.难得睡到了\(7\)点,起来匆匆吃完了早饭(一个手抓饼),就出发去火车站了. 到了 ...
- Spring Cloud Finchley.SR1 版本的坑:placeholer占位符无法解析!
接入nacos 之后,想把所有的配置丢上去. 启动程序是: @EnableDiscoveryClient @RestController @ComponentScan(basePackages = { ...
- Your activation code could not be validated (error 1653219)
很多小伙伴私聊我反应说,完全按照了你的 idea 激活教程走的,可最后还是没能激活成功,提示错误信息为: Your activation code could not be validated (er ...