目錄
一、什麼是zookeeper?
二、zookeeper保證的是哪些特性?
三、zookeeper的讀寫原理?
四、怎麼解釋zookeeper的有序性?
五、zookeeper提供了什麼?
六、 zookeeper的檔案系統是什麼?
七、zab協議是什麼?
八、 zookeeper包含哪幾種型別的資料節點?
九、 zookeeper的server工作狀態有哪些?
十一、zookeeper宕機了如何處理?
十二、 集群最少需要多少臺機器,集群規則是怎麼樣的? 十
三、集群支援動態新增機器嘛?
十四、 zookeeper常用的命令有哪些?
十五、 zookeeper對節點的watch監聽是永久的嘛? 為什麼不是永久的?
十六、chubby 是什麼,和 zookeeper 比你怎麼看?
十七、zookeeper是如何保持資料的一致性? 十
八、如果master掛了,zookeeper會怎麼辦? 答:
zookeeper是乙個開放原始碼的分布式協調服務。它是集群的管理者並監視著各節點的狀態以及根據節點的反饋進行下一步操作。
最終將簡單和效能高效、功能穩定的系統提供給使用者。
分布式應用可以基於zookeeper實現諸如資料發布/訂閱、負載均衡、命名服務、分布式協調/通知、集群管理、master選舉、分布式鎖、分布式佇列等功能。
答: 順序一致性。
原子性。
單一檢視。
可靠性。
資料的最終一致性。
答:客戶端的讀請求可以被集群中的任意一台機器處理,如果讀請求在節點上註冊了***,這個***也是由zookeeper來處理的。 對於寫請求,這些請求會**給其他zookeeper機器並且達成一致後,請求才會返回成功。因此,隨著zookeeper的集群機器增多,讀的吞吐量會增大,但寫的請求吞吐會下降。
答: 有序性是zookeeper中非常重要的乙個特性,所有的更新都是有序的。並且每乙個更新都會有乙個時間戳,這個時間戳稱為zxid,全名為zookeeper transaction id ,而讀請求只會相對於個更新有序,也就是讀請求的返回結果為最新的zxid。
答:檔案系統。
通知機制。
答:zookeeper 提供乙個多層級的節點命名空間(節點稱為 znode)。與檔案系統不 同的是,這些節點都可以設定關聯的資料,而檔案系統中只有檔案節點可以存放 資料而目錄節點不行。 zookeeper 為了保證高吞吐和低延遲,在記憶體中維護了這個樹狀的目錄結構,這種特性使得 zookeeper 不能用於存放大量的資料,每個節點的存放資料上限為1m。
答: zab協議是專門為分布式協調服務zookeeper設計的乙個支援崩潰恢復的原子廣播協議。
zab協議包括兩種基本模式:崩潰恢復和訊息廣播。
當整個zookeeper集群剛剛啟動或者宕機、重啟或者網路故障導致存在過半的zookeeper伺服器不能夠使用時,所有的程序進入崩潰恢復模式,重新選舉乙個新的leader,leader選舉完畢以後,如果存在過半的機器能夠與leader進行資料同步,那麼進入訊息廣播模式,leader開始接受客戶端的事務請求並進行處理。廣播模式需要保證proposal被按順序處理,因此zk採 用了遞增的事務id號(zxid)來保證。所有的提議 (proposal)都在被提出的時候加上了zxid。實現中 zxid是乙個64為的數字,它高32位是epoch用來標識 leader關係是否改變,每次乙個leader被選出來,它 都會有乙個新的epoch。低32位是個遞增計數。 答:
1、persistent-持久節點 除非手動刪除,否則節點一直存在於 zookeeper 上 2、
ephemeral
-臨時節點 臨時節點的生命週期與客戶端會話繫結,一旦客戶端會話失效(客戶端與
zookeeper 連線斷開不一定會話失效),那麼這個客戶端建立的所有臨時節點都 會被移除。 3、
persistent_sequential
-持久順序節點 基本特性同持久節點,只是增加了順序屬性,節點名後邊會追加乙個由父節點維 護的自增整型數字 4、
ephemeral_sequential
-臨時順序節點 基本特性同臨時節點,增加了順序屬性,節點名後邊會追加乙個由父節點維護的 自增整型數字。
答:
有4種狀態。 looking,following,leading,observing。
1、looking:尋找leader狀態。當伺服器處於該狀態時,它會認為當前集群中沒有leader,因此需要進入leader選舉狀態。
2、following:跟隨者狀態。表明當前伺服器角色是follower。
3、leading:領導者狀態。表明當前伺服器角色是leader。
4、observing:觀察者狀態。表明當前伺服器角色是observer。
十、分布式集群中為什麼要有master?答:
在分布式環境中,有些業務邏輯只需要集群中的某一台機器進行執行。其他機器可以共享這個計算結果,這樣就大大減少了重複計算,提高效能。於是就需要進行leader選舉,leader的作用為了給folower完成資料同步。
答: zookeeper本身也是集群,推薦配置不少於3個伺服器。zookeeper自身也要保證當乙個節點宕機時,其他節點會繼續提供服務。
如果是乙個follower宕機,還有2臺伺服器提供訪問,因為zookeeper上的資料是有多個副本的,資料並不會丟失;
如果是乙個leader宕機,zookeeper會選舉出新的leader。
zk集群的機制是只要超過半數的節點正常,集群就能正常提供服務,即過半可使用原則。只有在zk節點掛得太多,只剩一半或不到一半節點能工作,集群才失效。
所以3個節點的cluster可以掛掉1個節點(leader可以得到2票》1.5)。
2個節點的cluster就不能掛掉任何1個節點了(leader可以得到1票<=1)。
答:
2n+1臺,n>0,即最少為3臺。
答:
支援,主要包含2種方式,如下:
全部重啟:關閉所有zookeeper服務,修改配置之後啟動。不影響之前客戶端的會話。
逐個重啟:在過半存活即可用的原則下,一台機器重啟不影響整個集群對外提供服務。這是比較常用的方式。3.5版本開始支援動態擴容。
答: ls get set create delete等。
答:不是永久監聽的。 如果每個客戶端對伺服器的資訊變動是永久監聽的,那麼當有很多客戶端的時候,伺服器的資料發生頻繁更新時,所有的客戶端將會收到通知。那麼伺服器和網路的壓力也因此會變大。
如果客戶端沒有設定watch事件,那麼伺服器的資料發生更新時,不會通知該客戶端。
在實際的應用中,客戶端不需要了解伺服器的內部的資料變更,只需要得到最新的資料即可。答:
chubby 是 google 的,完全實現 paxos 演算法,不開源。zookeeper 是 chubby 的開源實現,使用 zab 協議,paxos 演算法的變種。
這個原則就是:在乙個分布式資料庫系統中,如果各節點的初始狀態一致,每個節點都執行相同的操作序列,那麼他們最後能得到乙個一致的狀態。
十八、paxos演算法解決的什麼問題呢?
解決的就是保證每個節點執行相同的操作序列,master維護乙個全域性寫佇列,所有寫操作都必須放入這個佇列編號,那麼無論我們寫多少個節點,只要寫操作是按編號來的,就能保證一致性。
paxos演算法通過投票來對寫操作進行全域性編號,同一時刻,只有乙個寫操作被批准,同時併發的寫操作要去爭取選票,只有獲得過半數選票的寫操作才會被批准(所以永遠只會有乙個寫操作得到批准),其他的寫操作競爭失敗只好再發起一輪投票,就這樣,在日復一日年復一年的投票中,所有寫操作都被嚴格編號排序。編號嚴格遞增,當乙個節點接受了乙個編號為100的寫操作,之後又接受到編號為99的寫操作(因為網路延遲等很多不可預見原因),它馬上能意識到自己資料不一致了,自動停止對外服務並重啟同步過程。任何乙個節點掛掉都不會影響整個集群的資料一致性(總2n+1臺,除非掛掉大於n臺)。
面試題集錦
假定 54,首先,我們有乙個隨機函式發生器,能夠產生1 54之間的隨機數,如何保證抽第一張牌是54中可能,抽第二張牌是53中可能,可以這樣做,假設撲克牌是乙個54維的陣列card,我們要做的就是從這個陣列中隨機取乙個元素,然後在剩下的元素裡再隨機取乙個元素 這裡涉及到乙個問題,就是每次取完元素後,我...
面試題集錦
1 裝箱和拆箱的分別?答 裝箱就是把值型別轉換成引用型別 拆箱就是把引用型別轉換成值型別。2 怎樣建立乙個執行緒?答 一使用thread類 二使用delegate.begininvoke 三使用threadpool.queueworkitem。3 string是值型別,還是引用型別?與stringb...
zookeeper面試集錦
先新增一台zookeeper機器同步資料,然後關閉原先的機器 1.資料發布訂閱,2.統一命令服務 3.分布式通知與協調 4.分布式鎖 5.集群監控 6.分布式佇列 7.master選舉 集群容災數量 集群總節點數 2 1,假設5臺,最多可以掛2臺,如果掛三颱,集群選舉達不到滿足條件,6臺的話也是最多...