ZooKeeper入门(一)
1: ZooKeeper是什么
? ? ? Apache ZooKeeper是一個開源的分布式服務(wù)框架,為分布式應(yīng)用提供協(xié)調(diào)服務(wù),用來解決分布式應(yīng)用中的數(shù)
據(jù)管理問題,如:配置管理、域名服務(wù)、分布式同步、集群管理等。
? ? 概念:
? ? 分布式
? ? 將一個大型應(yīng)用的不同業(yè)務(wù)部署在不同的服務(wù)器上,解決高并發(fā)的問題
? ? 集群
? ? 將同一個業(yè)務(wù)部署在多臺服務(wù)器上,提高系統(tǒng)的高可用性
=======================================================
注:為了解決集群之間的分工:引入負(fù)載均衡(nginx和zookeeper都可實(shí)現(xiàn))的概念,將請求分發(fā)到不同服務(wù)器(集群服務(wù)器)上。
=======================================================
2. ZooKeeper組成(文件系統(tǒng)、通知機(jī)制)
? 2.1? ?文件系統(tǒng)
? ?ZooKeeper維護(hù)一個類似Linux文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu),用于存儲數(shù)據(jù)
? ?數(shù)據(jù)模型結(jié)構(gòu)是一種樹形結(jié)構(gòu),由許多節(jié)點(diǎn)構(gòu)成
? ?每個節(jié)點(diǎn)叫做ZNode(ZooKeeper Node)
? ?每個節(jié)點(diǎn)對應(yīng)一個唯一路徑,通過該路徑來標(biāo)識節(jié)點(diǎn),如 /app1/p_2
? ?每個節(jié)點(diǎn)只能存儲大約1M的數(shù)據(jù)
? ?節(jié)點(diǎn)類型有四種:
? ? 持久化目錄節(jié)點(diǎn) persistent
? ? 客戶端與服務(wù)器斷開連接,該節(jié)點(diǎn)仍然存在
? ?持久化順序編號目錄節(jié)點(diǎn) persistent_sequential
? ?客戶端與服務(wù)器斷開連接,該節(jié)點(diǎn)仍然存在,此時節(jié)點(diǎn)會被順序編號,如:000001、000002.....
? ?臨時目錄節(jié)點(diǎn) ephemeral
? ?客戶端與服務(wù)器斷開連接,該節(jié)點(diǎn)會被刪除
? ?臨時順序編號目錄節(jié)點(diǎn) ephemeral_sequential
? ?客戶端與服務(wù)器斷開連接,該節(jié)點(diǎn)會被刪除,此時節(jié)點(diǎn)會被順序編號,如:000001、000002.....
2.2? ?通知機(jī)制
? ? ? ? ZooKeeper是一個基于觀察者模式設(shè)計的分布式服務(wù)管理框架
? ? 1. ZooKeeper負(fù)責(zé)管理和維護(hù)項(xiàng)目的公共數(shù)據(jù),并授受觀察者的注冊(訂閱)
? ? 2. 一旦這些數(shù)據(jù)發(fā)生變化,ZooKeeper就會通知已注冊的觀察者
? ? 3. 此時觀察者就可以做出相應(yīng)的反應(yīng)
? ? ? ? 簡單來說,客戶端注冊監(jiān)聽它關(guān)心的目錄節(jié)點(diǎn),當(dāng)目錄節(jié)點(diǎn)發(fā)生變化時,ZooKeeper會通知客戶端
? ? ? ? ZooKeeper是一個訂閱中心(注冊中心)
3: ZooKeeper應(yīng)用場景(配置管理、集群管理、負(fù)載均衡)
? ? ? ? ?3.1 配置管理
? ? ? ? ? ? ? ?場景:集群環(huán)境、服務(wù)器的許多配置都是相同的,如:數(shù)據(jù)庫連接信息,當(dāng)需要修改這些配置時必須同時修改
? ? ? ? ? ?每臺服務(wù)器,很麻煩
? ? ? ? ? ? ? ?解決:把這些配置全部放到ZooKeeper上,保存在ZooKeeper的某個目錄節(jié)點(diǎn)中,然后所有的應(yīng)用程序(客戶
? ? ? ? ? ?端)對這個目錄節(jié)點(diǎn)進(jìn)行監(jiān)視Watch,一旦配置信息發(fā)生變化,ZooKeeper會通知每個客戶端,然后從ZooKeeper獲
? ? ? ? ? ?取新的配置信息,并應(yīng)用到系統(tǒng)中。
? ? ? ? ?3.2 集群管理
? ? ? ? ? ?場景:集群環(huán)境下,如何知道有多少臺機(jī)器在工作?是否有機(jī)器退出或加入?需要選舉一個總管master,讓總
? ? 管來管理集群
? ? ? ? ? ?解決:在父目錄GroupMembers下為所有機(jī)器創(chuàng)建臨時目錄節(jié)點(diǎn),然后監(jiān)聽父目錄節(jié)點(diǎn)的子節(jié)點(diǎn)變化,一旦有
? ? 機(jī)器掛掉,該機(jī)器與ZooKeeper的連接斷開,其所創(chuàng)建的臨時目錄節(jié)點(diǎn)被刪除,所有其他機(jī)器都會收到通知。當(dāng)有
? ? 新機(jī)器加入時也是同樣的道理。
? ? 選舉master:為所有機(jī)器創(chuàng)建臨時順序編號目錄節(jié)點(diǎn),給每臺機(jī)器編號,然后每次選取編號最小的機(jī)器作為master
? ? ? ? ?3.3 負(fù)載均衡
? ? ? ? ZooKeeper本身是不提供負(fù)載均衡策略的,需要自己實(shí)現(xiàn),所以準(zhǔn)確的說,是在負(fù)載均衡中使用ZooKeeper來
? ?做集群的協(xié)調(diào)(也稱為軟負(fù)載均衡)
? ? ? 實(shí)現(xiàn)思路:
? ? ?1. 將ZooKeeper作為服務(wù)的注冊中心,所有服務(wù)器在啟動時向注冊中心登陸自己能夠提供的服務(wù)
? ? ?2. 服務(wù)的調(diào)用者到注冊中心獲取能夠提供所需要服務(wù)的服務(wù)器列表,然后自己根據(jù)負(fù)載均衡算法,從中選
?取一臺服務(wù)器進(jìn)行連接
? ? ?3. 當(dāng)服務(wù)器列表發(fā)生變化時,如:某臺服務(wù)器宕機(jī)下線,或新機(jī)器加入,ZooKeeper會自動通知調(diào)用者重新
獲取服務(wù)列表實(shí)際上利用了ZooKeeper的特性,將ZooKeeper用為服務(wù)的注冊和變更通知中心?
總結(jié)
以上是生活随笔為你收集整理的ZooKeeper入门(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 七猫小说怎么成为作者
- 下一篇: Timer定时器Demo