zookeeper配置


zookeeper簡單可以概括為:一致、有頭、數據數。

一致:就是每個節點的數據都是一致的。

有頭:節點一般為單數,因為要選舉一個leader,其他都是follower,當leader的服務器掛了之后zookeeper會自己選舉算法重新選定leader。默認的算法是FastLeaderElection,默認是采用投票數大於半數則勝出的邏輯。

數據數:每一個節點綁定一份數據,可以是樹狀。所以稱為數據樹;

zookeeper集群有個重要的特性,即只要集群中超過一半的機器可用,則集群整體對外是可用的。一半來說,集群中配置的機器數量一半為基數個數,當只有兩個zookeeper機器時,掛掉一個zookeeper則不滿足超過一半機器可用,如果此時有三台機器掛一台的情況下集群還是可用的。

 

安裝配置:

一般我們會把中間都安裝在/usr/local下,這個相當於window環境的Program Files目錄。解壓后,在zookeeper文件下有一個conf文件夾。里面默認有三個文件:

configuration.xsl
log4j.properties
zoo_sample.cfg

把zoo_sample.cfg 文件復制一份命名為 zoo.cfg。里面的配置都暫時不用改,在文件最下面加上所有機器的IP和端口:

server.1=192.168.0.110:2888:3888
server.2=192.168.0.111:2888:3888
server.3=192.168.0.112:2888:3888

 在zoo.cfg的配置中有一個默認的路徑:tmp/zookeeper 。zookeeper的數據都是在內存中的,但是在本地文件也會存一份,放置在該路徑下,這是臨時的路徑,zookeeper會定時清理,所以上生產此文件夾必須修改成其他文件夾。

在每台機器的該路徑下創建一個myid 的文件。在里面寫自己的別名。如上面配置的三台機器。第一台機器(192.168.0.110)的myid里面就寫1,第二台(192.168.0.111)的myid寫2,第三台(192.168.0.112)的myid寫3

 以上以完成配置,接下來就可以啟動了:

cd bin

./zkServer.sh start      啟動

./zkServer.sh stop      停止

./zkServer.sh status   顯示狀態

 

zookeeper應用場景:

配置一致:在zookeeper上做一個監聽器,監聽所有的集群機器,修改配置后所有被監聽的機器都收到了。

HA:(High Available), 高可用性集群,相當於主備動態切換。

pub/sub:

naming service:

load balance:

分布式鎖:

 

 

FastLeaderElection選舉算法

FastLeaderElection是標准的fast paxos的實現,它首先向所有Server提議自己要成為leader,當其它Server收到提議以后,解決 epoch 和 zxid 的沖突,並接受對方的提議,然后向對方發送接受提議完成的消息。

FastLeaderElection算法通過異步的通信方式來收集其它節點的選票,同時在分析選票時又根據投票者的當前狀態來作不同的處理,以加快Leader的選舉進程。

每個Server都一個接收線程池和一個發送線程池, 在沒有發起選舉時,這兩個線程池處於阻塞狀態,直到有消息到來時才解除阻塞並處理消息,同時每個Serve r都有一個選舉線程(可以發起選舉的線程擔任)。

1). 主動發起選舉端(選舉線程)的處理

首先自己的 logicalclock加1,然后生成notification消息,並將消息放入發送隊列中, 系統中配置有幾個Server就生成幾條消息,保證每個Server都能收到此消息,如果當前Server 的狀態是LOOKING就一直循環檢查接收隊列是否有消息,如果有消息,根據消息中對方的狀態進行相應的處理。

2).主動發送消息端(發送線程池)的處理

將要發送的消息由Notification消息轉換成ToSend消息,然后發送對方,並等待對方的回復。

3). 被動接收消息端(接收線程池)的處理

將收到的消息轉換成Notification消息放入接收隊列中,如果對方Server的epoch小於logicalclock則向其發送一個消息(讓其更新epoch);如果對方Server處於Looking狀態,自己則處於Following或Leading狀態,則也發送一個消息(當前Leader已產生,讓其盡快收斂)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM