天天看點

Redis哨兵5.0.3(Sentinel)模式Sentinel模式簡介測試環境介紹Sentinel部署環境流程介紹開始部署開始測試使用keepalived完成哨兵模式需要特别注意防火牆在A、B伺服器中的配置更多的指令可參考

孤傲的菜單

  • Sentinel模式簡介
  • 測試環境介紹
  • Sentinel部署環境流程介紹
  • 開始部署
      • 對A機器的操作
      • 對B機器的操作
  • 開始測試
      • 完成設想2
      • 完成設想3
  • 使用keepalived完成哨兵模式
  • 需要特别注意防火牆在A、B伺服器中的配置
  • 更多的指令可參考

Sentinel模式簡介

以下描述來自:https://www.cnblogs.com/xintiao-/p/10414742.html

Redis-Sentinel是redis官方推薦的高可用性解決方案,

當用redis作master-slave的高可用時,如果master本身當機,redis本身或者用戶端都沒有實作主從切換的功能。

而redis-sentinel就是一個獨立運作的程序,用于監控多個master-slave叢集,

自動發現master當機,進行自動切換slave > master。

sentinel主要功能如下:

  • 不時的監控redis是否良好運作,如果節點不可達就會對節點進行下線辨別
  • 如果被辨別的是主節點,sentinel就會和其他的sentinel節點“協商”,如果其他節點也人為主節點不可達,就會選舉一個sentinel節點來完成自動故障轉義
  • 在master-slave進行切換後,master_redis.conf、slave_redis.conf和sentinel.conf的内容都會發生改變,即master_redis.conf中會多一行slaveof的配置,sentinel.conf的監控目标會随之調換

測試環境介紹

測試環境為centos7.5

A機器ip:10.0.8.37

B機器ip:10.0.8.243

Redis版本:5.0.3

在這之前,我們分别在A機器和B機器上運作Redis服務,此刻他們均為master節點

Sentinel部署環境流程介紹

文字描述還可以參考:https://www.cnblogs.com/kevingrace/p/9004460.html

開始部署

如果你使用是的redis源代碼安裝形式安裝的Redis,那麼在解壓出來的目錄下,有一個名為sentinel.conf的配置檔案,該檔案就是用來配置sentinel的,拷貝一份,放到~目錄下

前提:無故障時A機器Redis充當master節點,B為slave節點(無論是使用.conf寫slave節點還是使用redis-cli配置均可)

首先做做一下我們的設想

  • 設想2:此時A機器上面的Redis挂掉了,那麼B機器此時應當切換為master節點節點
  • 設想3:過了一段時間A機器的Redis恢複了,B機器又應該變成slave節點

為了完成上面的設想,先來進行配置,然後再去測試是否成功

對A機器的操作

建立檔案夾redis_data

mkdir /home/zeng/redis_data
           

修改配置檔案sentinel.conf

daemonize yes

logfile "26379.log"

dir "/home/zeng/redis_data"

sentinel monitor mymaster 10.0.8.37 6379 2
           

redis-sentinel sentinel.conf

啟動A機器上的哨兵

檢視一下目前A機器的redis資訊

redis-cli info replication
           

可以看到如下

Redis哨兵5.0.3(Sentinel)模式Sentinel模式簡介測試環境介紹Sentinel部署環境流程介紹開始部署開始測試使用keepalived完成哨兵模式需要特别注意防火牆在A、B伺服器中的配置更多的指令可參考

對B機器的操作

建立檔案夾redis_data

mkdir /home/zeng/redis_data
           

修改配置檔案sentinel.conf

daemonize yes

logfile "26379.log"

dir "/home/zeng/redis_data"

sentinel monitor mymaster 10.0.8.37 6379 2
           

redis-sentinel sentinel.conf

啟動A機器上的哨兵

注意這裡,在A和B機器上,都是同時監聽A機器上的redis是否有響應

redis-cli info replication

檢視一下目前A機器的Redis資訊,再過個幾秒運作,發現B機器的Redis從master自動切換成了slave節點

Redis哨兵5.0.3(Sentinel)模式Sentinel模式簡介測試環境介紹Sentinel部署環境流程介紹開始部署開始測試使用keepalived完成哨兵模式需要特别注意防火牆在A、B伺服器中的配置更多的指令可參考

此時設想1已經成功

開始測試

完成設想2

執行

ps -ef|grep redis-server|grep -v grep|awk '{print $2}'|xargs sudo kill -9

指令,退出redis-server

Redis哨兵5.0.3(Sentinel)模式Sentinel模式簡介測試環境介紹Sentinel部署環境流程介紹開始部署開始測試使用keepalived完成哨兵模式需要特别注意防火牆在A、B伺服器中的配置更多的指令可參考

在B機器上用

redis-cli info replication

檢視一下目前機器的Redis資訊

Redis哨兵5.0.3(Sentinel)模式Sentinel模式簡介測試環境介紹Sentinel部署環境流程介紹開始部署開始測試使用keepalived完成哨兵模式需要特别注意防火牆在A、B伺服器中的配置更多的指令可參考

已經自動切換到了master節點

此時設想2已經成功

完成設想3

此時我們在B機器上設定一個值

Redis哨兵5.0.3(Sentinel)模式Sentinel模式簡介測試環境介紹Sentinel部署環境流程介紹開始部署開始測試使用keepalived完成哨兵模式需要特别注意防火牆在A、B伺服器中的配置更多的指令可參考

在A機器上,重新開機redis

再次檢視A機器上的Redis資訊,發現此時,A是B的slave節點,此時也能取出之前設定的值

Redis哨兵5.0.3(Sentinel)模式Sentinel模式簡介測試環境介紹Sentinel部署環境流程介紹開始部署開始測試使用keepalived完成哨兵模式需要特别注意防火牆在A、B伺服器中的配置更多的指令可參考

是以設想3,需要更改一下:

設想3:過了一段時間A機器的Redis恢複了,~~B機器又應該變成slave節點,~~A機器此時會作為B機器的備用節點存在,這樣才能使用故障時間内所存儲的資料

是以,之前的設想,變成了結論:

  • 結論1:無故障時A機器Redis充當master節點,B為slave節點
  • 結論2:此時A機器上面的Redis挂掉了,那麼B機器此時應當切換為master節點節點
  • 結論3:過了一段時間A機器的Redis恢複了,B機器又應該變成slave節點;隻有此時B機器出故障,A才又會變成master節點

有興趣的朋友可以自己動手驗證以下以上的步驟

使用keepalived完成哨兵模式

keepalived相對于使用Sentinel來說會比較麻煩,監聽的腳本需要自己來寫

具體keepalived來做哨兵的實作可以參考:https://www.cnblogs.com/binchen-china/p/5593451.html

因為連結提供gayhub位址中的腳本源碼已經找不到,是以你隻能按照blog文中的内容來複制粘了

還有其他的keepalived完成哨兵模式有:

使用Python腳本,slave一直ping Redis伺服器,如果發現ping不同master,用指令調用

redis-cli slave none

形式來是目前節點變為master節點;如果恢複過來,用指令調用

redis-cli slave ip 6379

變成slave

需要特别注意防火牆在A、B伺服器中的配置

務必互相打開6379和26379

更多的指令可參考

官網文檔位址:http://redisdoc.com/topic/sentinel.html

繼續閱讀