赞
踩
目录
NebulaGraph是一款优秀的国产开源的分布式图数据库, 支持千亿点和万亿边规模海量存储,查询可以做到毫秒级延迟性能优异。NebulaGraph是一个典型的图数据库,可以高效存储点、边及两者属性,适用的场景包括欺诈监测、实时推荐、知识图谱、社交网络等。其特点和优势如下:
NebulaGraph官网链接:NebulaGraph
NebulaGraph是存算分离的架构,包括三种服务:Graph服务、Meta服务和Storage服务,架构图如下:
Graphd服务由nebula-graphd进程提供,负责处理客户端查询请求,分为解析查询nGQL语句、校验nGQL语句、生成执行计划和根据执行计划进行执行四个步骤,查询引擎处理流程如下:
Graph服务收到查询请求后,按照如下模块依次处理:
Parser:词法语法解析模块。
Validator:语义校验模块。
Planner:执行计划与优化器模块。
Executor:执行引擎模块。
Meta服务由nebula-metad进程提供,负责管理用户账号和权限、管理分片位置、图空间、Schema和TTL等信息。Meta集群基于Raft共识算法保证数据的一致性,Raft是强领导算法,任何时间点都只有一个leader,当leader宕机或发生网络分区时会进行leader选举,新leader由所有follower多数派投票决定。所以,Meta集群中只有一个进程是leader,其余都是follower,也只有leader能够对客户端提供读写服务,follower用于复制leader wal日志和选举新leader,Meta服务架构如下:
Storage服务由nebula-storaged进程提供,负责存储数据,支持高可用和水平扩展。Storage集群基于Raft协议,分为Storage interface层,Consensus层和Store Engine层,其技术架构如下:
最底层存储引擎是单机版自研KVStore,默认使用RocksDB作为本地存储,支持多个图空间物理隔离。
为了防止数据迁移影响线上业务只支持手动负载均衡。
图存储的主要数据是点和边,KVStore是把点和边的信息作为key,点和边的属性信息存成value,属性可作为高效过滤条件。
3.x版本比2.x版本多了一个不含TagID和value的key。
各个字段说明如下:
字段 | 说明 |
---|---|
Type | key 类型。长度为 1 字节。 |
PartID | 数据分片编号。长度为 3 字节。此字段主要用于 Storage 负载均衡(balance)时方便根据前缀扫描整个分片的数据。 |
VertexID | 点 ID。当点 ID 类型为 int 时,长度为 8 字节;当点 ID 类型为 string 时,长度为创建图空间时指定的fixed_string长度。 |
TagID | 点关联的 Tag ID。长度为 4 字节。 |
SerializedValue | 序列化的 value,用于保存点的属性信息。 |
各个字段说明如下:
字段 | 说明 |
---|---|
Type | key 类型。长度为 1 字节。 |
PartID | 数据分片编号。长度为 3 字节。此字段主要用于 Storage 负载均衡(balance)时方便根据前缀扫描整个分片的数据。 |
VertexID | 点 ID。前一个VertexID在出边里表示起始点 ID,在入边里表示目的点 ID;后一个VertexID出边里表示目的点 ID,在入边里表示起始点 ID。 |
Edge type | 边的类型。大于 0 表示出边,小于 0 表示入边。长度为 4 字节。 |
Rank | 用来处理两点之间有多个同类型边的情况。用户可以根据自己的需求进行设置,例如存放交易时间、交易流水号等。长度为 8 字节。 |
PlaceHolder | 预留字段。长度为 1 字节。 |
SerializedValue | 序列化的 value,用于保存点的属性信息。 |
在测试环境进行单机安装部署,使用root用户登录,部署1个metad进程,1个storaged进程和1个graphd进程。
类型 | 要求 |
---|---|
内核版本 | 3.9+ |
CPU架构 | x86_64 |
CPU核数 | 4 |
内存 | 8GB |
硬盘 | 10GB,SSD |
下载最新3.6.0 release版本,选Centos7对应版本
- wget https://oss-cdn.nebula-graph.com.cn/package/3.6.0/nebula-graph-3.6.0.el7.x86_64.rpm
- wget https://oss-cdn.nebula-graph.com.cn/package/3.6.0/nebula-graph-3.6.0.el7.x86_64.rpm.sha256sum.txt
执行安装命令
- [root@node3 apps]# rpm -ivh nebula-graph-3.6.0.el7.x86_64.rpm
- Preparing... ################################# [100%]
- Updating / installing...
- 1:nebula-graph-3.6.0-1 ################################# [100%]
默认安装位置为/usr/local/nebula
- [root@node3 apps]# ll /usr/local/nebula
- total 16
- drwxr-xr-x 2 root root 106 Aug 24 17:34 bin
- -rw-r--r-- 1 root root 8 Aug 24 18:36 cluster.id
- drwxr-xr-x 4 root root 33 Aug 24 18:36 data
- drwxr-xr-x 2 root root 4096 Aug 24 18:34 etc
- drwxr-xr-x 2 root root 4096 Aug 24 18:36 logs
- drwxr-xr-x 2 root root 82 Aug 24 17:36 pids
- drwxr-xr-x 2 root root 202 Aug 24 17:34 scripts
- drwxr-xr-x 3 root root 23 Aug 24 17:34 share
默认所有配置文件位于/usr/local/nebula/etc,nebula-graphd.conf,nebula-metad.conf和nebula-storaged.conf为启动默认加载的配置文件。
- [root@node3 apps]# ll /usr/local/nebula/etc
- total 64
- -rw-r--r-- 1 root root 5077 Aug 24 17:34 nebula-graphd.conf
- -r--r--r-- 1 root root 5077 Jul 20 11:23 nebula-graphd.conf.default
- -r--r--r-- 1 root root 4855 Jul 20 11:23 nebula-graphd.conf.production
- -rw-r--r-- 1 root root 1973 Aug 24 17:34 nebula-metad.conf
- -r--r--r-- 1 root root 1973 Jul 20 11:23 nebula-metad.conf.default
- -r--r--r-- 1 root root 1976 Jul 20 11:23 nebula-metad.conf.production
- -rw-r--r-- 1 root root 5965 Aug 24 17:34 nebula-storaged.conf
- -r--r--r-- 1 root root 5965 Jul 20 11:23 nebula-storaged.conf.default
- -r--r--r-- 1 root root 6240 Jul 20 11:23 nebula-storaged.conf.production
- -r--r--r-- 1 root root 2096 Jul 20 11:23 nebula-storaged-listener.conf.production
NebulaGraph使用nebula.service
启动服务,执行后依次启动metad服务,graphd服务和storaged服务。
- [root@node3 apps]# /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
默认所有日志文件位于/usr/local/nebula/logs,如果启动异常可查看相应error日志。
- [root@node3 apps]# ll /usr/local/nebula/logs/
- total 200
- -rw-r--r-- 1 root root 0 Aug 24 17:36 graphd-stderr.log
- -rw-r--r-- 1 root root 0 Aug 24 17:36 graphd-stdout.log
- -rw-r--r-- 1 root root 0 Aug 24 17:36 metad-stderr.log
- -rw-r--r-- 1 root root 0 Aug 24 17:36 metad-stdout.log
- lrwxrwxrwx 1 root root 54 Aug 24 17:36 nebula-graphd.INFO -> nebula-graphd.node3.root.log.INFO.20230824-173614.1660
- -rw-r--r-- 1 root root 1206 Aug 24 17:36 nebula-graphd.node3.root.log.INFO.20230824-173614.1660
- lrwxrwxrwx 1 root root 54 Aug 24 17:36 nebula-metad.ERROR -> nebula-metad.node3.root.log.ERROR.20230824-173614.1591
- lrwxrwxrwx 1 root root 53 Aug 24 17:36 nebula-metad.INFO -> nebula-metad.node3.root.log.INFO.20230824-173614.1591
- -rw-r--r-- 1 root root 323 Aug 24 17:36 nebula-metad.node3.root.log.ERROR.20230824-173614.1591
- -rw-r--r-- 1 root root 81570 Aug 24 17:54 nebula-metad.node3.root.log.INFO.20230824-173614.1591
- -rw-r--r-- 1 root root 323 Aug 24 17:36 nebula-metad.node3.root.log.WARNING.20230824-173614.1591
- lrwxrwxrwx 1 root root 56 Aug 24 17:36 nebula-metad.WARNING -> nebula-metad.node3.root.log.WARNING.20230824-173614.1591
- lrwxrwxrwx 1 root root 57 Aug 24 17:36 nebula-storaged.ERROR -> nebula-storaged.node3.root.log.ERROR.20230824-173617.1729
- lrwxrwxrwx 1 root root 56 Aug 24 17:36 nebula-storaged.INFO -> nebula-storaged.node3.root.log.INFO.20230824-173614.1729
- -rw-r--r-- 1 root root 8309 Aug 24 17:54 nebula-storaged.node3.root.log.ERROR.20230824-173617.1729
- -rw-r--r-- 1 root root 25196 Aug 24 17:54 nebula-storaged.node3.root.log.INFO.20230824-173614.1729
- -rw-r--r-- 1 root root 17605 Aug 24 17:54 nebula-storaged.node3.root.log.WARNING.20230824-173614.1729
- lrwxrwxrwx 1 root root 59 Aug 24 17:36 nebula-storaged.WARNING -> nebula-storaged.node3.root.log.WARNING.20230824-173614.1729
- -rw-r--r-- 1 root root 0 Aug 24 17:36 storaged-stderr.log
- -rw-r--r-- 1 root root 0 Aug 24 17:36 storaged-stdout.log
- [root@node3 apps]# /usr/local/nebula/scripts/nebula.service status all
- [INFO] nebula-metad(de9b3ed): Running as 1591, Listening on 9559
- [INFO] nebula-graphd(de9b3ed): Running as 1660, Listening on 9669
- [WARN] nebula-storaged after v3.0.0 will not start service until it is added to cluster.
- [WARN] See Manage Storage hosts:ADD HOSTS in https://docs.nebula-graph.io/
- [INFO] nebula-storaged(de9b3ed): Running as 1729, Listening on 9779
出现WARN信息,因为从3.0.0版本起, 配置文件中添加的 Storage 主机无法直接读写,配置文件的作用仅仅是将 Storage 主机注册至 Meta 服务中。必须使用ADD HOSTS
命令后,才能正常读写 Storage 主机,下一步需要注册Storage服务。
编辑配置文件/lib/systemd/system/metad.service
- [root@node3 ~]# vim /lib/systemd/system/metad.service
- [Unit]
- Description=metad
- After=network.target
-
- [Service]
- Type=forking
- Restart=always
- RestartSec=5s
- PIDFile=/usr/local/nebula/pids/nebula-metad.pid
- ExecStart=/usr/local/nebula/scripts/nebula.service start metad
- ExecReload=/usr/local/nebula/scripts/nebula.service restart metad
- ExecStop=/usr/local/nebula/scripts/nebula.service stop metad
- PrivateTmp=true
-
- [Install]
- WantedBy=multi-user.target
编辑配置文件/lib/systemd/system/graphd.service
- [root@node3 ~]# vim /lib/systemd/system/graphd.service
- [Unit]
- Description=graphd
- After=network.target
-
- [Service]
- Type=forking
- Restart=always
- RestartSec=5s
- PIDFile=/usr/local/nebula/pids/nebula-graphd.pid
- ExecStart=/usr/local/nebula/scripts/nebula.service start graphd
- ExecReload=/usr/local/nebula/scripts/nebula.service restart graphd
- ExecStop=/usr/local/nebula/scripts/nebula.service stop graphd
- PrivateTmp=true
-
- [Install]
- WantedBy=multi-user.target
编辑配置文件/lib/systemd/system/storaged.service
- [root@node3 ~]# vim /lib/systemd/system/storaged.service
- [Unit]
- Description=storaged
- After=network.target
-
- [Service]
- Type=forking
- Restart=always
- RestartSec=5s
- PIDFile=/usr/local/nebula/pids/nebula-storaged.pid
- ExecStart=/usr/local/nebula/scripts/nebula.service start storaged
- ExecReload=/usr/local/nebula/scripts/nebula.service restart storaged
- ExecStop=/usr/local/nebula/scripts/nebula.service stop storaged
- PrivateTmp=true
-
- [Install]
- WantedBy=multi-user.target
systemctl daemon-reload
- systemctl enable metad.service
- systemctl enable graphd.service
- systemctl enable storaged.service
首先需要连接到NebulaGraph,再执行添加Storage主机(ADD HOSTS
),并确认主机都处于在线状态。
通过命令行客户端NebulaGraph Console连接NebulaGraph,从github下载最新的版本。
wget https://github.com/vesoft-inc/nebula-console/releases/download/v3.5.0/nebula-console-linux-amd64-v3.5.0
重命名nebula-console客户端
mv nebula-console-linux-amd64-v3.5.0 nebula-console
使用God缺省账号密码root/nebula连接NebulaGraph
- # ./nebula-console -addr 192.168.5.12 -P 9669 -u root -p nebula
- (root@nebula) [(none)]> ADD HOSTS 192.168.5.12:9779
- Execution succeeded (time spent 2.218ms/33.088291ms)
-
- Thu, 24 Aug 2023 18:16:18 CST
-
- # 验证是否添加成功
- (root@nebula) [(none)]> show hosts;
- +----------------+------+-----------+--------------+----------------------+------------------------+---------+
- | Host | Port | Status | Leader count | Leader distribution | Partition distribution | Version |
- +----------------+------+-----------+--------------+----------------------+------------------------+---------+
- | "192.168.5.12" | 9779 | "OFFLINE" | 0 | "No valid partition" | "No valid partition" | |
- +----------------+------+-----------+--------------+----------------------+------------------------+---------+
- Got 1 rows (time spent 1.059ms/9.404375ms)
-
- Thu, 24 Aug 2023 18:16:32 CST
注意此处Status为"OFFLINE",表示状态不在线添加失败了,原因是要添加的主机IP和配置文件nebula-storaged.conf
中local_ip
必须一致。修改配置文件如下:
- [root@node3 logs]# vim /usr/local/nebula/etc/nebula-storaged.conf
- --local_ip=192.168.5.12
-
- # 重启服务使生效
- [root@node3 logs]# /usr/local/nebula/scripts/nebula.service restart storaged
- [INFO] Stopping nebula-storaged...
- [INFO] Done
- [INFO] Starting nebula-storaged...
- [INFO] Done
-
- # curl验证当前配置是否生效
- [root@node3 logs]# curl --silent http://192.168.5.12:19779/flags | grep local_ip
- local_ip="192.168.5.12"
Status为ONLINE则表示注册成功。
- (root@nebula) [(none)]> show hosts;
- 2023/08/24 18:36:26 [INFO] Successfully reconnect to host: 192.168.5.12, port: 9669
- +----------------+------+----------+--------------+----------------------+------------------------+---------+
- | Host | Port | Status | Leader count | Leader distribution | Partition distribution | Version |
- +----------------+------+----------+--------------+----------------------+------------------------+---------+
- | "192.168.5.12" | 9779 | "ONLINE" | 0 | "No valid partition" | "No valid partition" | "3.6.0" |
- +----------------+------+----------+--------------+----------------------+------------------------+---------+
- Got 1 rows (time spent 2.576ms/18.787666ms)
NebulaGraph Studio是一款开源图数据库Web可视化工具,搭配NebulaGraph使用,提供数据建模、数据导入、nGQL查询等一站式服务。
- wget https://oss-cdn.nebula-graph.com.cn/nebula-graph-studio/3.7.0/nebula-graph-studio-3.7.0.x86_64.rpm
- wget https://oss-cdn.nebula-graph.com.cn/nebula-graph-studio/3.7.0/nebula-graph-studio-3.7.0.x86_64.rpm.sha256
需求提前安装好lsof工具,安装好Studio会自动启动
- [root@node3 apps]# rpm -ivh nebula-graph-studio-3.7.0.x86_64.rpm
- Preparing... ################################# [100%]
- Start installing NebulaGraph Studio now...
- Updating / installing...
- 1:nebula-graph-studio-3.7.0-1 ################################# [100%]
- NebulaGraph Studio has been installed.
- Created symlink from /etc/systemd/system/multi-user.target.wants/nebula-graph-studio.service to /usr/lib/systemd/system/nebula-graph-studio.service.
- NebulaGraph Studio started automatically.
浏览器地址栏输入http://192.168.5.12:7001,打开登录页面,如下表示部署成功。
配置数据库连接信息,输入graphd IP地址,默认端口9669,账号密码使用root/nebula,进入欢迎主页。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。