新聞中心
Redis是一個(gè)全功能的高級(jí)NoSQL數(shù)據(jù)庫(kù),具有強(qiáng)大的功能,占用內(nèi)存少,數(shù)據(jù)操作速度快,它是目前非常流行的NoSQL數(shù)據(jù)庫(kù)之一。Redis的設(shè)計(jì)出發(fā)點(diǎn)是能夠快速響應(yīng)數(shù)據(jù),所以Redis擁有非常出色的性能特性。然而,Redis卻有一個(gè)致命的弱點(diǎn)——腦裂現(xiàn)象,因?yàn)檫@種現(xiàn)象導(dǎo)致的數(shù)據(jù)的應(yīng)用形式會(huì)導(dǎo)致多個(gè)數(shù)據(jù)庫(kù)狀態(tài)出現(xiàn)不一致,從而破壞數(shù)據(jù)庫(kù)的完整性,使得系統(tǒng)操作變得不可靠。

Redis利用了一種叫做選舉的機(jī)制來(lái)處理腦裂問(wèn)題,通過(guò)建立一種獨(dú)立的選舉機(jī)制,讓每個(gè)節(jié)點(diǎn)都掌握相同的數(shù)據(jù),從而避免因不一致的數(shù)據(jù)導(dǎo)致的腦裂現(xiàn)象的發(fā)生。
Redis的選舉方案使用的是raft算法,Raft在每個(gè)節(jié)點(diǎn)上都要建立一個(gè)獨(dú)立的任期計(jì)時(shí)器,來(lái)檢測(cè)是否catch up 到新任期,當(dāng)所有節(jié)點(diǎn)都進(jìn)入新任期之后,Redis重新選舉出一個(gè)作為L(zhǎng)EADER 的節(jié)點(diǎn),進(jìn)行一致性驗(yàn)證,當(dāng)一致性驗(yàn)證完成后,Redis重新開(kāi)始新一輪的任期,整個(gè)過(guò)程有效地避免了腦裂所帶來(lái)的數(shù)據(jù)不一致危害。
當(dāng)Redis集群收到新的數(shù)據(jù)更新請(qǐng)求時(shí),leader會(huì)將這個(gè)更新請(qǐng)求廣播到其他各節(jié)點(diǎn),所有的節(jié)點(diǎn)在接收到請(qǐng)求后就會(huì)進(jìn)行數(shù)據(jù)的更新,leader節(jié)點(diǎn)在接收到多個(gè)節(jié)點(diǎn)的確認(rèn)后,這個(gè)請(qǐng)求才算是最終成功,避免了數(shù)據(jù)的不一致性。
Redis的腦裂的選舉之路采用的是Raft算法的機(jī)制,它實(shí)現(xiàn)了每個(gè)節(jié)點(diǎn)的數(shù)據(jù)保持一致,從而有效地避免了腦裂現(xiàn)象,在一致性與可靠性方面,Redis得到了改善。
#!/usr/bin/env python
import redis
# connect to Redis
r = redis.Redis(host="localhost", port="6379")
# set up raft leader
leader = r.set("raft_leader", "127.0.0.1")
# set up raft followers
followers = r.sadd("raft_followers", "127.0.0.2", "127.0.0.3", "127.0.0.4")
# set up raft term
term = r.set("raft_term", 1)
創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級(jí)標(biāo)準(zhǔn)機(jī)房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達(dá)10T,機(jī)柜接入千兆交換機(jī),能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運(yùn)行;創(chuàng)新互聯(lián)專(zhuān)注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認(rèn)可。
名稱(chēng)欄目:Redis腦裂的選舉之路(redis選舉腦裂)
地址分享:http://fisionsoft.com.cn/article/djejdhs.html


咨詢
建站咨詢
