技术分享
NebulaGraph 安装方式的选择
NebulaGraph 介绍
一个可靠的分布式、线性扩容、 性能高效的图数据库。NebulaGraph 提供了线性扩容的能力,支持快照方式实现数据恢复功能。在查询语言方面,开发团队完全自研开发查询语言——nGQL,兼容 openCypher,让 Neo4j 的用户可无缝衔接使用 NebulaGraph。
NebulaGraph 支持的安装方式以及对比
01 编译安装
NebulaGraph支持使用源码编译方式进行安装
优点:
- 可以根据自己需求自定义编译和安装配置,测试最新性能,自由度比较大。
缺点:
需要在操作系统层准备编译环境,可能会与现有环境冲突
需要服务器必须能够联网
整个安装过程会比较繁琐
02 使用 Docker 编译安装
通过 Docker 进行编译安装,解决了服务器直接安装可能存在冲突的问题,其余优缺点与服务器编译安装一致,相当于是编译安装的优化版。
03 本地单机安装
使用包管理器 rpm 以及 dpkg 进行安装
NebulaGraph 安装包,支持且仅支持 CentOS 7.x、CentOS 8.x、Ubuntu 16.04、Ubuntu 18.04、Ubuntu 20.04 操作系统。使用官方封装好的包可以大大降低安装难度。
优点:
安装简单
支持常用的 Linux 发行版
缺点:
- 既然已经支持了包管理器,为何不直接维护到 yum 源和或者 apt 源,让用户可以直接使用 yum 命令或者 apt 命令进行安装呢?
tar 包安装
可以但是没必要,目前没有发现什么场景是必须使用 tar 包进行安装的。
04 本地多机安装
NebulaGraph 多机集群部署方式,是生产环境建议使用的部署方式之一
优点:
高性能
高可用
缺点:
资源使用多
安装维护稍微有些难度
05 Docker-Compose 安装
NebulaGraph 单机集群部署方式,是测试环境建议使用的部署方式之一
优点:
可以使用单机模拟集群效果,是入门学习集群环境的不二之选
部署简单
缺点:
- 虽然是集群环境,但是高可用只能限制于容器级别,服务器级别无法实现
06 K8s 安装
NebulaGraph 集群部署方式,是生产环境建议使用的部署方式之一,在 K8s 中创建 NebulaGraph Operator ,使用 NebulaGraph Operator 来创建维护集群,降低部署维护难度。
优点:
高可用,高于多机集群,因为单点故障,k8s可以自动恢复故障pod,保持节点存活数量
高性能,可能略低于多机集群, 因为各种网络转发会降低网络性能,影响性能上限(极端情况才会感受到,正常没问题)
缺点:
- 需要人员的技术能力较高,各种问题的排查难度可能会大于多机集群方式。
07 Docker 多机集群
NebulaGraph 集群部署方式,测试环境以及小规模的生产环境建议使用的部署方式,目前还没有官方文档参考,可以参考后续公众号发布的同系列 Docker 多机部署文章。
优点:
高可用,高于多机集群
高性能,
部署相对简单
缺点:
有稍许性能损失
没有官方文档支持
08 对比
NebulaGraph 安装方式选择以及安装
01 操作系统选择
考虑到后期 CentOS 社区维护问题,建议使用 Ubuntu 操作系统。
02 安装方式选择
个人测试
公司测试
公司测试建议使用多机集群,Docker-Compose 安装,以及 K8s 安装,尽可能模拟实际生产环境,或完全和生产环境一致,可以根据公司技术路线选择是否使用 K8s,公司服务器资源是否充裕,来选择是否使用 Docker-Compose 安装。
生产环境
公司生产建议使用多机集群,以及 K8s 安装,应尽量提高应用的可用性以及性能。
03 安装过程
单机安装
单机安装可以简单快捷的安装 NebulaGraph,用于个人测试环境使用,首先准备一台 Linux 服务器,我这边使用的 Ubuntu 1804 操作系统。具体可参考官方文档:https://docs.nebula-graph.com.cn/3.6.0/4.deployment-and-installation/1.resource-preparations/
下载安装包
``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`
![NebulaGraph](https://nebula-website-cn.oss-cn-hangzhou.aliyuncs.com/nebula-website-5.0/share/12.19-2.png)
注意:安装需要调整一部分内核参数,官方把这部分内容放到配置与日志部分,没有放到安装部分,如果不调整会有警告报错,影响后续使用。参考官方文档:https://docs.nebula-graph.com.cn/3.6.0/5.configurations-and-logs/1.configurations/6.kernel-config/
服务启动后还需要手动添加 Storage主机,参考官方文档:https://docs.nebula-graph.com.cn/3.6.0/4.deployment-and-installation/manage-storage-host/
**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`
拉取镜像中,耐心等等
![NebulaGraph 安装方式](https://nebula-website-cn.oss-cn-hangzhou.aliyuncs.com/nebula-website-5.0/share/12.19-3.png)
服务已经启动
![NebulaGraph 安装选择](https://nebula-website-cn.oss-cn-hangzhou.aliyuncs.com/nebula-website-5.0/share/12.19-4.png)
**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 状态已经正常
Docker 多机集群部署
已经自己实现了该部署方式,后续会有详细的文章介绍。
Docker 部署集群相对二进制部署,简化了一些系统命令,但是会有一些额外的性能损耗。
结语
首先官方文档非常稳,所有安装过程,参照官方文档均可正常完成安装。建议增加 Docker 的多机集群部署方式,不是 Docker-Compose 哦。
我也是刚刚接触 NebulaGraph,希望能通过这篇文章帮助想要入坑 NebulaGraph 的小伙伴能快速的部署一套环境出来。