網(wǎng)站頭部怎么做青島網(wǎng)站建設(shè)優(yōu)化
目錄
一、ZooKeeper是什么
二、ZooKeeper的工作機(jī)制
三、ZooKeeper特點(diǎn)
四、ZooKeeper數(shù)據(jù)結(jié)構(gòu)
五、ZooKeeper應(yīng)用場(chǎng)景
5.1統(tǒng)一命名服務(wù)
5.2統(tǒng)一配置管理
5.3統(tǒng)一集群管理
5.4服務(wù)器動(dòng)態(tài)上下線
5.5軟負(fù)載均衡
六、ZooKeeper的選舉機(jī)制
6.1第一次啟動(dòng)選舉機(jī)制
6.2非第一次啟動(dòng)選舉機(jī)制
七、zookeeper集群部署
一、ZooKeeper是什么
Zookeeper是一個(gè)開(kāi)源的分布式的,為分布式框架提供協(xié)調(diào)服務(wù)的Apache項(xiàng)目
二、ZooKeeper的工作機(jī)制
Zookeeper從設(shè)計(jì)模式角度來(lái)理解:是一個(gè)基于觀察者模式設(shè)計(jì)的分布式服務(wù)管理框架,它負(fù)責(zé)存儲(chǔ)和管理大家都關(guān)心的數(shù)據(jù),然后接受觀察者的注冊(cè),一旦這些數(shù)據(jù)的狀態(tài)發(fā)生變化,Zookeeper就將負(fù)責(zé)通知已經(jīng)在Zookeeper上注冊(cè)的那些觀察者做出相應(yīng)的反應(yīng)。也就是說(shuō)
Zookeeper = 注冊(cè)中心+文件系統(tǒng) + 通知機(jī)制
工作機(jī)制
1、每個(gè)服務(wù)端上線時(shí)需要到zookeeper集群注冊(cè)信息
2、客戶端從zookeeper集群獲取在線服務(wù)端信息列表并監(jiān)聽(tīng)
3、服務(wù)端上線下線時(shí),zookeeper需要更新列表信息并通知客戶端
4、客戶端接收到通知重新獲取zookeeper在線服務(wù)器列表
三、ZooKeeper特點(diǎn)
(1)Zookeeper:一個(gè)領(lǐng)導(dǎo)者(Leader),多個(gè)跟隨者(Follower)組成的集群
(2)Zookeeper集群中只要有半數(shù)以上節(jié)點(diǎn)存活,Zookeeper集群就能正常服務(wù),所以Zookeeper適合安裝奇數(shù)臺(tái)服務(wù)器
(3)全局?jǐn)?shù)據(jù)一致:每個(gè)Server保存一份相同的數(shù)據(jù)副本,Client無(wú)論連接到哪個(gè)Server,數(shù)據(jù)都是一致的。
(4)更新請(qǐng)求順序執(zhí)行,來(lái)自同一個(gè)Client的更新請(qǐng)求按其發(fā)送順序依次執(zhí)行,即先進(jìn)先出。
(5)數(shù)據(jù)更新原子性,一次數(shù)據(jù)更新要么成功,要么失敗。
(6)實(shí)時(shí)性,在一定時(shí)間范圍內(nèi),Client能讀到最新數(shù)據(jù)。
四、ZooKeeper數(shù)據(jù)結(jié)構(gòu)
ZooKeeper數(shù)據(jù)模型的結(jié)構(gòu)與Linux文件系統(tǒng)很類似,整體上可以看作是一棵樹(shù),每個(gè)節(jié)點(diǎn)稱做一個(gè)ZNode。每一個(gè)ZNode默認(rèn)能夠存儲(chǔ)1MB的數(shù)據(jù),每個(gè)ZNode都可以通過(guò)其路徑唯一標(biāo)識(shí)。
五、ZooKeeper應(yīng)用場(chǎng)景
提供的服務(wù)包括:
統(tǒng)一命名服務(wù)、統(tǒng)一配置管理、統(tǒng)一集群管理、服務(wù)器節(jié)點(diǎn)動(dòng)態(tài)上下線、軟負(fù)載均衡等
5.1統(tǒng)一命名服務(wù)
在分布式環(huán)境下,經(jīng)常需要對(duì)應(yīng)用/服務(wù)進(jìn)行統(tǒng)一命名,便于識(shí)別。例如:IP不容易記住,而域名容易記住。
5.2統(tǒng)一配置管理
(1)分布式環(huán)境下,配置文件同步非常常見(jiàn)。一般要求一個(gè)集群中,所有節(jié)點(diǎn)的配置信息是一致的,比如Kafka集群。對(duì)配置文件修改后,希望能夠快速同步到各個(gè)節(jié)點(diǎn)上。
(2)配置管理可交由ZooKeeper實(shí)現(xiàn)??蓪⑴渲眯畔懭隯ooKeeper上的一個(gè)Znode。各個(gè)客戶端服務(wù)器監(jiān)聽(tīng)這個(gè)Znode。一旦Znode中的數(shù)據(jù)被修改,ZooKeeper將通知各個(gè)客戶端服務(wù)器。
5.3統(tǒng)一集群管理
(1)分布式環(huán)境中,實(shí)時(shí)掌握每個(gè)節(jié)點(diǎn)的狀態(tài)是必要的。可根據(jù)節(jié)點(diǎn)實(shí)時(shí)狀態(tài)做出一些調(diào)整。
(2)ZooKeeper可以實(shí)現(xiàn)實(shí)時(shí)監(jiān)控節(jié)點(diǎn)狀態(tài)變化。可將節(jié)點(diǎn)信息寫入ZooKeeper上的一個(gè)ZNode。監(jiān)聽(tīng)這個(gè)ZNode可獲取它的實(shí)時(shí)狀態(tài)變化。
5.4服務(wù)器動(dòng)態(tài)上下線
客戶端能實(shí)時(shí)洞察到服務(wù)器上下線的變化
5.5軟負(fù)載均衡
在Zookeeper中記錄每臺(tái)服務(wù)器的訪問(wèn)數(shù),讓訪問(wèn)數(shù)最少的服務(wù)器去處理最新的客戶端請(qǐng)求(這邊最小連接調(diào)度算法嘛)
六、ZooKeeper的選舉機(jī)制
6.1第一次啟動(dòng)選舉機(jī)制
(1)服務(wù)器1啟動(dòng),發(fā)起一次選舉。服務(wù)器1投自己一票。此時(shí)服務(wù)器1票數(shù)一票,不夠半數(shù)以上
(3票),選舉無(wú)法完成,服務(wù)器1狀態(tài)保持為L(zhǎng)OOKING;
(2)服務(wù)器2啟動(dòng),再發(fā)起一次選舉。服務(wù)器1和2分別投自己一票并交換選票信息:此時(shí)服務(wù)器1
發(fā)現(xiàn)服務(wù)器2的myid比自己目前投票推舉的(服務(wù)器1)大,更改選票為推舉服務(wù)器2。此時(shí)服務(wù)器
1票數(shù)0票,服務(wù)器2票數(shù)2票,沒(méi)有半數(shù)以上結(jié)果,選舉無(wú)法完成,服務(wù)器1,2狀態(tài)保持LOOKING
(3)服務(wù)器3啟動(dòng),發(fā)起一次選舉。此時(shí)服務(wù)器1和2都會(huì)更改選票為服務(wù)器3
此次投票結(jié)果:服務(wù)器1為0票,服務(wù)器2為0票,服務(wù)器3為3票。
此時(shí)服務(wù)器3的票數(shù)已經(jīng)超過(guò)半數(shù),服務(wù)器3當(dāng)選Leader。
服務(wù)器1,2更改狀態(tài)為FOLLOWING,服務(wù)器3更改狀態(tài)為L(zhǎng)EADING;
(4)服務(wù)器4啟動(dòng),發(fā)起一次選舉。此時(shí)服務(wù)器1,2,3已經(jīng)不是LOOKING狀態(tài),不會(huì)更改選票信息。
交換選票信息結(jié)果:服務(wù)器3為3票,服務(wù)器4為1票。此時(shí)服務(wù)器4服從多數(shù),更改選票信息為服務(wù)器3,并更改狀態(tài)為FOLLOWING;
(5)服務(wù)器5啟動(dòng),同4一樣當(dāng)小弟
比較服務(wù)器的myid大小,誰(shuí)的myid越大則獲取其他節(jié)點(diǎn)的選票,當(dāng)選票數(shù)量超過(guò)服務(wù)器節(jié)點(diǎn)數(shù)量的半數(shù)以后,則當(dāng)選leader,其他節(jié)點(diǎn)為follower。即使有新的更大myid節(jié)點(diǎn)加入集群,也不變,此時(shí)比票數(shù)
1. ?1)服務(wù)器1啟動(dòng)后,發(fā)起一次選舉。 ??2)服務(wù)器1投自己一票,此時(shí)服務(wù)器1只有一票,不夠半數(shù)以上,選舉無(wú)法完成 ? ?3)此時(shí)服務(wù)器1狀態(tài)為L(zhǎng)ooking
------------------------------------------------
2. ? ?1)服務(wù)器2啟動(dòng),再發(fā)起一次選舉。 ? ?2)服務(wù)器1和2分別投服務(wù)器2一票(服務(wù)器更改剛剛投自己的一票) ? ?3)此時(shí)服務(wù)器1為0票;服務(wù)器2為2票,沒(méi)有半數(shù),選舉不成功 ? ?4)此時(shí),服務(wù)器1和2狀態(tài)為L(zhǎng)ooking
------------------------------------(為什么1會(huì)投2?:因?yàn)榉?wù)器2的id比服務(wù)器1大,所以服務(wù)器1會(huì)投服務(wù)器2)
------------------------------------------------------
3. ? ??1)服務(wù)器3啟動(dòng),發(fā)起選舉。 ? ?2)服務(wù)器1和2會(huì)更改選票,投給服務(wù)器3 ? ?3)此時(shí),服務(wù)器3為3票,以超過(guò)半數(shù),服務(wù)器3當(dāng)選為領(lǐng)導(dǎo)者 ? ?4)此時(shí),服務(wù)器1和2狀態(tài)為跟隨者,服務(wù)器3為領(lǐng)導(dǎo)者
-------------------------------------------------------
4. ? ??1)之后服務(wù)器啟動(dòng),會(huì)發(fā)起選舉 ? ?2)雖然后面的服務(wù)器myid都比服務(wù)器3大 ? ?3)但是此時(shí)服務(wù)器3已經(jīng)是領(lǐng)導(dǎo)者了,服務(wù)器1,2,3不會(huì)更改選票信息了 ? ?4)之后的服務(wù)器都將是服務(wù)器3的跟隨者
6.2非第一次啟動(dòng)選舉機(jī)制
1.EPOCH大的直接勝出
2.EPOCH相同,事務(wù)id大的勝出
3.事務(wù)id相同,服務(wù)器id大的勝出
SID:服務(wù)器ID。用來(lái)唯一標(biāo)識(shí)一臺(tái)ZooKeeper集群中的機(jī)器,每臺(tái)機(jī)器不能重復(fù),和myid一致。(表示服務(wù)器的唯一標(biāo)志id)
ZXID:事務(wù)ID。ZXID是一個(gè)事務(wù)ID,用來(lái)標(biāo)識(shí)一次服務(wù)器狀態(tài)的變更。在某一時(shí)刻,集群中的每臺(tái)機(jī)器的ZXID值不一定完全一致,這和ZooKeeper服務(wù)器對(duì)于客戶端“更新請(qǐng)求”的處理邏輯速度有關(guān)。(表示處理任務(wù)的數(shù)量)
Epoch:每個(gè)Leader任期的代號(hào)。沒(méi)有Leader時(shí)同一輪投票過(guò)程中的邏輯時(shí)鐘值是相同的。每投完一次票這個(gè)數(shù)據(jù)就會(huì)增加(表示參與選舉的次數(shù))