1. 程式人生 > >redis HA高可用方案Sentinel和shard

redis HA高可用方案Sentinel和shard

1、搭建redis-master、redis-slave以及seninel哨兵監控

在最小配置:master、slave各一個節點的情況下,不管是master還是slave down掉一個,“完整的”讀/寫功能都將受影響,這在生產環境中顯然不能接受。幸好redis提供了sentinel(哨兵)機制,通過sentinel模式啟動redis後,自動監控master/slave的執行狀態,基本原理是:心跳機制+投票裁決

每個sentinel會向其它sentinal、master、slave定時傳送訊息,以確認對方是否“活”著,如果發現對方在指定時間(可配置)內未迴應,則暫時認為對方已掛(所謂的“主觀認為宕機” Subjective Down,簡稱SDOWN)。

若“哨兵群”中的多數sentinel,都報告某一master沒響應,系統才認為該master"徹底死亡"(即:客觀上的真正down機,Objective Down,簡稱ODOWN),通過一定的vote演算法,從剩下的slave節點中,選一臺提升為master,然後自動修改相關配置

最小化的sentinel配置檔案為:

1 port 26389
2 
3 dir ./tmp
4 
5 sentinel monitor mymaster 127.0.0.1 6379 1
6 sentinel down-after-milliseconds mymaster 5000
7 sentinel parallel-syncs mymaster 1
8 sentinel failover-timeout mymaster 15000

第1行,指定sentinel使用的埠,不能與redis-server執行例項的埠衝突

第3行,指定工作目錄

第5行,顯示監控master節點10.6.144.155,master節點使用埠7030,最後一個數字表示投票需要的"最少法定人數",比如有10個sentinal哨兵都在監控某一個master節點,如果需要至少6個哨兵發現master掛掉後,才認為master真正down掉,那麼這裡就配置為6,最小配置1臺master,1臺slave,在二個機器上都啟動sentinal的情況下,哨兵數只有2個,如果一臺機器物理掛掉,只剩一個sentinal能發現該問題,所以這裡配置成1,至於mymaster只是一個名字,可以隨便起,但要保證5-8行都使用同一個名字

第6行,表示如果5s內mymaster沒響應,就認為SDOWN

第8行,表示如果15秒後,mysater仍沒活過來,則啟動failover,從剩下的slave中選一個升級為master

第7行,表示如果master重新選出來後,其它slave節點能同時並行從新master同步快取的臺數有多少個,顯然該值越大,所有slave節點完成同步切換的整體速度越快,但如果此時正好有人在訪問這些slave,可能造成讀取失敗,影響面會更廣。最保定的設定為1,只同一時間,只能有一臺幹這件事,這樣其它slave還能繼續服務,但是所有slave全部完成快取更新同步的程序將變慢。

另:一個sentinal可同時監控多個master,只要把5-8行重複多段,加以修改即可。

各自啟動redis主備和sentinal哨兵,檢視redis的master

./redis-cli -p 26389 sentinel masters 可通過該命令檢視當前的master節點情況

模擬當master掛掉,是否slave switch為master.

切換成功,將掛掉master啟起來,是否該redis變幻為slave.

2、sentinel和shard redis保證redis 叢集的高可用。

Sentinel&Jedis看上去是個完美的解決方案,這句話只說對了一半,在無分片的情況是這樣,但我們的應用使用了資料分片-sharing,資料被平均分佈到4個不同的例項上,每個例項以主從結構部署,Jedis沒有提供基於Sentinel的ShardedJedisPool,也就是說在4個分片中,如果其中一個分片發生主從切換,應用所使用的ShardedJedisPool無法獲得通知,所有對那個分片的操作將會失敗。
本文提供一個基於Sentinel的ShardedJedisPool,能及時感知所有分片主從切換行為,進行連線池重建..........

3\監控..

目前針對redis的監控比較少見,主要有redis-live、dredis等。但這些工具對redis效能消耗比較嚴重,實時監控比較困難。

redis的監控可以簡單分為安全監控和效能監控。安全監控可以通過redissentinel的輸出日誌判斷Master和Slave的狀態;效能監控需要收集redis的效能引數進行評估。因此二者並不衝突,通過shell指令碼可以實現輕量級的監控,缺點是沒有視覺化的實時圖表。

1、安全監控

Redis sentinel的輸出日誌簡潔而且內容很豐富,包含redis的實時狀態、故障切換時間以及sentinel自身的狀態,並且針對故障消除也有詳細的記錄。通過對sentinel日誌挖掘,找出故障時刻進行及時報警,並通知管理員。

由於sentinel預設不啟用日誌記錄,可以通過以下方法記錄日誌:

啟動輸入日誌:

src/redis-sentinel sentinel.conf >>sentinel.log &