Redis 哨兵模式是 Redis 的高可用解決方案,通過多個(gè)哨兵實(shí)例來監(jiān)控 Redis 主從節(jié)點(diǎn)的運(yùn)行狀態(tài),當(dāng)主節(jié)點(diǎn)宕機(jī)時(shí),自動(dòng)選擇一個(gè)從節(jié)點(diǎn)作為新主節(jié)點(diǎn)。哨兵之間通過發(fā)布訂閱機(jī)制通信,每個(gè)哨兵會(huì)對(duì)其他哨兵發(fā)送 hello 消息,以確保它們之間的連接正常。當(dāng)哨兵發(fā)現(xiàn)主節(jié)點(diǎn)失聯(lián)時(shí),會(huì)對(duì)其他哨兵發(fā)送消息來選出新主節(jié)點(diǎn)。選舉出的新主節(jié)點(diǎn)信息會(huì)傳播給其他哨兵,以更新它們自己的節(jié)點(diǎn)狀態(tài)。
哨兵集群中的各個(gè)節(jié)點(diǎn)角色如下:
Sentinel:哨兵節(jié)點(diǎn),負(fù)責(zé)監(jiān)控 Redis 運(yùn)行狀態(tài),進(jìn)行故障發(fā)現(xiàn)和切換操作,同時(shí)通過發(fā)布訂閱機(jī)制通知其他 Sentinel 節(jié)點(diǎn)。
Master:主節(jié)點(diǎn),存儲(chǔ) Redis 內(nèi)存數(shù)據(jù),讀寫操作通過主節(jié)點(diǎn)處理。
Slave:從節(jié)點(diǎn),復(fù)制主節(jié)點(diǎn)的數(shù)據(jù),對(duì)讀請(qǐng)求進(jìn)行負(fù)載均衡。
哨兵模式通過自動(dòng)切換方式實(shí)現(xiàn)高可用,適用于小型 Redis 集群,需要人工介入處理故障或調(diào)整配置時(shí),不便于管理。因此,在大型 Redis 集群部署中,通常使用集群模式。
Redis 集群模式
Redis 集群模式是 Redis 的分布式解決方案,通過將數(shù)據(jù)分片到不同節(jié)點(diǎn)上,實(shí)現(xiàn)數(shù)據(jù)的分布式存儲(chǔ)和訪問。Redis 集群采用無中心架構(gòu),每個(gè)節(jié)點(diǎn)都是對(duì)等的,通過 gossip 協(xié)議交換集群信息,維護(hù)整個(gè)集群狀態(tài)。
Redis 集群模式采用 hash slot 算法來將 key 映射到不同的節(jié)點(diǎn),一個(gè)節(jié)點(diǎn)負(fù)責(zé)多個(gè) hash slot,每個(gè)節(jié)點(diǎn)都是一個(gè)獨(dú)立的 Redis 實(shí)例,單個(gè)節(jié)點(diǎn)所存儲(chǔ)的數(shù)據(jù)不可超過集群內(nèi)所有節(jié)點(diǎn)內(nèi)存總和的一半。集群節(jié)點(diǎn)之間通過高速網(wǎng)卡互聯(lián),對(duì)外提供統(tǒng)一的服務(wù)地址。
Redis 集群支持讀寫分離和自動(dòng)故障轉(zhuǎn)移功能,其中主節(jié)點(diǎn)負(fù)責(zé)接收寫請(qǐng)求,從節(jié)點(diǎn)負(fù)責(zé)接收讀請(qǐng)求。當(dāng)某個(gè)節(jié)點(diǎn)失效時(shí),集群會(huì)自動(dòng)將其上的 slot 遷移到其他節(jié)點(diǎn),重新分配剩余的 slot,從而實(shí)現(xiàn)高可用。
哨兵模式和集群模式的選擇
哨兵模式適用于小型 Redis 集群,具有配置簡單、易于部署、自動(dòng)切換等特點(diǎn)。而集群模式適用于大型 Redis 集群,具有高可用、可擴(kuò)展、支持讀寫分離等特點(diǎn)。
對(duì)于中小型企業(yè),哨兵模式能夠滿足高可用需求,且具有經(jīng)濟(jì)性和易操作性,因此哨兵模式較為適合。而對(duì)于大型企業(yè),Redis 集群模式更為適用,能夠滿足高并發(fā)、高可用、高穩(wěn)定、高擴(kuò)展的要求。
因此,在使用 Redis 時(shí),需要充分考慮業(yè)務(wù)需求和實(shí)際情況,選擇適合自己的高可用解決方案。