1)用于分布式中一致性處理的框架
2)zookeeper為主備切換保駕護(hù)航
先來(lái)推理一下逮栅,主備切換會(huì)出現(xiàn)什么問(wèn)題拐迁。傳統(tǒng)的主備切換官地,可以讓主備之間維持心跳連接怒详,一旦備機(jī)發(fā)現(xiàn)主機(jī)心跳檢測(cè)不到了炉媒,則自己切換為主機(jī),原來(lái)的主機(jī)等待救援昆烁。這種方式有兩個(gè)問(wèn)題吊骤,一是由于網(wǎng)絡(luò)抖動(dòng),負(fù)載過(guò)大等問(wèn)題静尼,備機(jī)檢測(cè)不到心跳并不能說(shuō)明主機(jī)一定掛了白粉,有可能一定時(shí)間后主機(jī)或網(wǎng)絡(luò)恢復(fù),這時(shí)候主機(jī)并不知道備機(jī)已經(jīng)切換為主機(jī)鼠渺,2臺(tái)主機(jī)互相爭(zhēng)用鸭巴,可能造成腦裂;二是如果一些數(shù)據(jù)集中在主機(jī)上面系冗,則備機(jī)切換時(shí)由于同步延時(shí)勢(shì)必會(huì)損失掉一部分的數(shù)據(jù)奕扣。
如何解決這些問(wèn)題?早期的方式提供了不少解決方案掌敬,比如備機(jī)一旦切換為主機(jī),則通過(guò)電源控制直接切斷主機(jī)電源池磁,簡(jiǎn)單粗暴奔害,但是此刻備機(jī)已經(jīng)是單點(diǎn),如果主機(jī)是因?yàn)榱繐尾蛔《鴴斓叵ǎ莻錂C(jī)有可能會(huì)重蹈覆轍华临,最終導(dǎo)致整個(gè)服務(wù)不可用。
zookeeper又是如何解決這個(gè)問(wèn)題的呢端考?
zookeeper作為第三方集群參與到主備節(jié)點(diǎn)中去雅潭,當(dāng)主備啟動(dòng)時(shí)會(huì)在zookeeper上競(jìng)爭(zhēng)創(chuàng)建一個(gè)臨時(shí)鎖節(jié)點(diǎn),爭(zhēng)用成功者則充當(dāng)主機(jī)却特,其余備機(jī)扶供;
所有備機(jī)會(huì)監(jiān)聽(tīng)該臨時(shí)鎖節(jié)點(diǎn),一旦主機(jī)與zookeeper間session失效裂明,則臨時(shí)節(jié)點(diǎn)被刪除椿浓;
一旦臨時(shí)節(jié)點(diǎn)被刪除,備機(jī)開(kāi)始重新申請(qǐng)創(chuàng)建臨時(shí)鎖節(jié)點(diǎn),重新?tīng)?zhēng)用為主機(jī)扳碍;
用zookeeper如何解決腦裂提岔?實(shí)際上主機(jī)爭(zhēng)用到節(jié)點(diǎn)后通過(guò)對(duì)根節(jié)點(diǎn)做一個(gè)ACL權(quán)限控制,則其他搶占的機(jī)器由于無(wú)法更新臨時(shí)鎖節(jié)點(diǎn)笋敞,只有放棄成為備機(jī)碱蒙。
3)zookeeper實(shí)現(xiàn)服務(wù)注冊(cè)發(fā)現(xiàn)
4)Zookeeper通知機(jī)制
客戶端注冊(cè)監(jiān)聽(tīng)它關(guān)心的目錄節(jié)點(diǎn),當(dāng)目錄節(jié)點(diǎn)發(fā)生變化(數(shù)據(jù)改變夯巷、被刪除赛惩、子目錄節(jié)點(diǎn)增加刪除)時(shí),zookeeper會(huì)通知客戶端鞭莽。