W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
在一個(gè)如下的四節(jié)點(diǎn)環(huán)境中,
如果sentinel monitor的quorum設(shè)置為3,則宕機(jī)一臺(tái)后再宕機(jī),此時(shí)還剩余兩臺(tái),存在兩個(gè)sentinel,兩個(gè)slave。由于quorum為3,而必須有>=max(quorum, num(sentinels)/2 +1) = max(3,2) = 3個(gè)sentinel都同意其中某一個(gè)sentinel主持failover,因此此時(shí)無sentinel可主持切換,因此測試表明,沒有新的master被選出來,此時(shí)只能手動(dòng)通過slaveof命令設(shè)置主從,并且手動(dòng)切換(redis、sentinel和都應(yīng)用不用重啟):
首先修改redis:
任意選取剩余的其中一個(gè)節(jié)點(diǎn)進(jìn)行:slaveof no one
其他節(jié)點(diǎn):slaveof 192.168.145.135 6379
找一個(gè)從節(jié)點(diǎn)上的sentinel,進(jìn)入sentinel:
redis-cli -p 26379
進(jìn)行主動(dòng)切換:
sentinel failover mymaster
然后再在兩個(gè)sentinel上重新發(fā)現(xiàn)集群:
sentinel reset mymaster
檢查集群狀態(tài)。
如果sentinel monitor的quorum設(shè)置為2,則宕機(jī)一臺(tái)后再宕機(jī),此時(shí)還剩余兩臺(tái),存在兩個(gè)sentinel,兩個(gè)slave。由于quorum為2,必須有>=max(quorum, num(sentinels)/2 +1)=max(2,2) =2個(gè)的sentinel都同意其中某一個(gè)sentinel主持failover,因此此時(shí)存在sentinel可主持切換,因此測試表明,新的master被選出來。
但是設(shè)置為2有一個(gè)危險(xiǎn)就是如果出現(xiàn)如下的網(wǎng)絡(luò)隔離狀況:
集群就會(huì)腦裂,就會(huì)出現(xiàn)兩個(gè)master。因此,生產(chǎn)上為了萬無一失,寧可犧牲掉一定的高可用容錯(cuò)度也要避免腦裂。如果希望兩臺(tái)宕機(jī)依然可以切換,最好的方案不是降低quorum而是增多sentinel的個(gè)數(shù),這個(gè)建議也是antirez在stackoverflow中回答一個(gè)人的提問時(shí)給的建議(http://stackoverflow.com/questions/27605843/redis-sentinel-last-node-doesnt-become-master#)。 如下場景測試:
此時(shí)其中兩臺(tái)宕機(jī),必須有>=max(quorum, num(sentinels)/2 +1)=max(3,3) =3個(gè)的sentinel都同意其中某一個(gè)sentinel主持failover,因此此時(shí)存在sentinel可主持切換,測試結(jié)果表明此種部署方案可以正常切換。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: