Redis 主庫宕機如何快速恢復?面試必問!

目錄

  • 什麼是哨兵
  • 原理
  • 環境
  • 設置哨兵
  • 從宕機及恢復
  • 主宕機及恢復
  • 配置多個哨兵

1、什麼是哨兵

哨兵是對Redis的系統的運行情況的監控,它是一個獨立進程,功能有二個:

  • 監控主數據庫和從數據庫是否運行正常;
  • 主數據出現故障後自動將從數據庫轉化爲主數據庫;

2、原理

單個哨兵的架構:

多個哨兵的架構:

多個哨兵,不僅同時監控主從數據庫,而且哨兵之間互爲監控。

多個哨兵,防止哨兵單點故障。

3、環境

當前處於一主多從的環境中:

4、設置哨兵

啓動哨兵進程首先需要創建哨兵配置文件:

vim sentinel.conf

輸入內容:

sentinel monitor taotaoMaster 127.0.0.1 6379 1

說明:

  • taotaoMaster:監控主數據的名稱,自定義即可,可以使用大小寫字母和“.-_”符號
  • 127.0.0.1:監控的主數據庫的IP
  • 6379:監控的主數據庫的端口
  • 1:最低通過票數

啓動哨兵進程:

redis-sentinel ./sentinel.conf

由上圖可以看到:

  • 哨兵已經啓動,它的id爲9059917216012421e8e89a4aa02f15b75346d2b7
  • 爲master數據庫添加了一個監控
  • 發現了2個slave(由此可以看出,哨兵無需配置slave,只需要指定master,哨兵會自動發現slave)

5、從宕機及恢復

kill掉2826進程後,30秒後哨兵的控制檯輸出:

2989:X 05 Jun 20:09:33.509 # +sdown slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379

說明已經監控到slave宕機了,那麼,如果我們將3380端口的redis實例啓動後,會自動加入到主從複製嗎?

2989:X 05 Jun 20:13:22.716 * +reboot slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379

2989:X 05 Jun 20:13:22.788 # -sdown slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379

可以看出,slave從新加入到了主從複製中。-sdown:說明是恢復服務。

6、主宕機及恢復

哨兵控制檯打印出如下信息:

2989:X 05 Jun 20:16:50.300 # +sdown master taotaoMaster 127.0.0.1 6379  說明master服務已經宕機

2989:X 05 Jun 20:16:50.300 # +odown master taotaoMaster 127.0.0.1 6379 #quorum 1/1 

2989:X 05 Jun 20:16:50.300 # +new-epoch 1

2989:X 05 Jun 20:16:50.300 # +try-failover master taotaoMaster 127.0.0.1 6379  開始恢復故障

2989:X 05 Jun 20:16:50.304 # +vote-for-leader 9059917216012421e8e89a4aa02f15b75346d2b7 1  投票選舉哨兵leader,現在就一個哨兵所以leader就自己

2989:X 05 Jun 20:16:50.304 # +elected-leader master taotaoMaster 127.0.0.1 6379  選中leader

2989:X 05 Jun 20:16:50.304 # +failover-state-select-slave master taotaoMaster 127.0.0.1 6379 選中其中的一個slave當做master

2989:X 05 Jun 20:16:50.357 # +selected-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ taotaoMaster 127.0.0.1 6379  選中6381

2989:X 05 Jun 20:16:50.357 * +failover-state-send-slaveof-noone slave 127.0.0.1:6381 127.0.0.1 6381 @ taotaoMaster 127.0.0.1 6379  發送slaveof no one命令

2989:X 05 Jun 20:16:50.420 * +failover-state-wait-promotion slave 127.0.0.1:6381 127.0.0.1 6381 @ taotaoMaster 127.0.0.1 6379   等待升級master

2989:X 05 Jun 20:16:50.515 # +promoted-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ taotaoMaster 127.0.0.1 6379  升級6381爲master

2989:X 05 Jun 20:16:50.515 # +failover-state-reconf-slaves master taotaoMaster 127.0.0.1 6379

2989:X 05 Jun 20:16:50.566 * +slave-reconf-sent slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379

2989:X 05 Jun 20:16:51.333 * +slave-reconf-inprog slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379

2989:X 05 Jun 20:16:52.382 * +slave-reconf-done slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6379

2989:X 05 Jun 20:16:52.438 # +failover-end master taotaoMaster 127.0.0.1 6379 故障恢復完成

2989:X 05 Jun 20:16:52.438 # +switch-master taotaoMaster 127.0.0.1 6379 127.0.0.1 6381  主數據庫從6379轉變爲6381

2989:X 05 Jun 20:16:52.438 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ taotaoMaster 127.0.0.1 6381  添加6380爲6381的從庫

2989:X 05 Jun 20:16:52.438 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ taotaoMaster 127.0.0.1 6381  添加6379爲6381的從庫

2989:X 05 Jun 20:17:22.463 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ taotaoMaster 127.0.0.1 6381 發現6379已經宕機,等待6379的恢復

可以看出,目前,6381位master,擁有一個slave爲6380.

接下來,我們恢復6379查看狀態:

2989:X 05 Jun 20:35:32.172 # -sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ taotaoMaster 127.0.0.1 6381  6379已經恢復服務

2989:X 05 Jun 20:35:42.137 * +convert-to-slave slave 127.0.0.1:6379 127.0.0.1 6379 @ taotaoMaster 127.0.0.1 6381  將6379設置爲6381的slave

7、配置多個哨兵

vim sentinel.conf

輸入內容:

sentinel monitor taotaoMaster1 127.0.0.1 6381 1

sentinel monitor taotaoMaster2 127.0.0.1 6381 2

原文鏈接:https://blog.csdn.net/py_tamir/article/details/82555338

版權聲明:本文爲CSDN博主「tamir_2017」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。

近期熱文推薦:

1.1,000+ 道 Java面試題及答案整理(2021最新版)

2.終於靠開源項目弄到 IntelliJ IDEA 激活碼了,真香!

3.阿里 Mock 工具正式開源,幹掉市面上所有 Mock 工具!

4.Spring Cloud 2020.0.0 正式發佈,全新顛覆性版本!

5.《Java開發手冊(嵩山版)》最新發布,速速下載!

覺得不錯,別忘了隨手點贊+轉發哦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章