天天看點

《Zookeeper》第一篇 叢集環境搭建

目錄

    • 一. 環境準備
      • 1. 配置JDK
      • 2. 配置Zookeeper
    • 二. Zookeeper 叢集搭建
      • 1. 建立myid檔案
      • 2. 配置叢集節點資訊
      • 3. 啟動Zookeeper
      • 4. 檢視各節點狀态
    • 三. 驗證叢集是否正常運作
      • 模拟場景1: 下線一個從節點, 主節點和另一個從節點正常存活
      • 模拟場景2: 下線主節點,其他從節點正常存活
      • 模拟場景3: 下線兩個節點
    • 四. 總結

在實際的生産環境中,叢集是部署在不同機器上的, 本着簡單明了的原則, 本次介紹的叢集是搭建在同一台虛拟機器上,建立三個Zookeeper的節點,用端口号進行區分,搭建一個

僞叢集

一. 環境準備

1. 配置JDK

Zookeeper的運作需要JDK為基礎,是以需要先在虛拟機上配置好JDK

JDK1.8 工具包

提取碼: qwer

  • 先将JDK工具包上傳到虛拟機上(一般上傳到目錄/usr/local目錄下)
  • 解壓工具包
tar -zxvf jdk-8u341-linux-x64.tar.gz
           
  • 配置JDK環境變量
vim /etc/profile
           

先按

i鍵

進入編輯模式, 在末尾添加下面兩句, 再按

Esc鍵

退出編輯模式,最後按

Shift + Q鍵

, 進入

Ex模式

, 輸入

wq!

儲存退出

export JAVA_HOME=/usr/local/jdk1.8.0_341/
export PATH=$PATH:$JAVA_HOME/bin
           
  • 重新重新整理下配置,否則可能不生效
source /etc/profile
           
  • 最後驗證下JDK是否配置成功
java -version
           

出現下面情況,說明JDK配置成功

《Zookeeper》第一篇 叢集環境搭建

2. 配置Zookeeper

Zookeeper 工具包

提取碼: qwer

  • 将Zookeeper工具包上傳到虛拟機上(一般上傳到目錄/usr/local目錄下),并解壓
tar -zxvf zookeeper-3.5.8.tar.gz 
           
  • 為了後續配置檔案好配,這裡我單獨建立一個zookeeper目錄
mkdir /usr/local/zookeeper
           
  • 将解壓後的apache-zookeeper-3.5.8-bin目錄中的内容複制至zookeeper目錄
cp -r apache-zookeeper-3.5.8-bin/.  /usr/local/zookeeper
           
  • 建立data目錄,并在此目錄下建立三個子目錄
mkdir /usr/local/zookeeper/data
mkdir /usr/local/zookeeper/data/node-1
mkdir /usr/local/zookeeper/data/node-2
mkdir /usr/local/zookeeper/data/node-3
           
  • 為了不破壞zookeeper原始的配置檔案,搭錯了還能重來, 将zoo_sample.cfg配置檔案複制三份
cp  /usr/local/zookeeper/conf/zoo_sample.cfg  /usr/local/zookeeper/conf/zoo-1.cfg
cp  /usr/local/zookeeper/conf/zoo_sample.cfg  /usr/local/zookeeper/conf/zoo-2.cfg
cp  /usr/local/zookeeper/conf/zoo_sample.cfg  /usr/local/zookeeper/conf/zoo-3.cfg
           
  • 修改三份zoo.cfg中的clientPort和dataDir配置資訊
vim /usr/local/zookeeper/conf/zoo-1.cfg
## node-1節點 - zoo-1.cfg
clientPort=2181  ## 預設就是2181,不用改
dataDir=/usr/local/zookeeper/data/node-1

vim /usr/local/zookeeper/conf/zoo-2.cfg
## node-2節點 - zoo-2.cfg
clientPort=2182  
dataDir=/usr/local/zookeeper/data/node-2

vim /usr/local/zookeeper/conf/zoo-3.cfg
## node-3節點 - zoo-3.cfg
clientPort=2183  
dataDir=/usr/local/zookeeper/data/node-3
           

至此,搭建叢集的前期準備工作就算完成了,接下來就是叢集搭建了

二. Zookeeper 叢集搭建

1. 建立myid檔案

在每個節點中的data目錄下, 建立下myid檔案,并且寫入辨別值

myid的值是zoo.cfg檔案裡定義的server.A項A的值,Zookeeper 啟動時會讀取這個檔案,拿到裡面的資料與 zoo.cfg 裡面的配置資訊比較進而判斷到底是那個server,隻是一個辨別作用。

echo 1 >/usr/local/zookeeper/data/node-1/myid
echo 2 >/usr/local/zookeeper/data/node-2/myid
echo 3 >/usr/local/zookeeper/data/node-3/myid
           

2. 配置叢集節點資訊

在每個節點的zoo.cfg檔案中都配置叢集節點資訊, 其中server後面的值就是對應myid檔案中的值,

2881為組成zookeeper伺服器之間的通信端

3881為用來選舉leader的端口

server.1=10.15.122.88:2881:3881
server.2=10.15.122.88:2882:3882
server.3=10.15.122.88:2883:3883
           

3. 啟動Zookeeper

啟動三個zoo.cfg配置檔案,代表三個zookeeper節點

sh ./bin/zkServer.sh start ./conf/zoo-1.cfg
sh ./bin/zkServer.sh start ./conf/zoo-2.cfg
sh ./bin/zkServer.sh start ./conf/zoo-3.cfg
           
《Zookeeper》第一篇 叢集環境搭建

4. 檢視各節點狀态

sh ./bin/zkServer.sh status ./conf/zoo-1.cfg
sh ./bin/zkServer.sh status ./conf/zoo-2.cfg
sh ./bin/zkServer.sh status ./conf/zoo-3.cfg
           
《Zookeeper》第一篇 叢集環境搭建

從上述三個節點的狀态看, 節點2成為了主節點, 節點1和節點3成為了從節點

至此, 簡易的Zookeeper叢集搭建完成

三. 驗證叢集是否正常運作

檢視三個節點運作的程序号

ps -ef | grep .cfg
           
《Zookeeper》第一篇 叢集環境搭建

以下每個場景都是模拟一主二從, 現在node-1和node-3是從節點,node-2是主節點

下線節點使用下面指令,直接殺死程序

kill -9 程序号 
           

模拟場景1: 下線一個從節點, 主節點和另一個從節點正常存活

将從節點node1下線, 從節點node3和主節點node2存活

此時再來檢視程序運作情況

《Zookeeper》第一篇 叢集環境搭建

可以看到從節點node-1已經成功下線

再看下叢集情況

《Zookeeper》第一篇 叢集環境搭建

此時,node-1節點已經下線,不影響叢集的正常運作且其他節點的身份也沒變化, node-2依舊是主節點,node-3還是從節點

模拟場景2: 下線主節點,其他從節點正常存活

前提要先把上一場景的node-1重新啟起來.node-1會以從節點的身份重新加入到叢集中

将主節點node-2下線, 從節點node-1和主節點node-3正常存活

此時再來檢視程序運作情況

《Zookeeper》第一篇 叢集環境搭建

可以看到主節點node-2已經成功下線

再看下叢集情況

sh ./bin/zkServer.sh status ./conf/zoo-1.cfg
sh ./bin/zkServer.sh status ./conf/zoo-2.cfg
sh ./bin/zkServer.sh status ./conf/zoo-3.cfg
           
《Zookeeper》第一篇 叢集環境搭建

此時,node-2下線後, node-1依舊是從節點, node-3由從節點變成主節點了

這是因為叢集必須要有一個主節點, 當主節點下線之後,會在其他從節點當中重新選舉出一個主節點來保證叢集的正常運作

模拟場景3: 下線兩個節點

前提要先把上一場景的node-2重新啟起來,node-2會以從節點的身份重新加入到叢集中

将節點node-1和node-3下線, 節點node-2正常存活

kill -9 9299
kill -9 9632
           

此時再來檢視程序運作情況

《Zookeeper》第一篇 叢集環境搭建

此時就一個node-3節點程序在運作

再看下叢集情況

sh ./bin/zkServer.sh status ./conf/zoo-1.cfg
sh ./bin/zkServer.sh status ./conf/zoo-2.cfg
sh ./bin/zkServer.sh status ./conf/zoo-3.cfg
           
《Zookeeper》第一篇 叢集環境搭建

可以看出叢集已經停止運作,因為隻有一個節點存活, 小于叢集的最小存活節點數的規則

最小存活節點數 = (節點總數)/2 + 1

由此計算規則可知, 要想叢集正常運作,必須要有兩個節點存活才行

驗證下: 之前是節點node-2存活, 重新啟動節點node-1

《Zookeeper》第一篇 叢集環境搭建

重新啟動節點node-1,發現叢集又恢複正常了,原本節點node-2是從節點, 此時有兩個節點,滿足叢集的最小節點數, 叢集正常運作,并重新選舉出一個主節點

注意: 如果之前下線的2個節點都是從節點, 主節點存活, 那麼此時就不會重新選舉

四. 總結

  • 叢集必須要有一個主節點
  • 叢集中,如果主節點下線, 會在剩下的從節點中重新選舉一個主節點
  • 叢集中,如果現有存活的節點數小于叢集最小存活節點數時, 叢集停止工作, 變成單機 ; 當有節點重新啟用時, 滿足叢集最小存活節點數條件, 叢集恢複正常

繼續閱讀