服務(wù)的可用性不僅僅是指服務(wù)健康運(yùn)行的時(shí)間,還包括出現(xiàn)故障以后的恢復(fù)速度。保證一個(gè)服務(wù)的高可用记罚,基本可以從 軟件質(zhì)量 故障預(yù)防 故障恢復(fù)三方面著手浅妆。對(duì)于redis望迎,軟件的質(zhì)量本身有很大的保障,因此對(duì)于線上大規(guī)模的redis集群運(yùn)維管理凌外,基本上可以從故障預(yù)防和故障恢復(fù)兩方面著辩尊。雖然redis cluster本身具有自動(dòng)主從容災(zāi)的高可用能力,但是某些場(chǎng)景cluster依然無(wú)法很好地處理康辑。本文將結(jié)合CLUSTER FAILOVER 集群管理命令詳細(xì)介紹如何進(jìn)一步提升redis集群的可用性摄欲。
首先對(duì)CLUSTER FAILOVER命令做個(gè)介紹:
CLUSTER FAILOVER處理流程
- 通知master停止處理來(lái)自客戶端的請(qǐng)求
- master響應(yīng)當(dāng)前最大的replication offset
- 客戶端等待復(fù)制復(fù)制同步完成直到replication offset
- 提升epoch并獲取半數(shù)leader的選舉認(rèn)可
- 更新configuration并解除客戶端的阻塞請(qǐng)求,返回重定向到新的master
該操作用于正常的主從切換疮薇,但是如果master節(jié)點(diǎn)宕機(jī)了無(wú)法響應(yīng)failover請(qǐng)求胸墙,那么failover將會(huì)失敗,為了處理master宕機(jī)的情況按咒,可以添加FORCE 選項(xiàng)迟隅。
CLUSTER FAILOVER FORCE: 添加FORCE選項(xiàng)時(shí),failover流程直接從上述的第4步開(kāi)始励七,也即跳過(guò)了和舊master通信協(xié)商復(fù)制數(shù)據(jù)的過(guò)程智袭,當(dāng)master宕機(jī)時(shí),force選項(xiàng)可以快速進(jìn)行人工主從切換掠抬。但是該過(guò)程仍然需要獲得半數(shù)master的統(tǒng)=同意才能當(dāng)選為新主吼野。當(dāng)出現(xiàn)半數(shù)master節(jié)點(diǎn)異常時(shí),該流程無(wú)法進(jìn)行主從切換两波。
CLUSTER FAILOVER TAKEOVER: 為了處理半數(shù)master節(jié)點(diǎn)異常的場(chǎng)景瞳步,可以添加****TAKEOVER 選項(xiàng)。通過(guò)TAKEOVER 選項(xiàng)雨女,可以無(wú)需獲得半數(shù)master的認(rèn)同谚攒,而是直接更新?tīng)顟B(tài)為master并向所有可達(dá)的節(jié)點(diǎn)發(fā)送最新配置epoch。****
接下來(lái)將結(jié)合場(chǎng)景介紹如何通過(guò)FAILOVER 提升集群可用性
主從節(jié)點(diǎn)均衡漂移切換氛堕,負(fù)載均衡
防患以未然馏臭,當(dāng)機(jī)器負(fù)載過(guò)高或者出現(xiàn)異常故障時(shí),需要將部署在該機(jī)器的redis實(shí)例遷移出,遷移流程包含:
- 在新的機(jī)器部署一個(gè)slave實(shí)例并同步數(shù)據(jù)
- 同步完數(shù)據(jù)以后將舊的實(shí)例下線。
如果舊機(jī)器有實(shí)例處于master括儒,則需要先將role改外slave绕沈,然后在進(jìn)行遷移,此時(shí)可以通過(guò)對(duì)slave節(jié)點(diǎn)發(fā)送cluster failover帮寻,將節(jié)點(diǎn)改為slave以后在進(jìn)行刪除乍狐。
FORCE: 主節(jié)點(diǎn)宕機(jī)時(shí)快速選主
最理想的情況是出現(xiàn)故障之前提前解決處理,但是這畢竟只是理想固逗。當(dāng)節(jié)點(diǎn)宕機(jī)或者負(fù)載過(guò)高導(dǎo)致無(wú)法響應(yīng)時(shí)浅蚪,可能出現(xiàn)FAILOVER失敗的情況,此時(shí)則可以通過(guò)添加FORCE選項(xiàng)進(jìn)行強(qiáng)制主從切換烫罩,將健康的slave節(jié)點(diǎn)提升為master從而快速恢復(fù)服務(wù)惜傲。
TAKEOVER: 半數(shù)master故障時(shí),強(qiáng)制更新快速止損恢復(fù)服務(wù)贝攒。
雖然在線上環(huán)境的部署上盗誊,redis的master節(jié)點(diǎn)會(huì)做到盡可能分散,但是在某些場(chǎng)景寫(xiě)隘弊,還是可能出現(xiàn)半數(shù)master節(jié)點(diǎn)故障的情況:
- 測(cè)試環(huán)境機(jī)器上哈踱,部分機(jī)器宕機(jī)可能導(dǎo)致超過(guò)半數(shù)master異常,此時(shí)redis集群無(wú)法自動(dòng)恢復(fù)梨熙,雖然是測(cè)試環(huán)境开镣,但是故障快速修復(fù)依然同樣重要,否則會(huì)驗(yàn)證影響研發(fā)測(cè)試進(jìn)度串结。
- 多活部署場(chǎng)景哑子,多活場(chǎng)景下舅列,通臣「睿可以將主節(jié)點(diǎn)部署在一個(gè)機(jī)房,從節(jié)點(diǎn)部署在另外一個(gè)機(jī)房提供讀或者容災(zāi)帐要。當(dāng)機(jī)房出現(xiàn)故障時(shí)把敞,此時(shí)則可以通過(guò)添加takeover選項(xiàng)將從機(jī)房的節(jié)點(diǎn)提升為主,快速恢復(fù)集群寫(xiě)能力榨惠。
總結(jié)
雖然redis cluster本身提供了高可用的能力奋早,但是在某些場(chǎng)景下依然需要人為介入進(jìn)行處理,本文介紹了FAILOVER的幾種應(yīng)用實(shí)踐場(chǎng)景赠橙,通過(guò)將該操作和option集成到自動(dòng)運(yùn)維平臺(tái)耽装,進(jìn)一步提升了redis的可用性。