一、Sentinel介紹
之前騷了一波Redis的簡介及應用場景遵蚜,今天試了下他的哨兵模式帖池;
Sentinel是Redis的高可用性(HA)解決方案,由一個或多個Sentinel實例組成的Sentinel系統(tǒng)可以監(jiān)視任意多個主服務器吭净,以及這些主服務器屬下的所有從服務器睡汹,
并在被監(jiān)視的主服務器進行下線狀態(tài)時,自動將下線主服務器屬下的某個從服務器升級為新的主服務器寂殉,然后由新的主服務器代替已下線的主服務器繼續(xù)處理命令請求囚巴。
Redis提供的sentinel(哨兵)機制,通過sentinel模式啟動redis后,自動監(jiān)控master/slave的運行狀態(tài)彤叉,基本原理是:心跳機制+投票裁決
監(jiān)控(Monitoring): Sentinel 會不斷地檢查你的主服務器和從服務器是否運作正常庶柿。
提醒(Notification): 當被監(jiān)控的某個 Redis 服務器出現(xiàn)問題時, Sentinel 可以通過 API 向管理員或者其他應用程序發(fā)送通知秽浇。
自動故障遷移(Automatic failover): 當一個主服務器不能正常工作時浮庐, Sentinel 會開始一次自動故障遷移操作, 它會將失效主服務器的其中一個從服務器升級為新的主服務器兼呵,
并讓失效主服務器的其他從服務器改為復制新的主服務器兔辅; 當客戶端試圖連接失效的主服務器時, 集群也會向客戶端返回新主服務器的地址击喂, 使得集群可以使用新主服務器代替失效服務器维苔。
二、Redis Sentinel搭建
測試采用2個哨兵懂昂,1個主redis介时,2個從redis。
復制5份redis.windows.conf文件并重命名如下(開發(fā)者可根據(jù)自己的開發(fā)習慣進行重命名):
master.6379.conf 配置:
port 6379
#設置連接密碼
requirepass grs
#連接密碼
masterauth grs
slave.6380.conf 配置:
port 6380
requirepass grs
masterauth grs
dbfilename dump6380.rdb
#配置master
slaveof 127.0.0.1 6379
slave.6381.conf 配置:
port 6381
requirepass grs
masterauth grs
dbfilename dump6381.rdb
#配置master
slaveof 127.0.0.1 6379
sentinel.63791.conf 配置(將原配置文件清空后添加如下內(nèi)容)(另一個一樣凌彬,只需要修改下端口):
port 63791
#主master沸柔,2個sentinel選舉成功后才有效,這里的master-1是名稱铲敛,在整合的時候需要一致褐澎,這里可以隨便更改
sentinel monitor master-1 127.0.0.1 6379 2
#判斷主master的掛機時間(毫秒),超時未返回正確信息后標記為sdown狀態(tài)
sentinel down-after-milliseconds master-1 5000
#若sentinel在該配置值內(nèi)未能完成failover操作(即故障時master/slave自動切換)伐蒋,則認為本次failover失敗工三。
sentinel failover-timeout master-1 18000
#身份認證
sentinel auth-pass master-1 grs
#選項指定了在執(zhí)行故障轉(zhuǎn)移時, 最多可以有多少個從服務器同時對新的主服務器進行同步先鱼,這個數(shù)字越小俭正,完成故障轉(zhuǎn)移所需的時間就越長
sentinel parallel-syncs master-1 1
這里有三個問題需要注意
第一,若通過redis-cli -h 127.0.0.1 -p 6379連接焙畔,無需改變配置文件掸读,配置文件默認配置為bind 127.0.0.1(只允許127.0.0.1連接訪問)
若通過redis-cli -h 192.168.180.78 -p 6379連接,需改變配置文件宏多,配置信息為bind 127.0.0.1 192.168.180.78(只允許127.0.0.1和192.168.180.78訪問)或者將bind 127.0.0.1注釋掉(允許所有遠程訪問)
第二儿惫,masterauth為所要連接的master服務器的requirepass,如果一個redis集群中有一個master服務器,兩個slave服務器伸但,當master服務器掛掉時姥闪,sentinel哨兵會隨機選擇一個slave服務器充當master服務器,鑒于這種機制砌烁,解決辦法是將所有的主從服務器的requirepass和masterauth都設置為一樣。
第三,sentinel monitor master-1 127.0.0.1 6379 2 行尾最后的一個2代表什么意思呢函喉?我們知道避归,網(wǎng)絡是不可靠的,有時候一個sentinel會因為網(wǎng)絡堵塞而誤以為一個master redis已經(jīng)死掉了管呵,當sentinel集群式梳毙,解決這個問題的方法就變得很簡單,只需要多個sentinel互相溝通來確認某個master是否真的死了捐下,這個2代表账锹,當集群中有2個sentinel認為master死了時,才能真正認為該master已經(jīng)不可用了坷襟。(sentinel集群中各個sentinel也有互相通信奸柬,通過gossip協(xié)議)。
按如下循序依次啟動服務
1婴程、redis-server master.6379.conf
2廓奕、redis-server slave.6380.conf
3、redis-server slave.6381.conf
4档叔、redis-server sentinel.63791.conf --sentinel(linux:redis-sentinel sentinel.63791.conf)
5桌粉、redis-server sentinel.63792.conf --sentinel(linux:redis-sentinel sentinel.63792.conf)
查看master狀態(tài):
查看slave狀態(tài):
查看sentinel狀態(tài):
驗證redis sentinel的主從切換:
1、首先關閉主redis(6379)服務(shutdown)衙四。
2铃肯、查看哨兵,發(fā)現(xiàn)端口號為6380的從服務變成了主服務,sentinel自動完成了故障切換传蹈。
3押逼、啟動剛才被shutdown的6379服務并查看,發(fā)現(xiàn)它變成了從服務卡睦。
到這 我搭建和演示就結(jié)束了
后續(xù)單機版 spring 整合使用慢慢玩吧宴胧,成功了再來
參考如下:
https://blog.csdn.net/liguangyan_neu/article/details/78027105
如果有不足和錯誤的地方還請各位大佬指點
謝謝!1矶汀恕齐!