一文簡單了解并部署Zookeeper集群
1.Zookeeper概述
Zookeeper對于很多人開始可能都有所耳聞,他的使用場景也很多,可以以節(jié)點的形式存儲持久化數(shù)據(jù),也可以使用這一特性來作為微服務(wù)的服務(wù)注冊中心,簡單來說,Zookeeper 是一個開源的分布式的,為分布式框架提供協(xié)調(diào)服務(wù)的 Apache 項目。
Zookeeper從設(shè)計模式角度來理解,是一個基于觀察者模式設(shè)計的分布式服務(wù)管理框架。是一個文件系統(tǒng),負(fù)責(zé)存儲和管理大家都關(guān)心的數(shù)據(jù),然后接受觀察者的注冊;也是一種通知機制,一旦這些數(shù)據(jù)的狀態(tài)發(fā)生變化,Zookeeper就將負(fù)責(zé)通知已經(jīng)在Zookeeper上注冊的那些觀察者做出相應(yīng)的反應(yīng)。
2.Zookeeper的應(yīng)用場景和一些注意事項
ZooKeeper 數(shù)據(jù)模型的結(jié)構(gòu)與 Unix 文件系統(tǒng)很類似,整體上可以看作是一棵樹,每個節(jié)點稱做一個 ZNode。每一個 ZNode 默認(rèn)能夠存儲 1MB 的數(shù)據(jù),每個 ZNode 都可以通過其路徑唯一標(biāo)識。
Zookeeper的應(yīng)用場景有許多,比如統(tǒng)一的配置管理,在許多分布式環(huán)境中,通常一個服務(wù)集群的配置文件信息是一致的,如果需要修改配置信息內(nèi)容,不可能逐個對每個服務(wù)做修改,而是希望修改一次配置信息就可以同步給所有服務(wù)節(jié)點,Zookeeper就可以實現(xiàn)這個業(yè)務(wù),十分簡單,可以將服務(wù)的配置信息寫入ZooKeeper上的一個Znode中,讓每個集群節(jié)點的服務(wù)器都去監(jiān)聽這個Znode,一旦數(shù)據(jù)被修改,ZooKeeper將通知各個服務(wù)器,達(dá)到同步的效果。還可以做統(tǒng)一的集群管理、服務(wù)器的動態(tài)上下線、以及軟負(fù)載均衡的效果。
在實踐Zookeeper前還需要注意的內(nèi)容:
- Zookeeper:一個領(lǐng)導(dǎo)者(Leader),多個跟隨者(Follower)組成的集群。
- 集群正常運行的前提條件是集群節(jié)點大于半數(shù),因此集群節(jié)點數(shù)最好采用奇數(shù)個。
- 全局?jǐn)?shù)據(jù)一致:每個Server保存一份相同的數(shù)據(jù)副本,Client無論連接到哪個Server,數(shù)據(jù)都是一致的。
- 更新請求順序執(zhí)行,來自同一個Client的更新請求按其發(fā)送順序依次執(zhí)行。
- 數(shù)據(jù)更新原子性,一次數(shù)據(jù)更新要么成功,要么失敗。
- 實時性,在一定時間范圍內(nèi),Client能讀到最新數(shù)據(jù)。
3.簡單部署Zookeeper集群
官網(wǎng)地址:https://zookeeper.apache.org/,本文采用VMware創(chuàng)建3臺虛擬機構(gòu)建集群,XShell工具連接虛擬機進(jìn)行操作:
首先為機子安裝jdk,采用yum源安裝,注意設(shè)置yum,靜等安裝成功出現(xiàn)“Complete”即可:
- 進(jìn)入/usr/local/目錄,將提前準(zhǔn)備好的“zookeeper-3.4.5.tar.gz”文件傳入目錄,并解壓:
- 修改文件名為“zookeeper”:
- 修改環(huán)境變量:
- 重新編譯“/etc/profile”:
- 進(jìn)入conf目錄下,將“zoo_sample.cfg”拷貝生成“zoo.cfg”文件作為zookeeper的配置文件:
- 修改“zoo.cfg”文件:
- 配置文件中主要要配置數(shù)據(jù)存放路徑和日志路徑,zookeeper默認(rèn)的數(shù)據(jù)存放路徑為"dataDir=/tmp/zookeeper",為臨時數(shù)據(jù),會過期,本文將重新指定相關(guān)位置,存放在“自己”的路徑下,當(dāng)然也可以根據(jù)需要建立單獨路徑進(jìn)行存放。
- 簡單解釋下集群配置:
- server.A=B:C:D
- A 是一個數(shù)字,表示這個是第幾號服務(wù)器;集群模式下配置一個文件 myid,這個文件在 dataDir 目錄下,這個文件里面有一個數(shù)據(jù)就是 A 的值,Zookeeper 啟動時讀取此文件,拿到里面的數(shù)據(jù)與 zoo.cfg 里面的配置信息比較從而判斷到底是哪個 server。
- B 是這個服務(wù)器的地址;
- C 是這個服務(wù)器 Follower 與集群中的 Leader 服務(wù)器交換信息的端口;
- D 是萬一集群中的 Leader 服務(wù)器掛了,需要一個端口來重新進(jìn)行選舉,選出一個新的Leader,而這個端口就是用來執(zhí)行選舉時服務(wù)器相互通信的端口。
- 回到”zookeeper“目錄下,創(chuàng)建配置文件中提到的兩個路徑并賦予權(quán)限:
- 來到“data/”路徑下,創(chuàng)建myid文件,并給相應(yīng)值
1
:
- 此刻對于集群節(jié)點的第一臺機器就配置完成了,另外兩臺機器需要在準(zhǔn)備好環(huán)境并設(shè)置好環(huán)境變量的前提下進(jìn)行
- 通過第一臺機器將配置好的zookeeper及集群配置下發(fā)到另外兩臺機器上,注意修改對應(yīng)機器的myid:
- 修改myid值為2和3后,集群部署完畢。
- 進(jìn)入到01機器的zookeeper目錄下,啟動zookeeper:
- 此時集群沒辦法起來,因為目前只有一個節(jié)點開啟
- 當(dāng)?shù)诙_啟動以后,集群節(jié)點超過半數(shù),第二臺機器就會選舉成為leader
- 第一臺就變成follower了
- 開啟第三臺后,第二臺機器已經(jīng)是leader了,除非機器宕機會觸發(fā)重新選舉
- 關(guān)于zookeeper的操作可以通過啟動啟動客戶端:
- 至此測試完成,zookeeper集群部署完畢,更多zookeeper操作可以參照zookeeper官方文檔。