【Redis】Redis的高可用和哨兵
1. 基礎(chǔ)認(rèn)識(shí)

主節(jié)點(diǎn):負(fù)責(zé)寫(xiě)數(shù)據(jù)和同步數(shù)據(jù)到從節(jié)點(diǎn)。
從節(jié)點(diǎn):負(fù)責(zé)讀數(shù)據(jù)
實(shí)現(xiàn)讀寫(xiě)分離提高性能。
rdb文件: 數(shù)據(jù)文件
命令列表文件:主節(jié)點(diǎn)生成rdb文件期間,又收到的數(shù)據(jù)修改命令。從節(jié)點(diǎn)收到rdb文件后還要執(zhí)行命令列表文件中的命令,使得數(shù)據(jù)保持一致。
復(fù)制偏移量:最開(kāi)始從0開(kāi)始,隨著數(shù)據(jù)復(fù)制和同步,從節(jié)點(diǎn)也更新這個(gè)復(fù)制偏移量,這樣就算從節(jié)點(diǎn)臨時(shí)掉線(xiàn)了,在恢復(fù)連接之后和也能知道缺失哪些數(shù)據(jù)了。
哨兵Sentinel:專(zhuān)門(mén)搞一個(gè)節(jié)點(diǎn)出來(lái)當(dāng)管理員,不用管數(shù)據(jù)讀寫(xiě),只負(fù)責(zé)統(tǒng)籌協(xié)調(diào),主節(jié)點(diǎn)要是掛了,就從從節(jié)點(diǎn)里選一個(gè)出來(lái)當(dāng)主節(jié)點(diǎn)。這個(gè)管理員就叫哨兵。可以設(shè)置多個(gè)哨兵,一個(gè)哨兵掛掉還有其他哨兵頂上。
2.?新主節(jié)點(diǎn)選擇標(biāo)準(zhǔn)
給不同節(jié)點(diǎn)設(shè)置優(yōu)先級(jí),硬件配置高的優(yōu)先級(jí)別高。
優(yōu)先選擇跟主節(jié)點(diǎn)斷開(kāi)連接最短的節(jié)點(diǎn),它的數(shù)據(jù)會(huì)更新一些。
復(fù)制偏移量越大的數(shù)據(jù)越全。
3. 哨兵的工作原理

每隔10秒鐘使用INFO命令向主節(jié)點(diǎn)詢(xún)問(wèn)當(dāng)前的情況。
每隔1秒PING各節(jié)點(diǎn)(包括哨兵),確定節(jié)點(diǎn)是否還存活。哨兵發(fā)現(xiàn)主節(jié)點(diǎn)掉線(xiàn)之后首先判定為主觀下線(xiàn),然后由多個(gè)哨兵進(jìn)行判定,如果有N個(gè)哨兵都判定主節(jié)點(diǎn)下線(xiàn)了,則認(rèn)定為客觀下線(xiàn)。N可以自定義。
當(dāng)發(fā)現(xiàn)主節(jié)點(diǎn)下線(xiàn)之后,進(jìn)行故障轉(zhuǎn)移,故障轉(zhuǎn)移過(guò)程如下:
選一個(gè)新的主節(jié)點(diǎn)。
讓其他從節(jié)點(diǎn)從新的主節(jié)點(diǎn)同步數(shù)據(jù)。
把原來(lái)舊的主節(jié)點(diǎn)改成從節(jié)點(diǎn)。
4. 參考資料
【趣話(huà)Redis第三彈】:BV1MW4y187AH
Redis集群:Sentinel哨兵模式(詳細(xì)圖解):http://c.biancheng.net/redis/sentinel-model.html