本文主要介紹ZooKeeper的快速部署安裝,更多信息請參考 "ZooKeeper" 概述 ZooKeeper 是一個分散式的,開放源碼的分散式應用程式協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個為分散式應用提供一致性服務的軟體,提供的功能包括 ...
本文主要介紹ZooKeeper的快速部署安裝,更多信息請參考ZooKeeper
概述
ZooKeeper是一個分散式的,開放源碼的分散式應用程式協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個為分散式應用提供一致性服務的軟體,提供的功能包括:配置維護、功能變數名稱服務、分散式同步、組服務等。
它的設計易於編程,它使用一個遵循文件系統中常見的目錄樹結構的數據模型。它在Java環境中運行,對Java和C都有綁定。
ZooKeeper有三種安裝模式:單機安裝(standalone)、偽集群模式、集群模式:
- standalone模式:只在一臺機器上安裝ZooKeeper,並只啟動一個ZooKeeper實例。
- 偽集群模式:在一臺機器上開啟多個ZooKeeper實例來模擬集群。通過載入不同配置文件,分配不同數據目錄來實現這種模式。因為在同一機器上運行,所以機器宕機,整個ZooKeeper就掛了。基本上不會佈置這樣的ZooKeeper集群。
- 集群模式:在至少3台機器上安裝ZooKeeper構成集群,只要故障節點數量在一定範圍內就能保證ZooKeeper服務的可用性。
部署前置條件
ZooKeeper運行在java環境下,所以需要先安裝jdk,且要求版本高於1.6。
安裝過程:略
單機安裝
獲取安裝包
cd /usr/local
mkdir -p zookeeper/data
cd zookeeper
# 選擇最新穩定版本
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
tar zxvf zookeeper-3.4.14.tar.gz
創建環境變數
echo 'ZOOKEEPER_HOME=/usr/local/zookeeper/zookeeper-3.4.14' >/etc/profile.d/zk.sh
echo 'PATH=$ZOOKEEPER_HOME/bin:$PATH' >> /etc/profile.d/zk.sh
chmod +x /etc/profile.d/zk.sh
source /etc/profile.d/zk.sh
相關目錄文件介紹
bin目錄
[root@zk-1 zookeeper-3.4.14]# ls bin/
README.txt zkCli.cmd zkEnv.cmd zkServer.cmd zkTxnLogToolkit.cmd
zkCleanup.sh zkCli.sh zkEnv.sh zkServer.sh zkTxnLogToolkit.sh
- zkServer:用於啟動、停止ZooKeeper,且能查看ZooKeeper狀態。
zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}
- zkEnv:設置ZooKeeper啟動、關閉時的環境變數。在其餘的每個腳本中都引用了這個腳本。
- zkCleanup:清除ZooKeeper的事務日誌和快照。
- zkCli:ZooKeeper的一個命令行客戶端。
conf目錄
- configuration.xsl:不用管這個文件- -!。
- log4f.properties:是ZooKeeper的日誌配置文件。
- zoo_sample.cfg:是ZooKeeper的示例配置文件。
zkServer.sh
預設的配置文件名為zoo.cfg
。所以,在conf目錄下創建一個zoo.cfg
。寫入幾個保證ZooKeeper能正常運行的配置項:
tickTime=2000
dataDir=/usr/local/zookeeper/data
clientPort=2181
其中:
- tickTime:ZooKeeper中很多配置項(如心跳時間、連接超時時間等)都要用到的時間單位,這裡配置為2000毫秒,即2秒。
- dataDir:ZooKeeper實例的數據目錄。
- clientPort:ZooKeeper向外提供
啟停
啟動
使用zkServer.sh
來啟動ZooKeeper:
cd bin/
zkServer.sh start
也可以手動指定啟動時讀取的配置文件:
zkServer.sh start /usr/local/zookeeper/zookeeper-3.4.14/conf/zoo.cfg
查看啟動狀態:
[root@zk-1 bin]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: standalone
可以看到運行模式是"standalone"。
停止
zkServer.sh stop
連接
ZooKeeper啟動後,就可以向外提供ZooKeeper服務了。這裡用ZooKeeper提供的命令行客戶端去連接一下ZooKeeper做個簡單的測試。
[root@zk-1 bin]# zkCli.sh -server localhost:2181
Connecting to localhost:2181
……
using SASL (unknown error)
Welcome to ZooKeeper!
JLine support is enabled
2019-06-30 09:42:49,112 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@879] - Socket connection established to localhost/0:0:0:0:0:0:0:1:2181, initiating session
2019-06-30 09:42:49,168 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1303] - Session establishment complete on server localhost/0:0:0:0:0:0:0:1:2181, sessionid = 0x100002654ed0000, negotiated timeout = 30000
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]
集群部署
cd /usr/local
mkdir -p zookeeper/data
cd zookeeper
# 選擇最新穩定版本
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
tar zxvf zookeeper-3.4.14.tar.gz
創建環境變數
echo 'ZOOKEEPER_HOME=/usr/local/zookeeper/zookeeper-3.4.14' >/etc/profile.d/zk.sh
echo 'PATH=$ZOOKEEPER_HOME/bin:$PATH' >> /etc/profile.d/zk.sh
chmod +x /etc/profile.d/zk.sh
source /etc/profile.d/zk.sh
zoo.cfg配置
三個節點配置文件(/usr/local/zookeeper/zookeeper-3.4.14/conf/zoo.cfg
)內容如下:
tickTime=2000
dataDir=/usr/local/zookeeper/data
clientPort=2181
initLimit=5
syncLimit=2
server.1=10.0.10.12:2888:3888
server.2=10.0.10.13:2888:3888
server.3=10.0.10.14:2888:3888
在三個節點上寫入myid文件:
# 節點1上執行
echo 1 >/usr/local/zookeeper/data/myid
# 節點2上執行
echo 2 >/usr/local/zookeeper/data/myid
# 節點3上執行
echo 3 >/usr/local/zookeeper/data/myid
啟動
cd /usr/local/zookeeper/zookeeper-3.4.14/bin
./zkServer.sh status
驗證:
# 節點1
[root@zk-1 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower
# 節點2
[root@zk-2 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: leader
# 節點3
[root@zk-3 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower