ASP.NET Core分布式緩存Redis主從Sentinel哨兵模式實戰(zhàn)演練
一、課程介紹
二、Redis的三種集群解決方案對比Redis是被廣泛使用的基礎軟件之一。對于工程師和,架構(gòu)師,運維人員來說,了解Redis的高可用方案和背后的原理,是必備的基礎知識。
“高可用性”(High Availability)通常來描述一個系統(tǒng)經(jīng)過專門的設計,從而減少停工時間,而保持其服務的高度可用性。
Redis-Sentinel是Redis官方推薦的高可用性(HA)解決方案之一,當用Redis做Master-Slave(主從復制)的高可用方案時,假如master宕機了,它能監(jiān)控多個master-slave集群,發(fā)現(xiàn)master宕機后能進行自動切換。Redis主從切換技術的方法是:當主服務器宕機后,需要手動把一臺從服務器切換為主服務器,這就需要人工干預,費事費力,還會造成一段時間內(nèi)服務不可用。這不是一種推薦的方式,更多時候,我們優(yōu)先考慮哨兵模式。1.1、本次分享課程只有【文字】和【源代碼】,感興趣的可以根據(jù)自身情況進行選擇學習!
1.2、一句話總結(jié)今天我們學習達到的目標
在ASP.NET Core中如何使用分布式緩存Redis主從Sentinel哨兵模式實現(xiàn)故障轉(zhuǎn)移。
三、Redis哨兵模式概述redis有三種集群方式:主從復制,哨兵模式和集群。
1)、Redis主從復制特點
Redis主從復制不具備自動容錯和恢復功能,主機從機的宕機都會導致前端部分讀寫請求失敗,需要等待機器重啟或者手動切換前端的IP才能恢復。
2)、Redis主從切換哨兵模式特點
哨兵Sentinel基于主從復制模式,所以優(yōu)缺點很多重合。最大的優(yōu)點就是可以主從切換,進行故障轉(zhuǎn)移。缺點就是擴容很難。
3)、Redis-Cluster?集群特點
redis-cluster 集群模式,也是大型企業(yè)中使用的模式,無中心架構(gòu),支持動態(tài)擴容,具備哨兵與主從的優(yōu)點,客戶端只需要連接集群中任意一個節(jié)點。
有了主從復制的實現(xiàn)以后,如果想對主服務器進行監(jiān)控,那么在redis2.6以后提供了一個"哨兵"的機制。顧名思義,哨兵的含義就是監(jiān)控redis系統(tǒng)的運行狀態(tài)??梢詥佣鄠€哨兵,去監(jiān)控redis數(shù)據(jù)庫的運行狀態(tài)。其主要功能有兩點:
a、監(jiān)控所有節(jié)點數(shù)據(jù)庫是否在正常運行。
b、master數(shù)據(jù)庫出現(xiàn)故障時,可以自動通過投票機制,從slave節(jié)點中選舉新的master,實現(xiàn)將從數(shù)據(jù)庫轉(zhuǎn)換為主數(shù)據(jù)庫的自動切換。
一個一主多從的Redis系統(tǒng)中,可以使用多個哨兵進行監(jiān)控任務以保證系統(tǒng)足夠穩(wěn)健。此時,不僅哨兵會同時監(jiān)控主數(shù)據(jù)庫和從數(shù)據(jù)庫,哨兵之間也會相互監(jiān)控。在這里,建議大家哨兵至少部署3個,并且使用奇數(shù)個哨兵。Redis Sentinel 的節(jié)點數(shù)量要滿足 2n + 1 (n>=1)的奇數(shù)個,所以最小數(shù)量是3個!
哨兵模式是一種特殊的模式,首先Redis提供了哨兵的命令,哨兵是一個獨立的進程,作為進程,它會獨立運行。其原理是哨兵通過發(fā)送命令,等待Redis服務器響應,從而監(jiān)控運行的多個Redis實例。

Redis哨兵
四、如何使用Dcoker部署Redis主從切換哨兵模式(一主二從三哨兵)這里的哨兵有兩個作用
1)、通過發(fā)送命令,讓Redis服務器返回監(jiān)控其運行狀態(tài),包括主服務器和從服務器。
2)、當哨兵監(jiān)測到master宕機,會自動將slave切換成master,然后通過發(fā)布訂閱模式通知其他的從服務器,修改配置文件,讓它們切換主機。
Redis主從結(jié)構(gòu)搭建成功了,系統(tǒng)的可用性變高了,但是如果主發(fā)生故障,需要人工手動切換從機為主機。這種切換工作不僅浪費人力資源,更大的影響是主從切換期間這段時間redis是無法對外提供服務的。因此,哨兵系統(tǒng)被開發(fā)出來了,哨兵可以在主發(fā)生故障后,自動進行故障轉(zhuǎn)移,從從機里選出一臺升級為主機,并持續(xù)監(jiān)聽著原來的主機,當原來的主機恢復后,會將其作為新主的從機。
一主(master)二從(slave)三哨兵(sentinel)的配置目標, 如下

一主(master)二從(slave)三哨兵(sentinel)
五、ASP.NET Core中使用分布式緩存Redis主從Sentinel哨兵模式
六、實現(xiàn)步驟簡單的主從復制架構(gòu)在 master 故障后會不可用,Redis 官方提供了哨兵(sentinel)機制自動實現(xiàn)主備切換保證高可用。哨兵機制通過一組哨兵節(jié)點監(jiān)控主從節(jié)點的運行狀態(tài),并在主節(jié)點故障后選舉新的主節(jié)點。
一般實際工作中Redis都是由我們的運維DB工程師幫我們?nèi)ゴ罱ōh(huán)境,但是在剛開始的學習過程中,可能需要我們自行去搭建環(huán)境哦,這里為了方便起見,阿笨強烈推薦大家采用Docker容器化的方式進行搭建環(huán)境。具體的環(huán)境搭建過程請自行研究和攻克一下哦(剛開始需要做好一定心里準備,如果對概念理解不深刻的話,Redis哨兵環(huán)境搭建還是比較復雜和繁瑣,由于Redis跟平臺和開發(fā)語言沒有任何的關系,所以建議大家還是事先參考一些博客后才自行采取行動噢)。
關于.NET Core如何使用Redis的哨兵模式,這里.NET Core SDK的話阿笨推薦大家使用CSRedisCore。使用步驟前提條件就是你已經(jīng)配置到了Redis的哨兵模式,配置推薦大家可以采用Docker的方式相對簡單一些,感興趣的話大家自行百度攻克一下。阿笨這里就只介紹如何去使用功能。
1)、配置連接字符串SentinelConnectString

2、將csredis實例注冊到管道中

3、使用redis功能,對調(diào)用方在功能上的使用完全透明化,無任何差異。

七、總結(jié)
八、源代碼示例下載redis通過主從復制來實現(xiàn)高可用,但是發(fā)生故障時需要人工進行主從切換,效率低下。哨兵機制實現(xiàn)了redis主從的自動切換,提高了redis集群的可用性,提高了redis集群的故障轉(zhuǎn)移效率。
我們可以看到哨兵機制是有缺點的:
1.主從服務器的數(shù)據(jù)要經(jīng)常進行主從復制,這樣造成性能下降。
2.當主服務器宕機后,從服務器切換成主服務器的那段時間,服務是不能用的。
為了保證redis的真真的高可用官方推薦使用redis-cluster集群。
一般的項目我們采用redis的哨兵模式架構(gòu)(推薦采用一主二從三哨兵)就可以滿足業(yè)務要求了,阿笨水平也有限,關于redis的高可用cluster集群的運用大家就根據(jù)個人的項目架構(gòu)要求去研究和探索了。
非常感謝對【跟著阿笨一起玩NET】的支持,有問題微信公眾號回復wx關鍵字,加阿笨的個人微信號。
《ASP.NET Core分布式緩存Redis主從Sentinel哨兵模式實戰(zhàn)演練》源碼下載(注意下載地址區(qū)分大小寫哦)
關注公眾號,回復關鍵字提取碼:t5pq
騰訊課堂
網(wǎng)易云課堂

