Nebula Graph:一個開源的分佈式圖數據庫。做爲惟一可以存儲萬億個帶屬性的節點和邊的在線圖數據庫,Nebula Graph 不只可以在高併發場景下知足毫秒級的低時延查詢要求,還可以實現服務高可用且保障數據安全性。git
Nebula Graph 是開源的第三代分佈式圖數據庫,不只可以存儲萬億個帶屬性的節點和邊,並且還能在高併發場景下知足毫秒級的低時延查詢要求。不一樣於 Gremlin 和 Cypher,Nebula 提供了一種 SQL-LIKE 的查詢語言 nGQL,經過三種組合方式(管道
、分號
和變量
)完成對圖的 CRUD 的操做。在存儲層 Nebula Graph 目前支持 RocksDB
和 HBase
兩種方式。github
感謝 Nebula Graph 社區 Committer 伊興路供稿本文。docker
Nebula Graph 主要有三個服務進程:數據庫
Meta Service 是整個集羣的元數據管理中心,採用 Raft 協議保證高可用。主要提供兩個功能:安全
Storage Service 負責 Graph 數據存儲。圖數據被切分紅不少的分片 Partition,相同 ID 的 Partition 組成一個 Raft Group,實現多副本一致性。Nebula Graph 默認的存儲引擎是 RocksDB 的 Key-Value 存儲。bash
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_addrs
和 local_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:一個開源的分佈式圖數據庫。