1. 程式人生 > >三臺伺服器搭建zookeeper叢集

三臺伺服器搭建zookeeper叢集

    ZooKeeper是一個分散式的,開放原始碼的分散式應用程式協調服務,它包含一個簡單的原語集,分散式應用程式可以基於它實現同步服務,配置維護和命名服務等。Zookeeper是hadoop的一個子專案,在分散式應用中,由於工程師不能很好地使用鎖機制,以及基於訊息的協調機制不適合在某些應用中使用,因此需要有一種可靠的、可擴充套件的、分散式的、可配置的協調機制來統一系統的狀態。

執行原理:Zookeeper的核心是原子廣播,這個機制保證了各個Server之間的同步。實現這個機制的協議叫做Zab協議。Zab協議有兩種模式,它們分別是恢復模式(選主)和廣播模式(同步)。當服務啟動或者在領導者崩潰後,Zab就進入了恢復模式,當領導者被選舉出來,且大多數Server完成了和leader的狀態同步以後,恢復模式就結束了。狀態同步保證了leader和Server具有相同的系統狀態。為了保證事務的順序一致性,zookeeper採用了遞增的事務id號(zxid)來標識事務。所有的提議(proposal)都在被提出的時候加上了zxid。實現中zxid是一個64位的數字,它高32位是epoch用來標識leader關係是否改變,每次一個leader被選出來,它都會有一個新的epoch,標識當前屬於那個leader的統治時期。低32位用於遞增計數。


每個Server在工作過程中有三種狀態:
LOOKING:當前Server不知道leader是誰,正在搜尋
LEADING:當前Server即為選舉出來的leader
FOLLOWING:leader已經選舉出來,當前Server與之同步

環境:

    192.9.200.130    192.9.200.159    192.9.200.160

解壓及安裝:

    我下載的是zookeeper-3.5.3

    將zookeeper壓縮包複製到linux下。

    1、解壓:

        tar -xvf zookeeper-3.53.tar.gz(注意:解壓的時候引數不要用zxf,要用xvf)

    2、將解壓後的zookeeper移動到/usr/local/目錄下。

        mv zookeeper-3.5.3 /usr/local/

    3、修改名稱

        mv zookeeper-3.53 zookeeper

    4、複製zookeeper/conf/zoo_sample.cfg為zoo.cfg

        cp zoo_sample.cfg zoo.cfg

    5、修改zoo.cfg

        vi zoo.cfg

        1)、修改dataDir=/usr/local/zookeeper/data

        2)、新增dataLogDir=/usr/local/zookeeper/log

        3)、最後面新增

            server.1=192.9.200.130:2888:3888

            server.2=192.9.200.159:2888:3888

            server.3=192.9.200.160:2888:3888

             解釋:ip地址:心跳埠:服務埠

    6、在zookeeper目錄下新建data和log目錄

        mkdir data    mkdir log

    7、在data目錄下新建myid檔案

            touch myid    (第1個伺服器的myid為1,第2個為2,第3個為3.   分別對應server.1、server.2、server.3

3臺伺服器以上步驟都相同。

    =======================我是一條華麗的分割線===============================

    8、分別啟動3臺伺服器。

        1)、進入zookeeper/bin目錄

            ./zkServer.sh start

        2)、檢視啟動是否成功,三臺伺服器會選擇一臺作為leader,另外兩臺作為follower

            ./zkServer.sh status

    9、OK,叢集搭建成功。

注意事項:

    1、需要關閉防火牆。

    2、當我們啟動第一個zookeeper的時候,檢視狀態會出現

        

        檢視zookeeper/logs/zookeeper.out日誌,發現另外兩個伺服器拒絕連結,這是因為另外兩個伺服器zookeeper沒有啟動,不用管,然後啟動另外兩個伺服器,之後將第一個伺服器重啟下就可以。