nebula-br local-store 模式,快速搭建主備叢集實踐
![](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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL叢集搭建(1)-主備搭建MySql
- Docker Swarm 叢集搭建實踐DockerSwarm
- influxDB叢集模式實踐UX模式
- Docker環境搭建redis叢集(主從模式)DockerRedis模式
- Redis叢集環境搭建實踐Redis
- Redis系列:搭建Redis叢集(叢集模式)Redis模式
- 達夢資料庫主備實時叢集搭建和維護資料庫
- 快速搭建Jenkins叢集Jenkins
- 【GP】快速搭建gp叢集
- 成功搭建oracle 11gR2 asm 主備叢集OracleASM
- 基於Dokcer搭建Redis叢集(主從叢集)Redis
- linux系統——Redis叢集搭建(主從+哨兵模式)LinuxRedis模式
- rocketMq叢集master模式搭建MQAST模式
- zookeeper偽叢集模式搭建模式
- Redis主從同步叢集搭建Redis主從同步
- 用 Docker 快速搭建 Kafka 叢集DockerKafka
- 搭建Redis“主-從-從”模式叢集並使用 RedisTemplate 實現讀寫分離Redis模式
- hadoop叢集搭建及程式設計實踐Hadoop程式設計
- Redis叢集搭建 三主三從Redis
- Docker Swarms 跨主機叢集搭建DockerSwarm
- RocketMQ雙主雙從叢集搭建MQ
- Redis叢集搭建(三主三從)Redis
- linux shell快速搭建NSQ叢集Linux
- Hadoop-2.7.4 叢集快速搭建Hadoop
- MySQL MGR 叢集搭建(單主模式)MySql模式
- Redis搭建主從複製、哨兵叢集Redis
- Docker快速搭建Kafka 1.x叢集DockerKafka
- Spring Boot(十三):整合Redis哨兵,叢集模式實踐Spring BootRedis模式
- 5分鐘實現用docker搭建Redis叢集模式和哨兵模式DockerRedis模式
- Spark3.0.1各種叢集模式搭建Spark模式
- Linux_搭建Redis叢集哨兵模式LinuxRedis模式
- RocketMQ4.7.1雙主雙從叢集搭建MQ
- 搭建zookeeper叢集(偽叢集)
- nginx主主叢集Nginx
- RabbitMQ叢集運維實踐MQ運維
- 叢集搭建
- kubernetes實踐之一:Etcd3叢集搭建
- zookeeper叢集及kafka叢集搭建Kafka