一、NebulaGraph 介绍
1.1、介绍
一个可靠的分布式、线性扩容、 性能高效的图数据库。NebulaGraph 提供了线性扩容的能力,支持快照方式实现数据恢复功能。在查询语言方面,开发团队完全自研开发查询语言——nGQL,兼容 openCypher,让 Neo4j 的用户可无缝衔接使用 NebulaGraph。
二、NebulaGraph 支持的安装方式以及对比
2.1、编译安装
NebulaGraph支持使用源码编译方式进行安装
-
优点:
- 可以根据自己需求自定义编译和安装配置,测试最新性能,自由度比较大。
-
缺点:
- 需要在操作系统层准备编译环境,可能会与现有环境冲突
- 需要服务器必须能够联网
- 整个安装过程会比较繁琐
2.2、使用 Docker 编译安装
通过 Docker 进行编译安装,解决了服务器直接安装可能存在冲突的问题,其余优缺点与服务器编译安装一致,相当于是编译安装的优化版。
2.3、本地单机安装
2.3.1、使用包管理器 rpm 以及 dpkg 进行安装
NebulaGraph 安装包,支持且仅支持 CentOS 7.x、CentOS 8.x、Ubuntu 16.04、Ubuntu 18.04、Ubuntu 20.04 操作系统。使用官方封装好的包可以大大降低安装难度。
- 优点:
- 安装简单
- 支持常用的 Linux 发行版
- 缺点:
- 既然已经支持了包管理器,为何不直接维护到 yum 源和或者 apt 源,让用户可以直接使用 yum 命令或者 apt 命令进行安装呢?
2.3.2、tar 包安装
可以但是没必要,目前没有发现什么场景是必须使用 tar 包进行安装的。
2.4、本地多机安装
NebulaGraph 多机集群部署方式,是生产环境建议使用的部署方式之一
- 优点:
- 高性能
- 高可用
- *缺点:
- 资源使用多
- 安装维护稍微有些难度
2.5、Docker-Compose 安装
NebulaGraph 单机集群部署方式,是测试环境建议使用的部署方式之一
- 优点:
- 可以使用单机模拟集群效果,是入门学习集群环境的不二之选
- 部署简单
- 缺点:
- 虽然是集群环境,但是高可用只能限制于容器级别,服务器级别无法实现
2.6、K8s 安装
NebulaGraph 集群部署方式,是生产环境建议使用的部署方式之一,在 K8s 中创建 NebulaGraph Operator ,使用 NebulaGraph Operator 来创建维护集群,降低部署维护难度。
- 优点:
- 高可用,高于多机集群,因为单点故障,k8s可以自动恢复故障pod,保持节点存活数量
- 高性能,可能略低于多机集群, 因为各种网络转发会降低网络性能,影响性能上限(极端情况才会感受到,正常没问题)
- 缺点:
- 需要人员的技术能力较高,各种问题的排查难度可能会大于多机集群方式。
2.7、docker多机集群
NebulaGraph 集群部署方式,测试环境以及小规模的生产环境建议使用的部署方式,目前还没有官方文档参考,可以参考我编写的安装文档。
- 优点:
- 高可用,高于多机集群
- 高性能,
- 部署相对简单
- 缺点:
- 有稍许性能损失
- 没有官方文档支持
2.8、对比
编译安装 | Docker编译安装 | 单机安装 | 集群安装 | Docker-Compose安装 | K8s安装 | docker集群 | |
---|---|---|---|---|---|---|---|
部署维护难度 | |||||||
所需资源 | |||||||
高可用,高性能 |
三、NebulaGraph 安装方式选择以及安装
3.1、操作系统选择
考虑到后期 CentOS 社区维护问题,建议使用 Ubuntu 操作系统。
3.2、安装方式选择
3.2.1、个人测试
刚开始接触学习建议使用单机安装方式,安装简单,可以快速上手。
3.2.2、公司测试
公司测试建议使用多机集群,Docker-Compose 安装,以及 K8s 安装,尽可能模拟实际生产环境,或完全和生产环境一致,可以根据公司技术路线选择是否使用 K8s,公司服务器资源是否充裕,来选择是否使用 Docker-Compose 安装。
3.2.3、生产环境
公司生产建议使用多机集群,以及 K8s 安装,应尽量提高应用的可用性以及性能。
3.3、安装过程
3.3.1、单机安装
单机安装可以简单快捷的安装 NebulaGraph,用于个人测试环境使用,首先准备一台 Linux 服务器,我这边使用的 Ubuntu 1804 操作系统。具体可参考官方文档。
下载安装包
wget https://oss-cdn.nebula-graph.com.cn/package/3.6.0/nebula-graph-3.6.0.ubuntu1804.amd64.deb
wget https://oss-cdn.nebula-graph.com.cn/package/3.6.0/nebula-graph-3.6.0.ubuntu1804.amd64.deb.sha256sum.txt
安装
sudo dpkg -i nebula-graph-3.6.0.ubuntu1804.amd64.deb
启动服务
sudo /usr/local/nebula/scripts/nebula.service start all
# 查看状态
sudo /usr/local/nebula/scripts/nebula.service status all
注意:安装需要调整一部分内核参数,官方把这部分内容放到配置与日志部分,没有放到安装部分,如果不调整会有警告报错,影响后续使用。官方文档
服务启动后还需要手动添加 Storage主机,参考官方文档
3.3.2、Docker-Compose 安装
Docker-Compose 部署方式可以快速实现一套单机集群环境,适合资源不充裕的公司测试环境使用。具有一定的高可用能力,可以用来模拟生产环境,已经测试单点故障。
首先安装 Docker、Docker-Compose,参考 Docker 官方文档即可。
clone 项目代码
$ git clone -b release-3.6 https://github.com/vesoft-inc/nebula-docker-compose.git
启动应用
这个过程中,会自动拉取镜像,需要耐心等待
cd nebula-docker-compose/
docker-compose up -d
拉取镜像中,耐心等等
服务已经启动
3.3.3、K8s 安装
这个安装首先你要有一套 K8s 并且 K8s 上有 storageClass,NebulaGraph 基于 K8s 部署,高可用能力直接拉满,但是占用资源较多,建议在生产环境使用。
我这边使用的是一套二进制部署的 K8s 平台,rook 拉起的一套 Ceph 集群(建议使用高性能 SSD,我这没有凑合用)。
安装
#创建 namespace
kubectl create namespace nebula
#添加 repo
helm repo add nebula-operator https://vesoft-inc.github.io/nebula-operator/charts
#更新资源
helm repo update nebula-operator
#设置环境变量
# NebulaGraph 集群的名字。
export NEBULA_CLUSTER_NAME=nebula
# NebulaGraph 集群所处的命名空间的名字。
export NEBULA_CLUSTER_NAMESPACE=nebula
# NebulaGraph 集群的 StorageClass 根据实际填写
export STORAGE_CLASS_NAME=rook-ceph-block
#创建集群
helm install "${NEBULA_CLUSTER_NAME}" nebula-operator/nebula-cluster \
# 指定集群 chart 的版本,不指定则默认安装最新版本 chart。
# 执行 helm search repo -l nebula-operator/nebula-cluster 命令可查看所有 chart 版本。
--version=1.7.3 \
# 指定 NebulaGraph 集群所处的命名空间。
--namespace="${NEBULA_CLUSTER_NAMESPACE}" \
# 自定义集群名称。
--set nameOverride="${NEBULA_CLUSTER_NAME}" \
--set nebula.storageClassName="${STORAGE_CLASS_NAME}" \
# 指定 NebulaGraph 集群的版本。
--set nebula.version=v3.6.0
#查看 Pod 状态
kubectl -n "${NEBULA_CLUSTER_NAMESPACE}" get pod -l "app.kubernetes.io/cluster=${NEBULA_CLUSTER_NAME}"
Pod 状态已经正常
3.3.4、Docker 多机集群部署
已经自己实现了该部署方式,参考文章
Docker 部署集群相对二进制部署,简化了一些系统命令,但是会有一些额外的性能损耗。
四、结语
首先官方文档非常稳,所有安装过程,参照官方文档均可正常完成安装。建议增加 Docker 的多机集群部署方式,不是 Docker-Compose 哦。
我也是刚刚接触 NebulaGraph,希望能通过这篇文章帮助想要入坑 NebulaGraph 的小伙伴能快速的部署一套环境出来。
本文正在参加 NebulaGraph 技术社区年度征文活动,征文详情:https://discuss.nebula-graph.com.cn/t/topic/13970
如果你觉得本文对你有所启发,记得给我点个 ,谢谢你的鼓励