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

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

阅读指南

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

编译Nebula Graph源码要求

硬件要求

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

操作系统要求

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

软件要求

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

软件名称版本备注
glibc2.17及以上执行命令ldd —version检查版本。
make任意稳定版本-
m4任意稳定版本-
git任意稳定版本-
wget任意稳定版本-
unzip任意稳定版本-
xz任意稳定版本-
readline-devel任意稳定版本-
ncurses-devel任意稳定版本-
zlib-devel任意稳定版本-
gcc7.5.0及以上执行命令gcc -v检查版本。
gcc-c++任意稳定版本-
cmake3.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用户请执行如下命令:

      1. $ yum update
      2. $ yum install -y make \
      3. m4 \
      4. git \
      5. wget \
      6. unzip \
      7. xz \
      8. readline-devel \
      9. ncurses-devel \
      10. zlib-devel \
      11. gcc \
      12. gcc-c++ \
      13. cmake \
      14. gettext \
      15. curl \
      16. redhat-lsb-core \
      17. bzip2
      18. // 仅CentOS 8+、RedHat 8+、Fedora需要安装libstdc++-static和libasan。
      19. $ yum install -y libstdc++-static libasan
    • Debian和Ubuntu用户请执行如下命令:

      1. $ apt-get update
      2. $ apt-get install -y make \
      3. m4 \
      4. git \
      5. wget \
      6. unzip \
      7. xz-utils \
      8. curl \
      9. lsb-core \
      10. build-essential \
      11. libreadline-dev \
      12. ncurses-dev \
      13. cmake \
      14. gettext
  2. 检查主机上的GCC和CMake版本是否正确。版本信息请参见软件要求

    1. $ g++ --version
    2. $ cmake --version

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

    1. 克隆仓库nebula到主机。

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

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

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

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

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

    1. $ ./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进程数量
A111
B-11
C-11

生产环境运行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进程数量
A111
B111
C111
D-11
E-11

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_multiplierdisk_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.1 不支持直接在 ARM 架构上运行。访问官网获取商业支持


最后更新: November 4, 2021