sentinel的一個(gè)缺點(diǎn)是存儲(chǔ)容量限于單臺(tái)機(jī)器,而集群提供了一種分布式的解決方案腿准。
redis有兩種運(yùn)行模式
1)單機(jī)模式:stand_alone
2)集群模式:cluster
集群的鍵空間被分為16384(2^14)個(gè)槽(slot),這些slots被集群上的機(jī)器所瓜分吐葱,只有所有slots都有節(jié)點(diǎn)被處理時(shí)加叁,集群才處于OK狀態(tài)。
集群以分片(sharding)方式的保存數(shù)據(jù)庫(kù)的鍵值對(duì)唇撬,通過(guò)以下公式計(jì)算key屬于哪個(gè)槽位:
CRC16(key) & (2^14 - 1)
節(jié)點(diǎn)在接收到一個(gè)命令請(qǐng)求時(shí)它匕,先會(huì)檢查這個(gè)命令所處理的key所在的slot是否由自己負(fù)責(zé),如果不是窖认,則向客戶(hù)端返回一個(gè)MOVED錯(cuò)誤豫柬,該錯(cuò)誤的攜帶信息可以指引客戶(hù)端轉(zhuǎn)向正在負(fù)責(zé)相關(guān)slot的節(jié)點(diǎn)。
集群中每個(gè)節(jié)點(diǎn)都定期向其他節(jié)點(diǎn)發(fā)送【ping】,如果在規(guī)定時(shí)間內(nèi)沒(méi)有返回【pong】,則認(rèn)為該節(jié)點(diǎn)疑似下線性穿。如果半數(shù)以上的節(jié)點(diǎn)認(rèn)為該master疑似下線蚤氏,那么認(rèn)為該master事實(shí)下線。會(huì)在集群內(nèi)廣播一條master FAIL的消息啼染。
集群會(huì)選擇根據(jù)Raft算法選舉主節(jié)點(diǎn),注意與sentinel選擇leader的差異。
1)集群中負(fù)責(zé)處理slots的主節(jié)點(diǎn)才有投票權(quán)榴鼎,而且只能投一票。
2)從節(jié)點(diǎn)發(fā)現(xiàn)master進(jìn)入FAIL狀態(tài)晚唇,會(huì)向集群廣播一條消息巫财,要求其他主節(jié)點(diǎn)投票。
3)得到主節(jié)點(diǎn)半數(shù)以上的票數(shù)的從節(jié)點(diǎn)會(huì)成為主節(jié)點(diǎn)哩陕。
2019-03-19閱:
當(dāng)master宕機(jī)后平项,從slaves中選擇新的master,集群用的是投票方式悍及,而sentinel用的是leader指定的方式闽瓢。
sentinel:主觀下線,客觀下線
cluster:疑似下線心赶,事實(shí)下線
2019-07-25
疑似下線 -> 事實(shí)下線 -> 選舉新的master