說到分布式開發(fā)Zookeeper是必須了解和掌握的,分布式消息服務(wù)kafka 、hbase 到hadoop等分布式大數(shù)據(jù)處理都會用到Zookeeper,所以在此將Zookeeper作為基礎(chǔ)來講解。
Zookeeper 是分布式服務(wù)框架,主要是用來解決分布式應(yīng)用中經(jīng)常遇到的一些數(shù)據(jù)管理問題,如:統(tǒng)一命名服務(wù)、狀態(tài)同步服務(wù)、集群管理、分布式應(yīng)用配置項的管理等等。
Zookeeper 的核心是廣播,這個機(jī)制保證了各個Server之間的同步。實現(xiàn)這個機(jī)制的協(xié)議叫做Zab協(xié)議。
Zab協(xié)議有兩種模式,它們分別是恢復(fù)模式(選主)和廣播 模式(同步)。當(dāng)服務(wù)啟動或者在領(lǐng)導(dǎo)者崩潰后,Zab就進(jìn)入了恢復(fù)模式,當(dāng)領(lǐng)導(dǎo)者被選舉出來,且大多數(shù)Server完成了和leader的狀態(tài)同步以后, 恢復(fù)模式就結(jié)束了。
狀態(tài)同步保證了leader和Server具有相同的系統(tǒng)狀態(tài)。為了保證事務(wù)的順序一致性,zookeeper采用了遞增的事務(wù)id號 (zxid)來標(biāo)識事務(wù)。
所有的提議(proposal)都在被提出的時候加上了zxid。實現(xiàn)中zxid是一個64位的數(shù)字,它高32位是epoch用 來標(biāo)識leader關(guān)系是否改變,每次一個leader被選出來,它都會有一個新的epoch,標(biāo)識當(dāng)前屬于那個leader的統(tǒng)治時期。低32位用于遞 增計數(shù)。
每個Server在工作過程中有三種狀態(tài):
LOOKING:當(dāng)前Server不知道leader是誰,正在搜尋。
LEADING:當(dāng)前Server即為選舉出來的leader。
FOLLOWING:leader已經(jīng)選舉出來,當(dāng)前Server與之同步。
ZooKeeper的安裝模式分為三種,分別為:單機(jī)模式、集群模式和集群偽分布模式