1. 程式人生 > >【zookeeper】zookeeper介紹及安裝和叢集配置

【zookeeper】zookeeper介紹及安裝和叢集配置

1.什麼是zookeeper ?

    zookeeper 英文直譯是動物管理員,試想下,動物園裡有很多動物,如果沒有動物管理員去做管理的話,各種動物混在一起很可能出現打架問題,疾病,髒,等等一系列問題,這個時候就需要有個主人去把這些動物統一管理起來,zookeeper其實就是這樣一種工具.

zookeeper 是一個開源的分散式協調服務,由雅虎建立,是 Google Chubby 的開源實現。分散式應用程式可以基於 zookeeper實現諸如資料釋出/訂閱、負載均衡、命名服務、分散式協調/通知、叢集管理、Master 選舉、配置維護,名字服務、分散式同步、分散式鎖和分散式佇列等功能。

通俗點講,也就是我個人的理解:zookeeper主要是用於分散式系統的檔案管理者,能夠讓所有分散式系統的節點都能拿到統一的資料.

2.如何安裝zookeeper?

  第一步:安裝

#1.去zookeeper官網下載zookeeper.tar.gz安裝包
http://zookeeper.apache.org/
#2.將下載好的安裝包傳至伺服器,當然你也可以直接在伺服器上使用wget命令去下載,版本你自己選.
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz
#3.將下載好的安裝包解壓至/usr/local目錄下
tar -zxvf zookeeper-3.3.3.tar.gz -C /usr/local
#4.將解壓後的安裝包重新命名一下
mv zookeeper-3.3.3 zookeeper

第二步:配置環境

#配置環境變數
vi /etc/profile
#新增zookeeper的安裝path,我這裡把完整的java及Mycat及zookeeper的配置都貼出來,不用的大家手動刪了即可.
export JAVA_HOME=/usr/local/java
export ZOOKEEPER_HOME=/usr/loacal/zookeeper
export MyCAT_HOME=/usr/local/mycat
export CLASSPATH=.:%JAVA_HOME%/lib/tools.jar
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:/usr/local/mycat/bin

第三步:修改zookeeper啟動檔案

#進入到zk安裝目錄下的conf目錄
cd /usr/local/zookeeper/conf
#複製並重命名一份zoo_sample.cfg
cp zoo_sample.cfg zoo.cfg
#這裡如果埠不衝突的話,就保持預設的zk配置即可

第四步:啟動zk並檢視狀態/日誌

#進入zk安裝目錄的bin目錄
cd /usr/local/zookeeper/bin
#啟動zk
./zkServer.sh start
#檢視狀態
./zkServer.sh status
如果正常啟動的話,這裡的狀態就是:
Mode: standalone
也就是說它是單節點的.
#你也可以看看啟動日誌
tail -f zookeeper.out

3.zookeeper叢集配置

zookeeper做叢集,節點數必須為2n+1,那麼最低配的叢集也至少擁有3臺伺服器,3臺伺服器可以使節點中可以宕機的伺服器數量為1,5臺可以允許2臺伺服器宕機...

為什麼zookeeper要求叢集中的節點數量必須為2n+1呢?主要是因為zookeeper的選舉制的演算法決定的,試想一下這樣一個場景:

現在班上要選一個班長,班主任決定採用投票制,每人只能投1票,每個人的票只能投給給自己投過票的人,這種情況下,如果人數是偶數的話,那麼投票結果總是每個人的得票數都相等,但如果是基數的話就不一樣了,總會有一個人沒有人給他投票,於是他慷慨的把票投給了自己喜歡的人,於是得到額外這一票的這個人就當上了班長...

下面就以最簡單的叢集(3個節點的)叢集為例,演示如何配置zk叢集:

假設我有3臺伺服器,Ip分別為192.168.1.1,192.168.1.2,192.168.1.3,並將其編號為節點:1,2,3.

分別在3臺伺服器上安裝zk,安裝方法同上.

分別修改3臺伺服器的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/dataDir
dataLogDir=/usr/local/zookeeper/dataLogDir
# 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=0.0.0.0:2888:3888
server.2=192.168.1.2:2888:3888
server.3=192.168.1.3.75:2888:3888

再給份簡化版的配置檔案:

#其它配置不用動,只修改/新增下面這點配置即可:
dataDir=/usr/local/zookeeper/dataDir
dataLogDir=/usr/local/zookeeper/dataLogDir
server.1=0.0.0.0:2888:3888
server.2=192.168.1.2:2888:3888
server.3=192.168.1.3.75:2888:3888

值得注意的是,每臺伺服器的zoo.cfg裡 配置的server.x對應的ip如果是指自身伺服器的話,請將ip配置為0.0.0.0,否則別的伺服器的zk不能與該伺服器的zk進行通訊,這點可能在內網環境還是走的通的,如果是外網伺服器不這樣配是絕對不行的.

配置好了zoo.cfg之後,眼尖的同學可以看到我在zoo.cfg裡配置了dataDir和dataLogDir,但zk的安裝目錄下根本沒有這兩個資料夾,所以接下來就是在每臺伺服器上建立這些資料夾:

#進入到zk安裝目錄裡
cd /usr/local/zookeeper
#建立這兩個資料夾
mkdir dataDir
mkdir dataLogDir

然後分別進入對應的伺服器的dataDir,在裡面新增myid檔案,檔案中的數字對應上面zoo.cfg中配置的server.數字

#在每臺伺服器的dataDir中新增myid檔案
cd /usr/local/zookeeper/dataDir
vi myid
#新增對應值進去
比如第一臺伺服器,就寫1,第二臺伺服器就寫2...與你上面zoo.cfg裡的server.數字保持一致即可.
#加完之後儲存
:wq

如上圖,只需要新增數字即可,不需要額外的東西.

三臺伺服器上都新增好之後,就可以啟動三臺伺服器上的zk了,啟動之後觀察日誌是否報錯,如果三臺均未報錯,然後可以隨便在一臺上檢視當前伺服器狀態,如果正常顯示follower或leader即說明配置成功,不成功的請檢查配置,埠,及防火牆等.

./zkServer.sh status

OK,關於zk的介紹,配置,叢集配置就簡單介紹到這裡,下講主要介紹zk的一些命令和使用java操作zk.