1. 程式人生 > >Windows平臺下的Redis-Sentinel叢集配置

Windows平臺下的Redis-Sentinel叢集配置

一、環境介紹

Microsoft Windows 10 企業版

Redis-x64-3.2.100

jedis 2.9.0

Sentinel是一個管理多個redis例項的工具,它可以實現對redis的監控、通知、自動故障轉移。sentinel不斷的檢測redis例項是否可以正常工作,通過API向其他程式報告redis的狀態,如果redis master不能工作,則會自動啟動故障轉移程序,將其中的一個slave提升為master,其他的slave重新設定新的master例項。也就是說,它提供了:

監控(Monitoring): Sentinel 會不斷地檢查你的主例項和從例項是否正常。

通知(Notification): 當被監控的某個 Redis 例項出現問題時, Sentinel 程序可以通過 API 向管理員或者其他應用程式傳送通知。

自動故障遷移(Automatic failover): 當一個主redis例項失效時, Sentinel 會開始記性一次failover, 它會將失效主例項的其中一個從例項升級為新的主例項, 並讓失效主例項的其他從例項改為複製新的主例項; 而當客戶端試圖連線失效的主例項時, 叢集也會向客戶端返回新主例項的地址, 使得叢集可以使用新主例項代替失效例項。

Redis Sentinel自身也是一個分散式系統, 你可以在一個架構中執行多個 Sentinel 程序, 這些程序使用流言協議(gossip protocols)來接收關於主Redis例項是否失效的資訊, 然後使用投票協議來決定是否執行自動failover,以及評選出從Redis例項作為新的主Redis例項。

二、叢集配置

 (1)將下載好的Redis-x64-3.2.100解壓到指定目錄當中,得到以下檔案列表

解壓後文件

注:在真實的環境下,複製多份,在不同的機器下進行相應的配置。當前演示,建立不同的目錄進行區分。

(2)建立以下目錄:

master     主伺服器,用於寫操作。

slave       從伺服器,用於讀操作。

sentinel    管理多個redis例項的工具,它可以實現對redis的監控、通知、自動故障轉移

(3)配置master、slave、sentinel

1.將目錄中的redis.windows.conf複製一份到master和slave中。

2.maste目錄中的redis6379.conf配置如下

#這裡需要繫結一下機器IP地址,切勿使用預設地址127.0.0.1,最後說明原因。

bind 192.168.31.196 

3.slave中的redis6380.conf配置如下

bind 192.168.31.196

port 6380

# 這裡配置master的地址和埠號

slaveof 192.168.31.196 6379

#如果master有密碼,配置如下

masterauth xxx

3.配置sentinel例項

建立sentinel26379.conf檔案,複製以下內容

bind 192.168.31.196 

port 26379

dir sentinel

sentinel monitor mymaster 192.168.31.196 6379 1

sentinel down-after-milliseconds mymaster 60000

sentinel failover-timeout mymaster 180000

sentinel parallel-syncs mymaster 1

引數的相關解釋請移步到:https://redis.io/topics/sentinel

三、啟動Redis服務

開啟windows的CMD命令視窗,在命令視窗下分別啟動master、slave、sentinel

啟動Master

D:\Redis>redis-server.exe master/master6379.conf

master啟動

啟動Slave

D:\Redis>redis-server.exe slave/slave6380.conf

slave啟動

注:出現上述資訊,則代表主從複製已經配好。

啟動Sentinel

D:\Redis>redis-server.exe sentinel/sentinel26379.conf --sentinel

#有的版本中會自帶redis-sentinel客戶端,沒有則採用以上方式啟動,在https://redis.io/topics/sentinel也有相關說明。

sentinel啟動

注:出現上述資訊,配置成功;

四、使用Java客戶端進行驗證

(1)在Java專案中,引入jedis 2.9.0包到專案中,編寫以下程式碼(只能貼圖片了,在當前編輯器中,只能用圖片代替,抱歉!!!)

叢集驗證程式碼

(2)執行上述程式碼,出現圖片所示,sentinel叢集配置成功

執行結果

五、常見問題

(1)為什麼不能在配置檔案中使用127.0.0.1?

   解答:jedis在進行master伺服器查詢時,會將127.0.0.1轉換為機器當前網絡卡物理IP。

JedisSentinelPool

HostAndPort

(2)在一些其它的文件中,sentinel中沒有配置bind?

解答:在當前這個版本中,如果不配置會提示一個繫結不到機器,為了統一,請繫結網絡卡的IP。


最後說明:Linux下是否可以這樣配置,還沒有進行實際操作過,如果你有興趣,可以嘗試在Linux下進行操作。


六、參考資料

https://redis.io/topics/sentinel

http://www.cnblogs.com/LiZhiW/p/4851631.html