2.Zookeeper 集群
2.1 Zookeeper 集群簡介
2.1.1 為什么搭建 Zookeeper 集群
大部分分布式應用需要一個主控、協(xié)調(diào)器或者控制器來管理物理分布的子進程。目前,
大多數(shù)都要開發(fā)私有的協(xié)調(diào)程序,缺乏一個通用機制,協(xié)調(diào)程序的反復編寫浪費,且難以形 成通用、伸縮性好的協(xié)調(diào)器,zookeeper 提供通用的分布式鎖服務,用以協(xié)調(diào)分布式應用。 所以說 zookeeper 是分布式應用的協(xié)作服務。
zookeeper 作為注冊中心,服務器和客戶端都要訪問,如果有大量的并發(fā),肯定會有等 待。所以可以通過 zookeeper 集群解決。
下面是 zookeeper 集群部署結構圖:
2.1.2 了解 Leader 選舉
Zookeeper 的啟動過程中 leader 選舉是非常重要而且最復雜的一個環(huán)節(jié)。那么什么是 leader選舉呢?zookeeper為什么需要leader選舉呢?zookeeper的leader選舉的過程又是什 么樣子的?
首先我們來看看什么是 leader 選舉。其實這個很好理解,leader 選舉就像總統(tǒng)選舉一樣, 每人一票,獲得多數(shù)票的人就當選為總統(tǒng)了。在 zookeeper 集群中也是一樣,每個節(jié)點都會 投票,如果某個節(jié)點獲得超過半數(shù)以上的節(jié)點的投票,則該節(jié)點就是 leader 節(jié)點了。
以一個簡單的例子來說明整個選舉的過程. 假設有五臺服務器組成的 zookeeper 集群,它們的 id 從 1-5,同時它們都是最新啟動的,也 就是沒有歷史數(shù)據(jù),在存放數(shù)據(jù)量這一點上,都是一樣的.假設這些服務器依序啟動,來看看會 發(fā)生什么 。
1) 服務器 1 啟動,此時只有它一臺服務器啟動了,它發(fā)出去的報沒有任何響應,所以它的 選舉狀態(tài)一直是 LOOKING 狀態(tài)
2) 服務器 2 啟動,它與最開始啟動的服務器 1 進行通信,互相交換自己的選舉結果,由于 兩者都沒有歷史數(shù)據(jù),所以id 值較大的服務器2勝出,但是由于沒有達到超過半數(shù)以上的服務 器都同意選舉它(這個例子中的半數(shù)以上是 3),所以服務器 1,2 還是繼續(xù)保持 LOOKING 狀態(tài).
3) 服務器 3 啟動,根據(jù)前面的理論分析,服務器 3 成為服務器 1,2,3 中的老大,而與上面不 同的是,此時有三臺服務器選舉了它,所以它成為了這次選舉的 leader.
4) 服務器 4 啟動,根據(jù)前面的分析,理論上服務器 4 應該是服務器 1,2,3,4 中最大的,但是 由于前面已經(jīng)有半數(shù)以上的服務器選舉了服務器 3,所以它只能接收當小弟的命了.
作者:
黑馬程序員人工智能+python培訓學院首發(fā):
http://python.itheima.com/