zookeeper安裝以及遇到的一些坑

 正文前先來一波福利推薦:html

福利一:java

百萬年薪架構師視頻,該視頻能夠學到不少東西,是本人花錢買的VIP課程,學習消化了一年,爲了支持一下女友公衆號也方便你們學習,共享給你們。node

福利二:linux

畢業答辯以及工做上各類答辯,平時積累了很多精品PPT,如今共享給你們,大大小小加起來有幾千套,總有適合你的一款,不少是網上是下載不到。apache

獲取方式:安全

微信關注 精品3分鐘 ,id爲 jingpin3mins,關注後回覆   百萬年薪架構師 ,精品收藏PPT  獲取雲盤連接,謝謝你們支持!服務器

------------------------正文開始---------------------------微信

 

最近項目中用到了storm,而後storm中用到了zookeeper,而後今天抽空整理一下zookeeper的安裝使用,原來後期再慢慢學習。網絡

本篇文檔,操做部分是摘自其餘博客,裏邊的問題分析是本身在實踐過程當中遇到而後特別記錄的!架構

----------------------------- 開始:

08-26-01

1、Zookeeper原理簡介

ZooKeeper是一個開放源碼的分佈式應用程序協調服務,它包含一個簡單的原語集,分佈式應用程序能夠基於它實現同步服務,配置維護和命名服務等。

Zookeeper設計目的
  • 最終一致性:client不論鏈接到那個Server,展現給它的都是同一個視圖。
  • 可靠性:具備簡單、健壯、良好的性能、若是消息m被到一臺服務器接收,那麼消息m將被全部服務器接收。
  • 實時性:Zookeeper保證客戶端將在一個時間間隔範圍內得到服務器的更新信息,或者服務器失效的信息。但因爲網絡延時等緣由,Zookeeper不能保證兩個客戶端能同時獲得剛更新的數據,若是須要最新數據,應該在讀數據以前調用sync()接口。
  • 等待無關(wait-free):慢的或者失效的client不得干預快速的client的請求,使得每一個client都能有效的等待。
  • 原子性:更新只能成功或者失敗,沒有中間狀態。
  • 順序性:包括全局有序和偏序兩種:全局有序是指若是在一臺服務器上消息a在消息b前發佈,則在全部Server上消息a都將在消息b前被髮布;偏序是指若是一個消息b在消息a後被同一個發送者發佈,a必將排在b前面。
Zookeeper工做原理

一、在zookeeper的集羣中,各個節點共有下面3種角色和4種狀態:

角色:leader,follower,observer
狀態:leading,following,observing,looking

Zookeeper的核心是原子廣播,這個機制保證了各個Server之間的同步。實現這個機制的協議叫作Zab協議(ZooKeeper Atomic Broadcast protocol)。Zab協議有兩種模式,它們分別是恢復模式(Recovery選主)和廣播模式(Broadcast同步)。當服務啓動或者在領導者崩潰後,Zab就進入了恢復模式,當領導者被選舉出來,且大多數Server完成了和leader的狀態同步之後,恢復模式就結束了。狀態同步保證了leader和Server具備相同的系統狀態。

爲了保證事務的順序一致性,zookeeper採用了遞增的事務id號(zxid)來標識事務。全部的提議(proposal)都在被提出的時候加上了zxid。實現中zxid是一個64位的數字,它高32位是epoch用來標識leader關係是否改變,每次一個leader被選出來,它都會有一個新的epoch,標識當前屬於那個leader的統治時期。低32位用於遞增計數。

每一個Server在工做過程當中有4種狀態:

LOOKING:當前Server不知道leader是誰,正在搜尋。

LEADING:當前Server即爲選舉出來的leader。

FOLLOWING:leader已經選舉出來,當前Server與之同步。

OBSERVING:observer的行爲在大多數狀況下與follower徹底一致,可是他們不參加選舉和投票,而僅僅接受(observing)選舉和投票的結果。

Zookeeper集羣節點
  • Zookeeper節點部署越多,服務的可靠性越高,建議部署奇數個節點,由於zookeeper集羣是以宕機個數過半纔會讓整個集羣宕機的。
  • 須要給每一個zookeeper 1G左右的內存,若是可能的話,最好有獨立的磁盤,由於獨立磁盤能夠確保zookeeper是高性能的。若是你的集羣負載很重,不要把zookeeper和RegionServer運行在同一臺機器上面,就像DataNodes和TaskTrackers同樣。
實驗環境
主機名 系統 IP地址
linux-node1 CentOS release 6.8 192.168.1.148
linux-node2 CentOS release 6.8 192.168.1.149
linux-node2 CentOS release 6.8 192.168.1.150
2、Zookeeper安裝

Zookeeper運行須要java環境,須要安裝jdk,注:每臺服務器上面都須要安裝zookeeper、jdk,建議本地下載好須要的安裝包而後上傳到服務器上面,服務器上面下載速度太慢。

2.一、JDK安裝

JDK下載地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

rpm -ivh jdk-8u101-linux-x64.rpm

08-26-02

2.二、Zookeeper安裝

Zookeeper連接:http://zookeeper.apache.org/

wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz -P /usr/local/src/
tar zxvf zookeeper-3.4.8.tar.gz -C /opt
cd /opt && mv zookeeper-3.4.8 zookeeper
cd zookeeper
cp conf/zoo_sample.cfg conf/zoo.cfg

#把zookeeper加入到環境變量

echo -e "# append zk_env\nexport PATH=$PATH:/opt/zookeeper/bin" >> /etc/profile
3、Zookeeper集羣配置

注意:搭建zookeeper集羣時,必定要先中止已經啓動的zookeeper節點。

3.一、Zookeeper配置文件修改

#修改事後的配置文件zoo.cfg,以下:

egrep -v "^#|^$" zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataLogDir=/opt/zookeeper/logs
dataDir=/opt/zookeeper/data
clientPort=2181
autopurge.snapRetainCount=500
autopurge.purgeInterval=24
server.1= 192.168.1.148:2888:3888
server.2= 192.168.1.149:2888:3888
server.3= 192.168.1.150:2888:3888

#建立相關目錄,三臺節點都須要

mkdir -p /opt/zookeeper/{logs,data}

#其他zookeeper節點安裝完成以後,同步配置文件zoo.cfg。

3.二、配置參數說明

tickTime這個時間是做爲zookeeper服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是說每一個tickTime時間就會發送一個心跳。

initLimit這個配置項是用來配置zookeeper接受客戶端(這裏所說的客戶端不是用戶鏈接zookeeper服務器的客戶端,而是zookeeper服務器集羣中鏈接到leader的follower 服務器)初始化鏈接時最長能忍受多少個心跳時間間隔數。

當已經超過10個心跳的時間(也就是tickTime)長度後 zookeeper 服務器尚未收到客戶端的返回信息,那麼代表這個客戶端鏈接失敗。總的時間長度就是 10*2000=20秒。

syncLimit這個配置項標識leader與follower之間發送消息,請求和應答時間長度,最長不能超過多少個tickTime的時間長度,總的時間長度就是5*2000=10秒。

dataDir顧名思義就是zookeeper保存數據的目錄,默認狀況下zookeeper將寫數據的日誌文件也保存在這個目錄裏;

clientPort這個端口就是客戶端鏈接Zookeeper服務器的端口,Zookeeper會監聽這個端口接受客戶端的訪問請求;

server.A=B:C:D中的A是一個數字,表示這個是第幾號服務器,B是這個服務器的IP地址,C第一個端口用來集羣成員的信息交換,表示這個服務器與集羣中的leader服務器交換信息的端口,D是在leader掛掉時專門用來進行選舉leader所用的端口。

3.三、建立ServerID標識

除了修改zoo.cfg配置文件外,zookeeper集羣模式下還要配置一個myid文件,這個文件須要放在dataDir目錄下。

這個文件裏面有一個數據就是A的值(該A就是zoo.cfg文件中server.A=B:C:D中的A),在zoo.cfg文件中配置的dataDir路徑中建立myid文件。

#在192.168.1.148服務器上面建立myid文件,並設置值爲1,同時與zoo.cfg文件裏面的server.1保持一致,以下

echo "1" > /opt/zookeeper/data/myid

08-26-03

#在192.168.1.149服務器上面建立myid文件,並設置值爲2,同時與zoo.cfg文件裏面的server.2保持一致,以下

echo "2" > /opt/zookeeper/data/myid

08-26-04

#在192.168.1.150服務器上面建立myid文件,並設置值爲1,同時與zoo.cfg文件裏面的server.3保持一致,以下

echo "3" > /opt/zookeeper/data/myid

08-26-05

到此,相關配置已完成

-------------------------------------------------------------------------------------------------------------------

4、Zookeeper集羣啓動與查看
一、啓動每一個服務器上面的zookeeper節點:

#linux-node一、linux-node二、linux-node3

/opt/zookeeper/bin/zkServer.sh start

注意:報錯排查
08-26-6

Zookeeper節點啓動不了可能緣由:zoo.cfg配置文件有誤、iptables沒關。

二、啓動完成以後查看每一個節點的狀態

#linux-node1
08-26-7
#linux-node2
08-26-8
#linux-node3
08-26-9
#從上面能夠看出,linux-node1,linux-node3兩臺服務器zookeeper的狀態是follow模式,linux-node2這臺服務器zookeeper的狀態是leader模式。

 

本身的機器使用status查詢不成功,感受像是版本問題,因爲時間問題不過多的糾結,此處

查看文檔的時候,很感謝覺得網友的回答,解決了該問題;以下:

root@host:~# telnet localhost 2181 Trying 127.0.0.1... Connected to myhost. Escape character is '^]'. stats Zookeeper version: 3.4.3-cdh4.0.1--1, built on 06/28/2012 23:59 GMT Clients: Latency min/avg/max: 0/0/677 Received: 4684478 Sent: 4687034 Outstanding: 0 Zxid: 0xb00187dd0 Mode: leader Node count: 127182 Connection closed by foreign host.

 

本地未安裝telnet,如今安裝telnet,以下:

1、安裝telnet

一、檢測telnet-server的rpm包是否安裝 

[root@localhost ~]# rpm -qa telnet-server 
若無輸入內容,則表示沒有安裝。出於安全考慮telnet-server.rpm是默認沒有安裝的,而telnet的客戶端是標配。即下面的軟件是默認安裝的。

二、若未安裝,則安裝telnet-server,不然忽略此步驟

[root@localhost ~]#yum install telnet-server  
 
 
三、檢測telnet-server的rpm包是否安裝 

[root@localhost ~]# rpm -qa telnet 
telnet-0.17-47.el6_3.1.x86_64

四、若未安裝,則安裝telnet,不然忽略此步驟

[root@localhost ~]# yum install telnet

 

結果以下:

linux1:

linux2:

linux3:

 

-------------------------------------------------------------------------------------------------------------------

5、Zookeeper集羣鏈接

Zookeeper集羣搭建完畢以後,能夠經過客戶端腳本鏈接到zookeeper集羣上面,對客戶端來講,zookeeper集羣是一個總體,鏈接到zookeeper集羣實際上感受在獨享整個集羣的服務。
#在linux-node1測試
08-26-10經過上圖能夠看出整個zookeeper集羣已經搭建並測試完成。#Zookeeper原理:http://blog.csdn.net/wuliu_forever/article/details/52053557http://www.cnblogs.com/luxiaoxun/p/4887452.html

相關文章
相關標籤/搜索