NebulaGraph 安装方式选择

一、NebulaGraph 介绍

1.1、介绍

一个可靠的分布式、线性扩容、 性能高效的图数据库。NebulaGraph 提供了线性扩容的能力,支持快照方式实现数据恢复功能。在查询语言方面,开发团队完全自研开发查询语言——nGQL,兼容 openCypher,让 Neo4j 的用户可无缝衔接使用 NebulaGraph。

二、NebulaGraph 支持的安装方式以及对比

2.1、编译安装

NebulaGraph支持使用源码编译方式进行安装

  • 优点

    1. 可以根据自己需求自定义编译和安装配置,测试最新性能,自由度比较大。
  • 缺点

    1. 需要在操作系统层准备编译环境,可能会与现有环境冲突
    2. 需要服务器必须能够联网
    3. 整个安装过程会比较繁琐

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 操作系统。使用官方封装好的包可以大大降低安装难度。

  • 优点
    1. 安装简单
    2. 支持常用的 Linux 发行版
  • 缺点
    1. 既然已经支持了包管理器,为何不直接维护到 yum 源和或者 apt 源,让用户可以直接使用 yum 命令或者 apt 命令进行安装呢?

2.3.2、tar 包安装

可以但是没必要,目前没有发现什么场景是必须使用 tar 包进行安装的。

2.4、本地多机安装

NebulaGraph 多机集群部署方式,是生产环境建议使用的部署方式之一

  • 优点
    1. 高性能
    2. 高可用
  • *缺点
    1. 资源使用多
    2. 安装维护稍微有些难度

2.5、Docker-Compose 安装

NebulaGraph 单机集群部署方式,是测试环境建议使用的部署方式之一

  • 优点
    1. 可以使用单机模拟集群效果,是入门学习集群环境的不二之选
    2. 部署简单
  • 缺点
    1. 虽然是集群环境,但是高可用只能限制于容器级别,服务器级别无法实现

2.6、K8s 安装

NebulaGraph 集群部署方式,是生产环境建议使用的部署方式之一,在 K8s 中创建 NebulaGraph Operator ,使用 NebulaGraph Operator 来创建维护集群,降低部署维护难度。

  • 优点
    1. 高可用,高于多机集群,因为单点故障,k8s可以自动恢复故障pod,保持节点存活数量
    2. 高性能,可能略低于多机集群, 因为各种网络转发会降低网络性能,影响性能上限(极端情况才会感受到,正常没问题)
  • 缺点
    1. 需要人员的技术能力较高,各种问题的排查难度可能会大于多机集群方式。

2.7、docker多机集群

NebulaGraph 集群部署方式,测试环境以及小规模的生产环境建议使用的部署方式,目前还没有官方文档参考,可以参考我编写的安装文档

  • 优点
    1. 高可用,高于多机集群
    2. 高性能,
    3. 部署相对简单
  • 缺点
    1. 有稍许性能损失
    2. 没有官方文档支持

2.8、对比

编译安装 Docker编译安装 单机安装 集群安装 Docker-Compose安装 K8s安装 docker集群
部署维护难度 :star::star: :star::star: :star: :star::star::star: :star::star: :star::star::star: :star::star:
所需资源 :star: :star: :star: :star::star::star: :star::star: :star::star::star: :star::star::star:
高可用,高性能 :star: :star: :star: :star::star::star: :star::star: :star::star::star: :star::star::star:

三、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

拉取镜像中,耐心等等

image-20231204142035788

服务已经启动

image-20231204142104031

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 状态已经正常

image-20231204143402402

3.3.4、Docker 多机集群部署

已经自己实现了该部署方式,参考文章

Docker 部署集群相对二进制部署,简化了一些系统命令,但是会有一些额外的性能损耗。

四、结语

首先官方文档非常稳,所有安装过程,参照官方文档均可正常完成安装。建议增加 Docker 的多机集群部署方式,不是 Docker-Compose 哦。

我也是刚刚接触 NebulaGraph,希望能通过这篇文章帮助想要入坑 NebulaGraph 的小伙伴能快速的部署一套环境出来。

本文正在参加 NebulaGraph 技术社区年度征文活动,征文详情:https://discuss.nebula-graph.com.cn/t/topic/13970

如果你觉得本文对你有所启发,记得给我点个 :heart: ,谢谢你的鼓励

19 个赞

非常棒,感谢你详细的测评,尤其是 K8s 部署那块的分享 :smiling_face_with_three_hearts:

3 个赞

很有启发,为后续的使用奠定了基础。

2 个赞

文章非常好,很值得学习

1 个赞

非常棒的总结、分享,也分享一个我之前画的这个主题的图。

2 个赞

感谢支持,我这刚刚接触,还需要努力

非常非常赞,期待后续的更多分享 :smiling_face_with_three_hearts:

各种安装的对比写的很清楚

@wey 古老师好,后续有写了基于docker的多机集群,以及docker-compose方式部署的集群如何备份,可以看看能否由社区的小伙伴修改优化后,加入官方文档

1 个赞

哇,非常赞!我去里边给一些评论哈。

现有的文档其实是一个单机多服务的部署,和文档沟通过他们觉得这个多机多服务并不是个主流(用户可能转向用 K8s 或者 Docker Swarm 进行部署)。如果你觉得有需求的话,可以去 nebula-docs 开个 issue 和我们的文档同学交流下哈。感谢飞鸟~