redis sentinel集群的搭建


背景說明:

 

這里采用1主2從的redis集群,3個sentinel搭建高可用redis集群。

 

一,關於搭建redis-sentinel高可用之前,我們必須要了解redis主從搭建redis-sentinel的基礎。

 

redis-sentinel功能:

  • 監控:哨兵不斷的檢查master和slave是否正常的運行。
  • 通知:當監控的某台Redis實例發生問題時,可以通過API通知系統管理員和其他的應用程序。
  • 自動故障轉移:如果一個master不正常運行了,哨兵可以啟動一個故障轉移進程,將一個slave升級成為master,其他的slave被重新配置使用新的master,並且應用程序使用Redis服務端通知的新地址。
  • 配置提供者:哨兵作為Redis客戶端發現的權威來源:客戶端連接到哨兵請求當前可靠的master的地址。如果發生故障,哨兵將報告新地址。

 

二, redis主從安裝

詳情見

https://www.cnblogs.com/lin1/p/10403333.html

 

三,安裝redis-sentinel , 我這邊3個節點都是在一台服務器上。

cd /usr/local/src

wget http://download.redis.io/releases/redis-3.0.7.tar.gz

tar -zxvf redis-3.0.7.tar.gz

cd redis-3.0.7

make 

make PREFIX=/usr/local/redis-3.0.7 install


ln -s /usr/local/redis-3.0.7 /usr/local/redis



mkdir -p /usr/local/redis/conf

cp sentinel.conf /usr/local/redis/conf/sentinel-26379.conf  (復制源碼中的哨兵配置文件)

mkdir -p /usr/local/redis/logs

vim /usr/local/redis/conf/sentinel-26379.conf ,改成如下: 10.211.55.7是redis的主,mymaster是隨意取的名字

port 26379

dir "/tmp"

logfile "/usr/local/redis/logs/sentinel-26379.log"

daemonize yes

sentinel monitor mymaster  10.211.55.7  6379  2

sentinel auth-pass mymaster linlin

sentinel down-after-milliseconds mymaster  15000

sentinel failover-timeout mymaster 120000

sentinel parallel-syncs mymaster 1

#發生切換之后執行的一個自定義腳本:如發郵件、vip切換等
#sentinel notification-script <master-name> <script-path>

  

vim /usr/local/redis/conf/sentinel-26380.conf

 

port 26380

dir "/tmp"

logfile "/usr/local/redis/logs/sentinel-26380.log"

daemonize yes

sentinel monitor mymaster 10.211.55.7 6379 2

sentinel down-after-milliseconds mymaster 15000

sentinel failover-timeout mymaster 120000

sentinel auth-pass mymaster linlin

sentinel config-epoch mymaster 0

#發生切換之后執行的一個自定義腳本:如發郵件、vip切換等
#sentinel notification-script <master-name> <script-path>

  

vim  /usr/local/redis/conf/sentinel-26381.conf

port 26381

dir "/tmp"

logfile "/usr/local/redis/logs/sentinel-26381.log"

daemonize yes

sentinel monitor mymaster 10.211.55.7 6379 2

sentinel down-after-milliseconds mymaster 15000

sentinel failover-timeout mymaster 120000

sentinel auth-pass mymaster linlin

sentinel config-epoch mymaster 0

#發生切換之后執行的一個自定義腳本:如發郵件、vip切換等
#sentinel notification-script <master-name> <script-path>

  

 三,啟動redis-sentinel

cd /usr/local/redis/bin

 

 ./redis-sentinel  ../conf/sentinel-26379.conf 

./redis-sentinel  ../conf/sentinel-26380.conf 

./redis-sentinel  ../conf/sentinel-26381.conf 

 

啟動之后 sentinel節點的配置文件,會默認生成部分配置段,該配置段其實就是標注從節點和master節點已經sentinel節點的。

當然,如果發生故障轉移,redis中的配置也會發生變化。

 

 

 

四,查看日志,簡單分析

 

sentinel-26379的日志,其他節點類似,這也是我們為什么沒在redis-sentinel節點中配置從節點和其他sentinel節點的原因。他們會通過消息訂閱進行數據交換。

 

 

五,模擬故障,查看故障是否轉移

 

master端自動down掉,為此,這邊直接使用kill命令演示。

 

 

master端:已經kill掉master端進程

 

查看日志:

 

master(6379)端日志: 無日志生成

 

slalve1 (6380)端日志:

丟失連接,放棄原先儲存的master信息,並嘗試繼續連接,但是一直被拒絕。拒絕的時間31s,進行故障轉移的時間為47s,故障轉移完成時間為48s。(為啥這么快,其實跟我redis沒有數據有很大關系 哈哈)

 

 

 

slave2 (6381)端日志:

 

 

 

 

 

 sentinel-26379端日志:

 

 

 

 

 

sentinel-26380端日志:

 

 

 

sentinel-26381端日志:

 

 

 

 

從上述日志可以發現,故障已經轉移,10.211.55.7 6381已經成為新的master,而原先的6379已經被下線了,但是仍然被關注中。

登陸最新的master端查看:

 

 上述,就是故障轉移成功了。接下來我們啟動最早的master,查看是否會重新加入到redis集群中。

 

如下,可以發現原先的master,已經成為slave了。

 

 

 

以上,就是redis sentinel集群搭建的過程。測試過,如果一個sentinel掛掉,自動轉移還是可以的哦。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM