天天看點

手把手教你搭建Redis叢集第二篇(哨兵模式)1.手把手教你搭建Redis叢集第二篇(哨兵模式)如有錯誤之處,請及時之處,謝謝!

1.手把手教你搭建Redis叢集第二篇(哨兵模式)

在上篇文章中已經教大家搭建了Redis叢集之主從複制模式(安裝Redis的準備工作請大家檢視我寫的這篇點選跳轉)

1.1 哨兵模式(sentinel)

1.1.1 什麼是哨兵?

哨兵的作用就是對Redis的運作情況進行監控,他是一個獨立的程序。主要功能有以下兩點:

1、監控主資料庫和從資料庫運作是否正常

2、主資料庫出現故障後自動将從資料庫轉化成為主資料庫

1.1.2 配置哨兵模式

手把手教你搭建Redis叢集第二篇(哨兵模式)1.手把手教你搭建Redis叢集第二篇(哨兵模式)如有錯誤之處,請及時之處,謝謝!

修改sentinel.conf

vim sentinel.conf
           
手把手教你搭建Redis叢集第二篇(哨兵模式)1.手把手教你搭建Redis叢集第二篇(哨兵模式)如有錯誤之處,請及時之處,謝謝!

配置哨兵資訊:

sentinel monitor MekingMaster 127.0.0.1 7001 1
           

說明:

MekingMaster:監控主資料的名稱,自定義即可,可以使用大小寫字母和“.-_”符号

127.0.0.1:監控的主資料庫的IP

7001:監控的主資料庫的端口

1:最低通過票數

啟動哨兵程序:

redis-sentinel ./sentinel.conf
           
手把手教你搭建Redis叢集第二篇(哨兵模式)1.手把手教你搭建Redis叢集第二篇(哨兵模式)如有錯誤之處,請及時之處,謝謝!

由上圖可以看到:

1、 哨兵已經啟動,它的id 0b69761e344961c1c803c8778460b7222689a709

2、 為master資料庫添加了一個監控

3、 發現了2個slave(由此可以看出,哨兵無需配置slave,隻需要指定master,哨兵會自動發現slave)

手把手教你搭建Redis叢集第二篇(哨兵模式)1.手把手教你搭建Redis叢集第二篇(哨兵模式)如有錯誤之處,請及時之處,謝謝!

1.1.3 測試從資料庫當機

kill -9 17640
           
手把手教你搭建Redis叢集第二篇(哨兵模式)1.手把手教你搭建Redis叢集第二篇(哨兵模式)如有錯誤之處,請及時之處,謝謝!

在等待30秒之後哨兵已經監控到了slave當機了,接下來我們重新啟動7002這個從資料庫,看看是否會重新加入叢集

重新開機7002端口redis從資料庫

./redis-server /usr/local/src/cluster-7002/redis.conf
           
手把手教你搭建Redis叢集第二篇(哨兵模式)1.手把手教你搭建Redis叢集第二篇(哨兵模式)如有錯誤之處,請及時之處,謝謝!

可以看出7002已經重新加入到叢集到了

-sdown:說明是恢複服務

1.1.4 故障轉移

一次故障轉移操作由以下步驟組成:

1、發現主伺服器已經進入客觀下線狀态。

2、對我們的目前紀元進行自增(詳情請參考 Raft leader election ), 并嘗試在這個紀元中當選。

3、如果當選失敗, 那麼在設定的故障遷移逾時時間的兩倍之後, 重新嘗試當選。 如果當選成功, 那麼執行以下步驟。

4、選出一個從伺服器,并将它更新為主伺服器。

5、向被選中的從伺服器發送 SLAVEOF NO ONE 指令,讓它轉變為主伺服器。

6、通過釋出與訂閱功能, 将更新後的配置傳播給所有其他 Sentinel , 其他 Sentinel 對它們自己的配置進行更新。

7、向已下線主伺服器的從伺服器發送 SLAVEOF 指令, 讓它們去複制新的主伺服器。

8、當所有從伺服器都已經開始複制新的主伺服器時, 領頭 Sentinel 終止這次故障遷移操作。

1.1.5 主庫當機

手把手教你搭建Redis叢集第二篇(哨兵模式)1.手把手教你搭建Redis叢集第二篇(哨兵模式)如有錯誤之處,請及時之處,謝謝!

接下來我将詳細解釋一下這寫個日志資訊

17086:X 16 Sep 11:01:44.306 # +sdown master MekingMaster 127.0.0.1 7001

說明主伺服器已經當機了

17086:X 16 Sep 11:01:44.306 # +odown master MekingMaster 127.0.0.1 7001 #quorum 1/1

17086:X 16 Sep 11:01:44.306 # +new-epoch 1

17086:X 16 Sep 11:01:44.306 # +try-failover master MekingMaster 127.0.0.1 7001 開始恢複故障

17086:X 16 Sep 11:01:44.322 # +vote-for-leader 1a4f8224fcae8d7bbdaee1af77251e259e2af9021投票選舉哨兵Leader,因為就一個哨兵是以選擇自己當leader

17086:X 16 Sep 11:01:44.322 # +elected-leader master MekingMaster 127.0.0.1 7001

17086:X 16 Sep 11:01:44.322 # +failover-state-select-slave master MekingMaster 127.0.0.1 7001

17086:X 16 Sep 11:01:44.379 # +selected-slave slave 127.0.0.1:7002 127.0.0.1 7002 @ MekingMaster 127.0.0.1 7001 選擇7002當master

17086:X 16 Sep 11:01:44.379 * +failover-state-send-slaveof-noone slave 127.0.0.1:7002 127.0.0.1 7002 @ MekingMaster 127.0.0.1 7001發送slaveof no one指令

17086:X 16 Sep 11:01:44.445 * +failover-state-wait-promotion slave 127.0.0.1:7002 127.0.0.1 7002 @ MekingMaster 127.0.0.1 7001

等待更新master

17086:X 16 Sep 11:01:45.419 # +promoted-slave slave 127.0.0.1:7002 127.0.0.1 7002 @ MekingMaster 127.0.0.1 7001 更新7002為Master

17086:X 16 Sep 11:01:45.419 # +failover-state-reconf-slaves master MekingMaster 127.0.0.1 7001

17086:X 16 Sep 11:01:45.474 * +slave-reconf-sent slave 127.0.0.1:7003 127.0.0.1 7003 @ MekingMaster 127.0.0.1 7001

17086:X 16 Sep 11:01:46.454 * +slave-reconf-inprog slave 127.0.0.1:7003 127.0.0.1 7003 @ MekingMaster 127.0.0.1 7001

17086:X 16 Sep 11:01:46.454 * +slave-reconf-done slave 127.0.0.1:7003 127.0.0.1 7003 @ MekingMaster 127.0.0.1 7001

17086:X 16 Sep 11:01:46.507 # +failover-end master MekingMaster 127.0.0.1 7001故障恢複完成

17086:X 16 Sep 11:01:46.507 # +switch-master MekingMaster 127.0.0.1 7001 127.0.0.1 7002主資料庫從7001變成7002

17086:X 16 Sep 11:01:46.507 * +slave slave 127.0.0.1:7003 127.0.0.1 7003 @ MekingMaster 127.0.0.1 7002 添加7003為7002的從庫

17086:X 16 Sep 11:01:46.507 * +slave slave 127.0.0.1:7001 127.0.0.1 7001 @ MekingMaster 127.0.0.1 7002添加7001為7002的從庫

17086:X 16 Sep 11:02:16.545 # +sdown slave 127.0.0.1:7001 127.0.0.1 7001 @ MekingMaster 127.0.0.1 7002發現7001已經當機,等待7001的恢複

手把手教你搭建Redis叢集第二篇(哨兵模式)1.手把手教你搭建Redis叢集第二篇(哨兵模式)如有錯誤之處,請及時之處,謝謝!

可以從上圖中看出7002已經為Master,并且隻擁有7003一個從資料庫,接下來我們恢複7001資料庫

./redis-server /usr/local/src/cluster-7001/redis.conf
           
手把手教你搭建Redis叢集第二篇(哨兵模式)1.手把手教你搭建Redis叢集第二篇(哨兵模式)如有錯誤之處,請及時之處,謝謝!

17086:X 16 Sep 11:22:20.469 # -sdown slave 127.0.0.1:7001 127.0.0.1 7001 @ MekingMaster 127.0.0.1 7002 7001已經恢複服務

17086:X 16 Sep 11:22:30.430 * +convert-to-slave slave 127.0.0.1:7001 127.0.0.1 7001 @ MekingMaster 127.0.0.1 70027001成為7002的從資料庫

手把手教你搭建Redis叢集第二篇(哨兵模式)1.手把手教你搭建Redis叢集第二篇(哨兵模式)如有錯誤之處,請及時之處,謝謝!

1.1.6 配置多個哨兵

大家可以想一下其實配置一個哨兵還是不符合高可用的特點的,因為一個哨兵也有存在宕掉的可能性,如過那個宕掉了,那麼哨兵模式便将不複存在了,是以接下來我們要開始配置多個哨兵。

先修改sentinel.conf 配置成預設背景啟動

daemonize yes
           
手把手教你搭建Redis叢集第二篇(哨兵模式)1.手把手教你搭建Redis叢集第二篇(哨兵模式)如有錯誤之處,請及時之處,謝謝!

然後分别将sentinel.conf 檔案複制到三個檔案夾中

cp sentinel.conf /usr/local/src/cluster-7001/
cp sentinel.conf /usr/local/src/cluster-7002/
cp sentinel.conf /usr/local/src/cluster-7003/
           

然後修改另外兩個哨兵的端口号(由于我是在一台機器上做的操作是以必須修改端口号這個和我修改Redis端口号是一個意思)

手把手教你搭建Redis叢集第二篇(哨兵模式)1.手把手教你搭建Redis叢集第二篇(哨兵模式)如有錯誤之處,請及時之處,謝謝!

三個哨兵的端口分别為:26379、26380、26381

然後啟動三個哨兵

redis-sentinel /usr/local/src/cluster-7001/sentinel.conf
redis-sentinel /usr/local/src/cluster-7002/sentinel.conf
redis-sentinel /usr/local/src/cluster-7003/sentinel.conf
           
手把手教你搭建Redis叢集第二篇(哨兵模式)1.手把手教你搭建Redis叢集第二篇(哨兵模式)如有錯誤之處,請及時之處,謝謝!

測試關掉7002主資料庫

手把手教你搭建Redis叢集第二篇(哨兵模式)1.手把手教你搭建Redis叢集第二篇(哨兵模式)如有錯誤之處,請及時之處,謝謝!
手把手教你搭建Redis叢集第二篇(哨兵模式)1.手把手教你搭建Redis叢集第二篇(哨兵模式)如有錯誤之處,請及時之處,謝謝!

後續發現哨兵開始進行故障轉移,将7003設定為主資料庫了。

好了,Redis叢集之哨兵模式在這裡就介紹完畢了,接下來我會向大家介紹Redis叢集之分片叢集模式,也是目前最高效、最穩定的一種模式。

如有錯誤之處,請及時之處,謝謝!

繼續閱讀