跳转至

准备编译、安装和运行 Nebula Graph 的环境

本文介绍编译、安装 Nebula Graph 的要求和建议,以及如何预估集群运行所需的资源。

阅读指南

如果是带着如下问题阅读本文,可以直接单击问题跳转查看对应的说明。

编译 Nebula Graph 源码要求

硬件要求

类型 要求
CPU 架构 x86_64
内存 4 GB
硬盘 10 GB,SSD

操作系统要求

当前仅支持在 Linux 系统中编译 Nebula Graph,建议使用内核版本为2.6.32及以上版本的 Linux 系统。

软件要求

软件版本需要如下表所示,如果它们不符合要求,或者也不确定它们的版本,请按照安装编译所需软件中的步骤进行操作。

软件名称 版本 备注
glibc 2.17 及以上 执行命令ldd --version检查版本。
make 任意稳定版本 -
m4 任意稳定版本 -
git 任意稳定版本 -
wget 任意稳定版本 -
unzip 任意稳定版本 -
xz 任意稳定版本 -
readline-devel 任意稳定版本 -
ncurses-devel 任意稳定版本 -
zlib-devel 任意稳定版本 -
gcc 7.5.0 及以上 执行命令gcc -v检查版本。
gcc-c++ 任意稳定版本 -
cmake 3.9.0 及以上 执行命令cmake --version检查版本。
gettext 任意稳定版本 -
curl 任意稳定版本 -
redhat-lsb-core 任意稳定版本 -
libstdc++-static 任意稳定版本 仅在 CentOS 8+、RedHat 8+、Fedora 中需要。
libasan 任意稳定版本 仅在 CentOS 8+、RedHat 8+、Fedora 中需要。
bzip2 任意稳定版本 -

其他第三方软件将在安装(cmake)阶段自动下载并安装到build目录中。

安装编译所需软件

本小节指导下载和安装 Nebula Graph 编译时需要的软件。

  1. 安装依赖包。

    • CentOS、RedHat、Fedora 用户请执行如下命令:
      $ yum update
      $ yum install -y make \
                       m4 \
                       git \
                       wget \
                       unzip \
                       xz \
                       readline-devel \
                       ncurses-devel \
                       zlib-devel \
                       gcc \
                       gcc-c++ \
                       cmake \
                       gettext \
                       curl \
                       redhat-lsb-core \
                       bzip2
      //  CentOS 8+、RedHat 8+、Fedora 需要安装 libstdc++-static  libasan。
      $ yum install -y libstdc++-static libasan
      
    • Debian 和 Ubuntu 用户请执行如下命令:
      $ apt-get update
      $ apt-get install -y make \
                           m4 \
                           git \
                           wget \
                           unzip \
                           xz-utils \
                           curl \
                           lsb-core \
                           build-essential \
                           libreadline-dev \
                           ncurses-dev \
                           cmake \
                           gettext
      
  2. 检查主机上的 GCC 和 CMake 版本是否正确。版本信息请参见软件要求

    $ g++ --version
    $ cmake --version
    

    如果版本正确,用户可以跳过本小节。如果不正确,请根据如下步骤安装:

    1. 克隆仓库nebula到主机。

      $ git clone -b v2.6.2 https://github.com/vesoft-inc/nebula.git
      

      如需安装特定版本的 Nebula Graph,使用--branch-b选项指定相应的 nebula-common 分支。 例如,指定2.6.2,命令如下:

      $ git clone --branch v2.6.2 https://github.com/vesoft-inc/nebula.git
      
    2. 进入目录nebula

      $ cd nebula
      
    3. 执行如下命令安装和启用 GCC 和 CMake。

      // 安装 CMake。
      $ ./third-party/install-cmake.sh cmake-install
      
      // 启用 CMake。
      $ source cmake-install/bin/enable-cmake.sh
      
      //opt 目录添加写权限。
      $ sudo mkdir /opt/vesoft && sudo chmod -R a+w /opt/vesoft
      
      // 安装 GCC。安装到 opt 目录需要写权限,用户也可以修改为其他目录。
      $ ./third-party/install-gcc.sh --prefix=/opt
      
      // 启用 GCC。
      $ source /opt/vesoft/toolset/gcc/7.5.0/enable
      
  3. 执行脚本install-third-party.sh

    $ ./third-party/install-third-party.sh
    

测试环境运行 Nebula Graph 要求

硬件要求

类型 要求
CPU 架构 x86_64
CPU 核数 4
内存 8 GB
硬盘 100 GB,SSD

操作系统要求

当前仅支持在 Linux 系统中安装 Nebula Graph,建议在测试环境中使用内核版本为3.9及以上版本的 Linux 系统。

服务架构建议

进程 建议数量
metad(meta 数据服务进程) 1
storaged(存储服务进程) ≥1
graphd(查询引擎服务进程) ≥1

例如单机测试环境,用户可以在机器上部署 1 个 metad、1 个 storaged 和 1 个 graphd 进程。

对于更常见的测试环境,例如三台机器构成的集群,用户可以按照如下方案部署 Nebula Graph。

机器名称 metad 进程数量 storaged 进程数量 graphd 进程数量
A 1 1 1
B - 1 1
C - 1 1

生产环境运行 Nebula Graph 要求

硬件要求

类型 要求
CPU 架构 x86_64
CPU 核数 48
内存 96 GB
硬盘 2 * 900 GB,NVMe SSD

操作系统要求

当前仅支持在 Linux 系统中安装 Nebula Graph,建议在生产环境中使用内核版本为3.9及以上版本的 Linux 系统。

用户可以通过调整一些内核参数来提高 Nebula Graph 性能,详情请参见内核配置

服务架构建议

Danger

不要跨机房部署集群。

进程 数量
metad(meta 数据服务进程) 3
storaged(存储服务进程) ≥3
graphd(查询引擎服务进程) ≥3

有且仅有 3 个 metad 进程,每个 metad 进程会自动创建并维护 meta 数据的一个副本。

storaged 进程的数量不会影响图空间副本的数量。

用户可以在一台机器上部署多个不同进程,例如五台机器构成的集群,用户可以按照如下方案部署 Nebula Graph。

机器名称 metad 进程数量 storaged 进程数量 graphd 进程数量
A 1 1 1
B 1 1 1
C 1 1 1
D - 1 1
E - 1 1

Nebula Graph 资源要求

用户可以预估一个 3 副本 Nebula Graph 集群所需的内存、硬盘空间和分区数量。

资源 单位 计算公式 说明
硬盘空间 Bytes 点和边的总数 * 属性的平均字节大小 * 6 * 120% 由于边存在存储放大现象,所以需要点和边的总数 * 属性的平均字节大小 * 6 的空间,详情请参见切边与存储放大
内存 Bytes [点和边的总数 * 15 + RocksDB 实例数量 * (write_buffer_size * max_write_buffer_number + 块缓存大小)] * 120% 点和边的总数 * 15 是 BloomFilter 需要占用的内存空间,write_buffer_sizemax_write_buffer_number是 RocksDB 内存相关参数,详情请参见 MemTable。块缓存大小请参见 Memory usage in RocksDB
分区数量 - 集群硬盘数量 * disk_partition_num_multiplier disk_partition_num_multiplier是取值为 2~10 的一个整数,用于衡量硬盘性能。HDD 使用 2。
  • 问题 1:为什么磁盘空间和内存都要乘以 120%?

    答:额外的 20%用于缓冲。

  • 问题 2:如何获取 RocksDB 实例数量?

    答:在etc目录内查看配置文件nebula-storaged.conf--data_path选项中的每个目录对应一个 RocksDB 实例,目录总数即是 RocksDB 实例数量。

Note

用户可以在配置文件nebula-storaged.conf中添加--enable_partitioned_index_filter=true来降低 bloom 过滤器占用的内存大小,但是在某些随机寻道(random-seek)的情况下,可能会降低读取性能。

FAQ

关于存储设备

Nebula Graph 是针对 NVMe SSD 进行设计和实现的,所有默认参数都是基于 SSD 设备进行调优,要求极高的 IOPS 和极低的 Latency。

  • 不建议使用 HDD;因为其 IOPS 性能差,随机寻道延迟高;会遇到大量问题。
  • 不要使用远端存储设备(如 NAS 或 SAN),不要外接基于 HDFS 或者 Ceph 的虚拟硬盘。
  • 不需要使用磁盘阵列(RAID)。
  • 使用本地 SSD 设备。

关于 CPU 架构

Enterpriseonly

Nebula Graph 2.6.2 仅企业版支持在 ARM 架构(包括 Apple Mac M1 或者华为鲲鹏)上运行。访问官网获取商业支持


最后更新: March 7, 2023