Zookeeper叢集環境搭建
li_zliang
2021-09-24
1 叢集規劃
2 前提準備
3. 前置配置
3.1 修改計算機名
3.2 配置免密登陸
4. 叢集搭建
4.1 安裝zookerper
4.2 配置環境變量
4.3 修改配置
4.4 分發程式
4.5 辨別節點
4.6 啟動叢集
4.7 叢集驗證
1 叢集規劃
為保證叢集高可用,Zookeeper 叢集的節點數最好是奇數,最少有三個節點;
2 前提準備
虛機環境
裡搭建一個 3 節點的叢集;我這裡準備了三台CentOS 7;用VMware搭建;
計算機名分别 為hadoop-master、hadoop-slave1、hadoop-slave2;
zookeeper安裝包
https://archive.apache.org/dist/zookeeper/自行下載下傳;apache-zookeeper-3.7.0-bin.tar.gz
從版本3.5.5開始,帶有bin名稱的包才是我們想要的下載下傳可以直接使用的裡面有編譯後的二進制的包,而之前的普通的tar.gz的包裡面是隻是源碼的包無法直接使用。
3. 前置配置
3.1 修改計算機名
詳見 《01_Hadoop叢集環境搭建》
3.2 配置免密登陸
詳見 《01_Hadoop叢集環境搭建》,主要用于分發程式;
4. 叢集搭建
4.1 安裝zookeeper
将apache-zookeeper-3.7.0.tar.gz上傳至/home目錄,在/usr/local下建立hadoop目錄,将hadoop-2.10.1.tar.gz複制進去并解壓;
> mkdir /usr/local/zookeeper
> cp /home/apache-zookeeper-3.7.0-bin.tar.gz /usr/local/zookeeper/
> cd /usr/local/zookeeper
> tar -zvxf apache-zookeeper-3.7.0-bin.tar.gz
// 注意我這裡解壓後zookeeper-3.7.0目錄所有者變了,不知為什麼;這裡改為root
> chown -R root:root /usr/local/zookeeper/apache-zookeeper-3.7.0-bin
4.2 修改配置
> cd /usr/local/zookeeper/apache-zookeeper-3.7.0-bin/conf/
> cp zoo_sample.cfg zoo.cfg
指定資料存儲目錄和日志檔案目錄(目錄不用預先建立,程式會自動建立),修改後完整配置如下:
編輯配置檔案zoo.cfg
> vi zoo.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/log
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
# maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
# autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
# autopurge.purgeInterval=1
# server.1 這個1是伺服器的辨別,可以是任意有效數字,辨別這是第幾個伺服器節點,這個辨別要寫到
dataDir目錄下面myid檔案裡
# 指名叢集間通訊端口和選舉端口
server.1=hadoop-master:2287:3387
server.2=hadoop-slave1:2287:3387
server.3=hadoop-slave2:2287:3387
配置參數說明:
tickTime:用于計算的基礎時間單元。比如 session 逾時:N*tickTime;
initLimit:用于叢集,允許從節點連接配接并同步到 master 節點的初始化連接配接時間,以tickTime 的倍數來表示;
syncLimit:用于叢集, master 主節點與從節點之間發送消息,請求和應答時間長度(心跳機制);
dataDir:資料存儲位置;
dataLogDir:日志目錄;
clientPort:用于用戶端連接配接的端口,預設 2181;
4.3 分發程式
将 zookeeper包分發到其他兩台伺服器;
# hadoop-slave1 和 hadoop-slave2分别建立目錄
> mkdir /usr/local/zookeeper/
# 将安裝包分發到hadoop-slave1
> scp -r /usr/local/zookeeper/* hadoop-slave1:/usr/local/zookeeper/
# 将安裝包分發到hadoop-slave2
> scp -r /usr/local/zookeeper/* hadoop-slave2:/usr/local/zookeeper/
# 總之從機的hadoop_home路徑與主機保持一緻;
4.4 配置環境變量
三台主機環境變量均配置;
> vim /etc/profile
export ZOOKEEPER_HOME=/usr/local/zookeeper/apache-zookeeper-3.7.0-bin
export PATH=$ZOOKEEPER_HOME/bin:$PATH
> source /etc/profile
4.5 辨別節點
分别在三台主機的 dataDir 目錄下建立 myid 檔案,并寫入對應的節點辨別。Zookeeper 叢集通過myid 檔案識别叢集節點,并通過上文配置的節點通信端口和選舉端口來進行節點通信,選舉出Leader 節點;
建立存儲目錄,三台主機均執行該指令:
# 三台主機均執行該指令
mkdir -vp /usr/local/zookeeper/data/
建立并寫入節點辨別到 myid 檔案,三台主機分别執行該指令:
# hadoop-master主機
echo "1" > /usr/local/zookeeper/data/myid
# hadoop-slave1主機
echo "2" > /usr/local/zookeeper/data/myid
# hadoop-slave2主機
echo "3" > /usr/local/zookeeper/data/myid
4.6 啟動叢集
分别在三台主機上,執行如下指令啟動服務:
> /usr/local/zookeeper/apache-zookeeper-3.7.0-bin/bin/zkServer.sh start
> /usr/local/zookeeper/apache-zookeeper-3.7.0-bin/bin/zkServer.sh stop
> /usr/local/zookeeper/apache-zookeeper-3.7.0-bin/bin/zkServer.sh status
4.7 叢集驗證
啟動後使用 zkServer.sh status 檢視叢集各個節點狀态。如圖所示:三個節點程序均啟動成功,并且 hadoop-slave1 為 leader 節點,hadoop-master 和 hadoop-slave2 為 follower 節點。