作者:NebulaGraph 工程師 Kenshin
NebulaGraph BR 開源已經有一段時間了,為了給社群使用者提供一個更穩、更快、更易用的備份恢復工具,去年對其進行了比較大的重構。NebulaGraph BR(以下簡稱 BR)分為社群版和企業版兩個版本,企業版在社群版功能的基礎上,額外提供了增量備份的能力。而本文將以 BR 社群版為例,簡單介紹 BR 的一些實現細節並透過上手練習來講述如何使用 BR 進行 NebulaGraph 資料的備份恢復。
什麼是 BR
BR 即 Backup & Restore 的簡稱,是一款對 NebulaGraph 叢集資料(包括元資訊和資料資訊)備份到遠端,並利用備份資料對叢集進行恢復的工具。倉庫地址在此:https://github.com/vesoft-inc/nebula-br。
什麼是 NebulaGraph Agent
NebulaGraph Agent 是一個只關心本機的無狀態的 RPC 服務,與 metad 通訊,提供備份檔案上傳和下載、服務起停等介面供 BR 呼叫。在開始備份恢復前,需要確保叢集的每個節點上部署了一個 agent,可以透過 SHOW HOSTS AGENT
檢視 agent 的狀態。倉庫地址在此:https://github.com/vesoft-inc/nebula-agent。
整體架構如下圖所示:
由於 NebulaGraph Agent 分佈在叢集的各個節點上,在備份恢復時,BR 帶來的 CPU 和網路 IO 開銷會分散到各臺機器上,使其可以輕鬆應對大規模叢集的備份恢復場景。
上手 BR
為了能讓大家更快的熟悉 BR 工具,讓我們從零開始,做一個簡單的實操練習,來體驗目前 nebula-br 支援的所有功能。
環境準備
首先,我們需要建立一個 NebulaGraph 叢集,目前 BR 工具不支援在容器場景執行備份恢復,可以透過下載安裝包的方式在虛擬機器上安裝,參考文件:https://docs.nebula-graph.com.cn/3.3.0/2.quick-start/3.quick-start-on-premise/2.install-nebula-graph/。
在叢集建立完成後,可以透過 nebula-console(NebulaGraph 的命令列工具)來連線它。
執行下面的命令,為叢集匯入一個 basketballplayer 的資料集:
(root@nebula) [(none)]> :play basketballplayer
Start loading dataset basketballplayer...
Load dataset succeeded!
在成功匯入資料後,執行下面的命令來檢視 basketballplayer 的點邊統計
(root@nebula) [basketballplayer]> submit job stats
+------------+
| New Job Id |
+------------+
| 2 |
+------------+
...
(root@nebula) [basketballplayer]> show stats
+---------+------------+-------+
| Type | Name | Count |
+---------+------------+-------+
| "Tag" | "player" | 51 |
| "Tag" | "team" | 30 |
| "Edge" | "follow" | 81 |
| "Edge" | "serve" | 152 |
| "Space" | "vertices" | 81 |
| "Space" | "edges" | 233 |
+---------+------------+-------+
...
接著,我們下載 BR 工具的二進位制檔案:
wget https://github.com/vesoft-inc/nebula-br/releases/download/v3.3.0/br-3.3.0-linux-amd64
部署 NebulaGraph Agent 服務
在準備好叢集環境後,需要在每臺機器上安裝並啟動 NebulaGraph Agent服務
1. 下載 NebulaGrpah Agent 二進位制檔案
wget https://github.com/vesoft-inc/nebula-agent/releases/download/v0.2.0/agent-0.2.0-linux-amd64
2. 啟動 nebula-agent
nohup ./agent-0.2.0-linux-amd64 --agent="<agent_node_ip>:8888" --meta="<metad_node_ip>:9559" > nebula_agent.log 2>&1 &
該命令會啟動一個監聽 8888 埠的 nebula-agent 服務。--agent
的 port 可以自定義,--meta
的 ip、port 需要與叢集 meta 保持一致。
可以在 nebula-console 中執行下面的命令檢視 agent 的狀態:
(root@nebula) [basketballplayer]> SHOW HOSTS AGENT
+-----------------+------+----------+---------+--------------+---------+
| Host | Port | Status | Role | Git Info Sha | Version |
+-----------------+------+----------+---------+--------------+---------+
| "192.168.8.144" | 8888 | "ONLINE" | "AGENT" | "96646b8" | |
+-----------------+------+----------+---------+--------------+---------+
...
當叢集中所有 agent 都 online 後,我們可以執行備份恢復命令:
使用 BR 備份資料
BR 目前支援備份 NebulaGraph 叢集的資料到本地或者 S3 上。為了方便練習,我們採用本地備份的方式,在生產環境,我們推薦使用者將資料備份到 S3 上。備份命令如下:
./br-3.3.0-linux-amd64 backup full --meta "192.168.8.144:9559" --storage "local:///home/nebula/backup"
該命令會對 Meta 服務的地址為 192.168.8.144:9559
的 NebulaGraph 叢集進行全量備份,並將備份檔案儲存到本地的 /home/nebula/backup
目錄下。
檢視備份資訊
備份完成後,我們可以透過下面的命令來檢視備份資訊:
./br-3.3.0-linux-amd64 show --storage "local:///home/vesoft/backup"
+----------------------------+---------------------+------------------+-------------+------------+
| NAME | CREATE TIME | SPACES | FULL BACKUP | ALL SPACES |
+----------------------------+---------------------+------------------+-------------+------------+
| BACKUP_2023_01_18_09_42_10 | 2023-01-18 17:42:10 | basketballplayer | true | true |
+----------------------------+---------------------+------------------+-------------+------------+
使用 BR 恢復資料
當叢集資料出現問題時,我們可以使用 BR 基於之前備份的資料進行恢復。為了模擬資料丟失場景,可以執行下面的命令將 basketballplayer space 的資料清除。
(root@nebula) [basketballplayer]> DROP SPACE basketballplayer;
Execution succeeded (time spent 2253/3002 us)
...
將 space 刪除後,執行下面命令進行資料恢復。
./br-3.3.0-linux-amd64 restore full --meta "192.168.8.144:9559" --storage "local:///home/vesoft/backup" --name BACKUP_2023_01_18_09_42_10
該命令會讓 BR 從 /home/vesoft/backup/BACKUP_2023_01_18_09_42_10
讀取備份資料,對 Meta 服務地址為 192.168.8.144:9559
的 NebulaGraph 叢集進行恢復。
恢復完成後,我們可以透過 nebula-console 執行以下命令,檢視恢復後的叢集資料。理論上,此時的資料應該與備份之前的資料保持一致。
(root@nebula) [(none)]> use basketballplayer Execution succeeded (time spent 1130/1823 us)
...
(root@nebula) [basketballplayer]> submit job stats
+------------+
| New Job Id |
+------------+
| 3 |
+------------+
...
(root@nebula) [basketballplayer]> show stats
+---------+------------+-------+
| Type | Name | Count |
+---------+------------+-------+
| "Tag" | "player" | 51 |
| "Tag" | "team" | 30 |
| "Edge" | "follow" | 81 |
| "Edge" | "serve" | 152 |
| "Space" | "vertices" | 81 |
| "Space" | "edges" | 233 |
+---------+------------+-------+
...
清理備份資料
在恢復完成後,我們可以執行下面的命令清理本次的備份資料。
./br-3.3.0-linux-amd64 cleanup --meta "192.168.8.144:9559" --storage "local:///home/vesoft/backup" --name BACKUP_2023_01_18_09_42_10
以上為本次 NebulaGraph 備份工具 nebula-br 的介紹。
謝謝你讀完本文 (///▽///)
要來近距離體驗一把 nebula-br 特性麼?NebulaGraph 阿里雲端計算巢現 30 天免費使用中,點選連結來用用圖資料庫 NebulaGraph 和圖資料備份 BR 吧~
想看 nebula-br 原始碼的小夥伴可以前往 GitHub 閱讀、使用、(^з^)-☆ star 它 -> GitHub;和其他的 NebulaGraph 使用者一起交流圖資料庫技術和應用技能,留下「你的名片」一起玩耍呢~