redis sentinel集羣的搭建

背景說明:html

 

這裏採用1主2從的redis集羣,3個sentinel搭建高可用redis集羣。redis

 

一,關於搭建redis-sentinel高可用以前,咱們必需要了解redis主從搭建redis-sentinel的基礎。vim

 

redis-sentinel功能:服務器

  • 監控:哨兵不斷的檢查master和slave是否正常的運行。
  • 通知:當監控的某臺Redis實例發生問題時,能夠經過API通知系統管理員和其餘的應用程序。
  • 自動故障轉移:若是一個master不正常運行了,哨兵能夠啓動一個故障轉移進程,將一個slave升級成爲master,其餘的slave被從新配置使用新的master,而且應用程序使用Redis服務端通知的新地址。
  • 配置提供者:哨兵做爲Redis客戶端發現的權威來源:客戶端鏈接到哨兵請求當前可靠的master的地址。若是發生故障,哨兵將報告新地址。

 

二, redis主從安裝測試

詳情見3d

http://www.javashuo.com/article/p-ouwmdztt-cs.html日誌

 

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

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是隨意取的名字blog

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掛掉,自動轉移仍是能夠的哦。

相關文章
相關標籤/搜索