圖數據庫 Nebula Graph 的安裝部署

Nebula Graph:一個開源的分佈式圖數據庫。做爲惟一可以存儲萬億個帶屬性的節點和邊的在線圖數據庫,Nebula Graph 不只可以在高併發場景下知足毫秒級的低時延查詢要求,還可以實現服務高可用且保障數據安全性。

本文目錄

  1. 簡介
  2. Nebula 總體架構git

    1. Meta Service
    2. Storage Service
    3. Graph Service
  3. 安裝部署github

    1. 單機運行
    2. 集羣部署docker

      1. 環境準備
      2. 安裝
      3. 配置
    3. 測試集羣

簡介

Nebula Graph 是開源的第三代分佈式圖數據庫,不只可以存儲萬億個帶屬性的節點和邊,並且還能在高併發場景下知足毫秒級的低時延查詢要求。不一樣於 Gremlin 和 Cypher,Nebula 提供了一種 SQL-LIKE 的查詢語言 nGQL,經過三種組合方式(管道分號變量)完成對圖的 CRUD 的操做。在存儲層 Nebula Graph 目前支持 RocksDBHBase 兩種方式。數據庫

感謝 Nebula Graph 社區 Committer 伊興路供稿本文。安全

Nebula Graph總體架構

img

Nebula Graph 主要有三個服務進程:bash

Meta Service

Meta Service 是整個集羣的元數據管理中心,採用 Raft 協議保證高可用。主要提供兩個功能:架構

  1. 管理各類元信息,好比 Schema
  2. 指揮存儲擴容和數據遷移

Storage Service


Storage Service 負責 Graph 數據存儲。圖數據被切分紅不少的分片 Partition,相同 ID 的 Partition 組成一個 Raft Group,實現多副本一致性。Nebula Graph 默認的存儲引擎是 RocksDB 的 Key-Value 存儲。併發

Graph Service

Graph Service 位於架構中的計算層,負責同 Console 等 Client 通訊,解析 nGQL 的請求並生成執行計劃。執行計劃通過優化器優化以後,交與執行引擎執行。執行引擎會向 MetaService 請求點邊的 Schema 和向存儲引擎獲取點邊的數據。分佈式

GraphService 是個無狀態的服務,能夠無限的水平拓展,而且計算層的執行計劃最終會下發到數據節點執行。高併發

安裝部署

Nebula Graph 提供兩種部署方式:單機集羣單機部署主要用於測試和體驗使用,生產場景推薦集羣方式

單機運行

在單機上實踐或者測試 Nebula Graph 的最好方式是經過 Docker 容器運行,參照文檔拉取鏡像,並進入容器:

$ docker pull vesoft/nebula-graph:latest
    $ docker run --rm -ti vesoft/nebula-graph:latest bash

進入容器以後首先啓動 Nebula 的全部 Services,再經過 Console 客戶端鏈接本容器內部的 graphd 服務來執行 nGQL 語句

$ cd /usr/local/nebula
    $ ./scripts/nebula.service start all
    $ ./bin/nebula -u user -p password
    (user@127.0.0.1) [(none)]> SHOW HOSTS;
    ===============================
    | Ip         | Port  | Status |
    ===============================
    | 172.17.0.2 | 44500 | online |
    -------------------------------
    Got 1 rows (Time spent: 15621/16775 us)

集羣部署

環境準備

Nebula 支持編譯安裝和經過打包好的 Package 安裝。因爲 Nebula 依賴較多,簡便起見推薦使用安裝包安裝

本文準備了 3 臺裝有 CentOS 7.5 系統的機器,IP 以下所示:

192.168.8.14 # cluster-14
    192.168.8.15 # cluster-15
    192.168.8.16 # cluster-16

在每臺機器上下載對應的安裝包

$ wget -O nebula-1.0.0-beta.el7-5.x86_64.rpm https://github.com/vesoft-inc/nebula/releases/download/v1.0.0-beta/nebula-1.0.0-beta.el7-5.x86_64.rpm

此外因爲 Nebula 的服務之間通訊須要開放一些端口,因此能夠臨時關掉全部機器上的防火牆: (具體使用端口見 /usr/local/nebula/etc/ 下面的配置文件)

$ systemctl disable firewalld

本文將按以下的方式部署 Nebula 的集羣:

- cluster-14: metad/storaged/graphd
  - cluster-15: metad/storaged
  - cluster-16: metad/storaged
安裝

使用 rpm 安裝上步準備好的安裝包

$ rpm -ivh nebula-*.rpm

Nebula 默認的安裝目錄位於 /usr/local/nebula

配置

Nebula 的全部配置文件都位於 /usr/local/nebula/etc 目錄下,而且提供了三份默認配置。分別編輯這些配置文件:

第一份配置文件:nebula-metad.conf

metad 經過 raft 協議保證高可用,須要爲每一個 metad 的 service 都配置該服務部署的機器 ip 和端口。主要涉及 meta_server_addrslocal_ip 兩個字段,其餘使用默認配置。 cluster-14 上的兩項配置示例以下所示:

# Peers
    --meta_server_addrs=192.168.8.14:45500,192.168.8.15:45500,192.168.8.16:45500
    # Local ip
    --local_ip=192.168.8.14
    # Meta daemon listening port
    --port=45500

第二份配置文件:nebula-graphd.conf

graphd 運行時須要從 metad 中獲取 schema 數據,因此在配置中必須顯示指定集羣中 metad 的 ip 地址和端口選項 meta_server_addrs ,其餘使用默認配置。 cluster-14 上的 graphd 配置以下:

# Meta Server Address
    --meta_server_addrs=192.168.8.14:45500,192.168.8.15:45500,192.168.8.16:45500

第三份配置文件:nebula-storaged.conf

storaged 也是使用的 raft 協議保證高可用,在數據遷移時會與 metad 通訊,因此須要配置 metad 的地址和端口 meta_server_addrs 和本機地址 local_ip ,其 peers 能夠經過 metad 得到。 cluster-14 上的部分配置選項以下:

# Meta server address
    --meta_server_addrs=192.168.8.14:45500,192.168.8.15:45500,192.168.8.16:45500
    # Local ip
    --local_ip=192.168.8.14
    # Storage daemon listening port
    --port=44500
啓動集羣

cluster-14

$ /usr/local/nebula/scripts/nebula.service start all
    [INFO] Starting nebula-metad...
    [INFO] Done
    [INFO] Starting nebula-graphd...
    [INFO] Done
    [INFO] Starting nebula-storaged...
    [INFO] Done

cluster-15/cluster-16

$ /usr/local/nebula/scripts/nebula.service start metad
    [INFO] Starting nebula-metad...
    [INFO] Done
    $ /usr/local/nebula/scripts/nebula.service start storaged
    [INFO] Starting nebula-storaged...
    [INFO] Done

注:部分用戶可能會遇到

[WARN] The maximum files allowed to open might be too few: 1024

能夠本身修改 /etc/security/limits.conf

測試集羣

登錄集羣中的一臺,執行以下命令:

$ /usr/local/nebula/bin/nebula -u user -p password --addr 192.168.8.14 --port 3699
    (user@192.168.8.14) [(none)]> SHOW HOSTS;
    ==================================
    | Ip           | Port  | Status  |
    ==================================
    | 192.168.8.14 | 44500 | offline |
    ----------------------------------
    Got 1 rows (Time spent: 3511/4024 us)

附錄

Nebula Graph:一個開源的分佈式圖數據庫。

GitHub:https://github.com/vesoft-inc/nebula

知乎:https://www.zhihu.com/org/neb...

微博:https://weibo.com/nebulagraph

相關文章
相關標籤/搜索