大數據服務器之間是怎麼配合的?分佈式Zookeeper集群安裝與配置

在閱讀本文之前,建議先閱讀以下文章:

1、

2、

本文的所有內容都是基於上述文章的設定進行後續的安裝與測試。


大數據服務器之間是怎麼配合的?分佈式Zookeeper集群安裝與配置


Zookeeper能做什麼?


大數據服務器之間是怎麼配合的?分佈式Zookeeper集群安裝與配置


下面這段內容摘自《從Paxos到Zookeeper 》第四章第一節的某段內容,推薦大家閱讀一下:

Zookeeper最早起源於雅虎研究院的一個研究小組。在當時,研究人員發現,在雅虎內部很多大型系統基本都需要依賴一個類似的系統來進行分佈式協調,但是這些系統往往都存在分佈式單點問題。所以,雅虎的開發人員就試圖開發一個通用的無單點問題的分佈式協調框架,以便讓開發人員將精力集中在處理業務邏輯上。

關於"ZooKeeper"這個項目的名字,其實也有一段趣聞。在立項初期,考慮到之前內部很多項目都是使用動物的名字來命名的(例如著名的Pig項目),雅虎的工程師希望給這個項目也取一個動物的名字。時任研究院的首席科學家Raghu Ramakrishnan開玩笑地說:"在這樣下去,我們這兒就變成動物園了!"此話一出,大家紛紛表示就叫動物園管理員吧一一一因為各個以動物命名的分佈式組件放在一起,雅虎的整個分佈式系統看上去就像一個大型的動物園了,而Zookeeper正好要用來進行分佈式環境的協調一一於是,Zookeeper的名字也就由此誕生了。

大數據服務器之間是怎麼配合的?分佈式Zookeeper集群安裝與配置


Zookeeper怎麼工作的?

用最簡單的話來描述一下Zookeeper集群用法:

1、奇數臺Zookeeper服務器組成一個集群,比如:配置三臺Zookeeper服務器;

2、默認三臺Zookeeper的權利都是對等的;

3、三臺Zookeeper共同投票選舉其中一個為leader(負責寫數據),剩下的是follower(負責對外提供讀取數據服務);

4、三臺Zookeeper可以允許有一臺的故障,也就是2n+1臺Zookeeper服務器最多允許n臺故障;

5、剩下的無故障的2臺Zookeeper(大於等於n+1臺)如果沒有leader,則會重新選舉出一個leader(負責寫數據);

6、三臺Zookeeper共同負責管理所有的其他大數據服務,比如:Hadoop、HBase等;

7、比如Hadoop的雙NameNode服務,如果主NameNode故障退出,從NameNode會變成主NameNode,Zookeeper會記錄這個事情並對外公佈這個變更;

8、任何一個客戶端問Zookeeper主NameNode是哪個的時候,Zookeeper會告訴它準確的信息。

9、故障的NameNode重新啟動之後,將會在Zookeeper的協調下變成從NameNode,服務正常的對外提供服務,整個過程週而復始。

大數據服務器之間是怎麼配合的?分佈式Zookeeper集群安裝與配置

下載安裝Zookeeper

搜索引擎搜索Zookeeper找到標題為"download the zookeeper from apache mirror site"的鏈接,點開以後就能看到如下的內容,官方會建議咱們到國內的鏡像上下載,隨便點擊一個官方推薦的國內鏡像即可下載:

大數據服務器之間是怎麼配合的?分佈式Zookeeper集群安裝與配置

點開鏡像網站以後,點擊最新的版本目錄,比如"zookeeper-3.5.6",然後下載對應的軟件安裝版本,為了快速部署,我們直接下載bin版本的"apache-zookeeper-3.5.6-bin.tar.gz",為了在CentOS Linux 8 裡面直接安裝,我們點擊右鍵"複製鏈接地址"。

大數據服務器之間是怎麼配合的?分佈式Zookeeper集群安裝與配置

大數據服務器之間是怎麼配合的?分佈式Zookeeper集群安裝與配置

將apache-zookeeper-3.5.6-bin.tar.gz下載到本地,然後上傳到CentOS Linux 8裡面,或者使用"curl -O 剛才複製的鏈接地址"在服務器上直接下載,建議使用直接下載的方式:

大數據服務器之間是怎麼配合的?分佈式Zookeeper集群安裝與配置

<code>tar -zxvf apache-zookeeper-3.5.6-bin.tar.gz/<code>
<code>mkdir /home/hadoop/server/<code>
<code>mkdir -p /home/hadoop/data/zkdata/<code>
<code>mkdir -p /home/hadoop/log/zklog/<code>
<code>mv apache-zookeeper-3.5.6-bin/ /home/hadoop/server//<code>
<code>ln -sf /home/hadoop/server/apache-zookeeper-3.5.6-bin/ /home/hadoop/zookeeper/<code>
<code>chown -R hadoop:hadoop /home/hadoop/*/<code>
大數據服務器之間是怎麼配合的?分佈式Zookeeper集群安裝與配置

修改環境變量

<code>vi /etc/profile/<code>

文件底部添加以下內容

export ZOOKEEPER_HOME="/home/hadoop/zookeeper"

export PATH=$ZOOKEEPER_HOME/bin:$PATH

大數據服務器之間是怎麼配合的?分佈式Zookeeper集群安裝與配置

Zookeeper的安裝至此結束,下面開始配置它。

配置Zookeeper

由於Zookeeper類似於民主選舉,每臺服務器分別投票共同選舉一個作為leader,剩下的都是follower。基於這個原因,官方建議服務器集群設置為奇數臺,偶數臺的話會有一臺的資源浪費。根據咱們的集群規劃:226-228為我們的Zookeeper服務器。

先用root權限操作:

先用root權限操作:

先用root權限操作:

執行下述命令加載全局環境變量,然後切換到hadoop用戶開始操作:

<code>source /etc/profile/<code>

輸出PATH看看是否包含了zookeeper的路徑

<code>echo $PATH/<code>
大數據服務器之間是怎麼配合的?分佈式Zookeeper集群安裝與配置

su hadoop

下面以hadoop用戶操作

下面以hadoop用戶操作

下面以hadoop用戶操作

重要的事情說三遍:


<code>cd /home/hadoop/zookeeper/conf/<code>
<code>cp zoo_sample.cfg zoo.cfg/<code>
<code>vi /home/hadoop/zookeeper/conf/zoo.cfg #對應內容調整如下/<code>

內容調整如下:

dataDir=/home/hadoop/data/zkdata

dataLogDir=/home/hadoop/log/zklog/

server.226=hadoop226:2888:3888

server.227=hadoop227:2888:3888

server.228=hadoop228:2888:3888

大數據服務器之間是怎麼配合的?分佈式Zookeeper集群安裝與配置

如果存在的內容則修改,不存在的內容,直接添加即可,解釋如下:

格式:server.serverid=host:tickpot:electionport

server:固定寫法

serverid:每個服務器的指定ID(必須處於1-255之間,必須每一臺機器不能重複)

host:主機名

tickpot:心跳通信端口

electionport:選舉端口

最後不要忘了在每個服務器"/home/hadoop/data/zkdata/"下新建文件"myid"並把當前服務器編號寫進去,舉例:

<code>echo 226 > /home/hadoop/data/zkdata/myid/<code>

以下內容只能在226-228上執行才能看到正確的結果:

<code>zkServer.sh stop #停止Zookeeper服務/<code>
<code>zkServer.sh start #開啟Zookeeper服務/<code>
<code>zkServer.sh status #開啟Zookeeper服務/<code>

正常情況下會看到下面的內容:

ZooKeeper JMX enabled by default

Using config: /home/hadoop/zookeeper/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

大數據服務器之間是怎麼配合的?分佈式Zookeeper集群安裝與配置

如果啟動失敗,可以到"/home/hadoop/zookeeper/logs/"這個目錄裡面看看啟動日誌。根據日誌的提示做對應的修改。

錄入下面的命令:

<code>jps/<code>

可以看到如下的結果:

2690 Jps

2473 QuorumPeerMain

大數據服務器之間是怎麼配合的?分佈式Zookeeper集群安裝與配置

查看Zookeeper的運行狀態

<code>zkServer.sh status/<code>

顯示內容如下:

ZooKeeper JMX enabled by default

Using config: /home/hadoop/zookeeper/bin/../conf/zoo.cfg

Client port found: 2181. Client address: localhost.

Mode: leader (或者顯示:follower)

大數據服務器之間是怎麼配合的?分佈式Zookeeper集群安裝與配置

大數據服務器之間是怎麼配合的?分佈式Zookeeper集群安裝與配置

注意:雖然我們在配置文件中寫明瞭服務器的列表信息,但是,我們還是需要去每一臺服務 器去啟動,不是一鍵啟動集群模式。

每啟動一臺查看一下狀態再啟動下一臺

三臺機器上都要有QuorumPeerMain進程,都能顯示follower或者leader。


大數據服務器之間是怎麼配合的?分佈式Zookeeper集群安裝與配置


分享到:


相關文章: