nebula-br local-store 模式,快速搭建主備叢集實踐

nebulagraph發表於2023-11-02

![](https://www-cdn.nebula-graph.com.cn/nebula-blog/nebula-br-banner.jpg)


因為線上圖資料庫目前為單叢集,資料量比較大,有以下缺點:


1. 單點風險,一旦叢集崩潰或者因為某些查詢拖垮整個叢集,就會導致所有圖操作受影響

2. 很多最佳化類但會影響讀寫的操作不好執行,比如:compact、balance leader 等;

3. 雙叢集在升級的時候也非常有優勢,完全可以做到不影響業務執行,比如先升級備叢集再升級主叢集。總之為了線上資料庫更加穩定和高可用需要搭建雙叢集。


## 選擇 BR 工具的原因


目前,我這邊瞭解到複製叢集方案有:


1. 新叢集重新寫入資料,這種情況要麼就是寫程式 scan 再匯入新叢集(太慢了),要麼就基於底表資料透過 [nebula-exchange]() 再匯入新叢集(必須得有歷史資料)

2. (不可靠)完整複製 nebula 資料複製到新叢集,參考:[【複製 data 方式匯入】](https://discuss.nebula-graph.com.cn/t/topic/11887)(不過,這個方式我在測試環境測試失敗了)

3. 透過 [nebula-br]() 備份,再還原到新叢集(本文就是基於這種方式)


因為我們**線上很難回溯出完整的歷史資料,無法基於底表重新構建**,此外 scan 方式又太慢了,所以選擇了 BR 的方式。


**注意**:


* 本文基於測試環境搭建驗證,資料量比較小,線上還未做驗證,僅供參考。此外附上官方的[簡單 BR 實踐](https://discuss.nebula-graph.com.cn/t/topic/12569)。

* (**很重要**)使用 BR 工具備份一定要先去了解其限制,[BR 文件]()


## 環境介紹


* nebula 版本:3.6.0

* nebula 安裝路徑:`/usr/local/nebula`

* nebula-metad 服務埠:9559 (可以透過安裝目錄下的 `scripts/nebula-metad status` 檢視)

* backup 目錄:`/usr/local/nebula_backup`


備份方式:full(全圖備份,也可以指定部分 space)


* 3 臺老叢集機器(已經有歷史資料的):192.168.1.2、192.168.1.3、192.168.1.4

* 3 臺新叢集機器(沒有資料,待從老叢集複製資料):192.168.2.2、192.168.2.3、192.168.2.4


備份前新叢集 show hosts 情況:


![](https://www-cdn.nebula-graph.com.cn/nebula-blog/nebula-br-practice-360/new-cluster.png)


備份前老叢集 show hosts 情況:


![](https://www-cdn.nebula-graph.com.cn/nebula-blog/nebula-br-practice-360/old-cluster.png)


## 大體步驟


1. 老叢集安裝 agent(每臺機器都要安裝)和 br(選擇任何其中一臺機器安裝)工具;

2. 新叢集安裝 agent(每臺機器都要安裝);

3. 在老叢集安裝 br 的機器上,利用 br 工具生成備份檔案,備份 meta 執行老叢集的 meta 地址;

4. 複製 meta 檔案,老叢集中只有一臺機器的備份目錄有 meta,需要將 meta 複製到老叢集其他機器;

5. 在新叢集機器建立和老叢集一樣的備份目錄,比如:老叢集備份目錄為 `/usr/local/nebula_bak/BACKUP_2023_09_14_13_57_33`,新叢集機器需要建立相同的目錄:`/usr/local/nebula_bak/BACKUP_2023_09_14_13_57_33`;

6. 複製老叢集備份檔案到新叢集中,這裡需要注意因為老叢集每臺機器都有自己的備份檔案,這裡需要將所有的備份檔案複製到新叢集中整合到一起,因為每臺機器的 data 下的目錄名稱都是以 `IP + PORT` 的形式,所以不會有重複;

7. 在老叢集安裝 br 的機器上,利用 br 工具恢復備份檔案,恢復時 meta 指向新機器 meta 地址;


## 詳細步驟


在老叢集所有機器安裝 agent,安裝方法參考:[angent 安裝介紹](),以當前示例為例,下載 nebula-agent 之後存放在 `/usr/local/nebula/bin` 目錄下, 使用 chmod +x nebula-agent 賦予可執行許可權:


192.168.1.2


```

nohup ./nebula-agent -agent="192.168.1.2:9999" -debug -meta="192.168.1.2:9559" > agent.log 2>&1 &

```


192.168.1.3


```

nohup ./nebula-agent -agent="192.168.1.3:9999" -debug -meta="192.168.1.3:9559"  > agent.log 2>&1 &

```


192.168.1.4


```

nohup ./nebula-agent -agent="192.168.1.4:9999" -debug -meta="192.168.1.4:9559"  > agent.log 2>&1 &

```


下載 br 工具到 nebula 的 bin 目錄下,並命名為 nebula-br,並使用 chmod 命令賦予可執行許可權。


此時老叢集機器拓撲圖:


![](https://www-cdn.nebula-graph.com.cn/nebula-blog/nebula-br-practice-360/old-machine-topology.png)


(老叢集)選擇安裝 br 工具的 192.168.1.4 機器執行如下命令進行備份:


```

./nebula-br backup full --meta="192.168.1.4:9559" --storage="local:///usr/local/nebula_backup"

```


(老叢集)備份後每臺機器的備份目錄詳情如圖:


![](https://www-cdn.nebula-graph.com.cn/nebula-blog/nebula-br-practice-360/old-cluster-inventory.png)


(老叢集)複製 meta 到其他機器的備份目錄下:


這裡是從 192.169.1.2(只有這臺機器生成了 meta,這玩意只有在 meta 的 leader 節點生成)機器複製到 192.168.1.3 和 192.168.1.4 機器目錄下:


![](https://www-cdn.nebula-graph.com.cn/nebula-blog/nebula-br-practice-360/new-cluster-inventory.png)


新叢集安裝 agent:


192.168.2.2


```

nohup ./nebula-agent -agent="192.168.2.2:9999" -debug -meta="192.168.2.2:9559" > agent.log 2>&1 &

```


192.168.2.3


```

nohup ./nebula-agent -agent="192.168.2.3:9999" -debug -meta="192.168.2.3:9559"  > agent.log 2>&1 &

```


192.168.2.4


```

nohup ./nebula-agent -agent="192.168.2.4:9999" -debug -meta="192.168.2.4:9559"  > agent.log 2>&1 &

```


新叢集服務拓撲圖:


![](https://www-cdn.nebula-graph.com.cn/nebula-blog/nebula-br-practice-360/new-machine-topology.png)


複製老叢集的備份檔案到新叢集機器下,完成後的拓撲圖:


從老叢集機器 `/usr/local/nebula_backup` 複製資料到新叢集機器 `/usr/local/nebula_backup` 目錄下


![](https://www-cdn.nebula-graph.com.cn/nebula-blog/nebula-br-practice-360/final-cluster-inventory.png)


(老叢集) 選擇安裝 br 工具的 192.168.1.4 機器執行如下命令進行還原到新叢集,這裡的 meta 指向新叢集機器其中一臺 meta 地址,storage 地址為上一步新叢集建立的備份地址:


```

./nebula-br restore full --meta="192.168.2.4:9559" --storage="local:///usr/local/nebula_backup" --name="BACKUP_2023_09_14_13_57_33"

```

觀察日誌,不報錯的情況下完成了從老叢集機器還原到了新叢集,可使用 nebula-console 連線新叢集檢視 space 情況。


新叢集 show hosts 情況:


![](https://www-cdn.nebula-graph.com.cn/nebula-blog/nebula-br-practice-360/cluster-latest-status.png)


## 小結


官方其實不推薦 local 模式去做備份還原,操作太過複雜,很容易出錯,建議使用 S3 或者 NTF 進行掛載,這樣就沒必要做老叢集複製到新叢集的工作。


> 本文正在參加 NebulaGraph 技術社群年度徵文活動,徵文詳情:[https://discuss.nebula-graph.com.cn/t/topic/13970](https://discuss.nebula-graph.com.cn/t/topic/13970)


> 如果你覺得本文對你有所啟發,記得給我點個 ❤️ ,謝謝你的鼓勵


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952037/viewspace-2992633/,如需轉載,請註明出處,否則將追究法律責任。

相關文章