概述
- 是Apache提供的開源的用於進行服務協調和分佈式管理的框架
- Zookeeper原來是Hadoop的子件之一,後來發現Zookeeper不止可以用於Hadoop也可以用於其他分佈式環境下的管理,獨立出來稱爲一個單獨的項目
zookeeper可以解決的分佈式問題
- 在分佈式環境下,需要確定一個管理節點
- 如果只設置一個管理節點,存在單點故障
- 爲了避免管理節點的單點故障,需要設置多個管理節點
- 需要在管理節點集羣中來選舉出一個主節點
- 要求管理節點集羣能夠應對崩潰恢復的場景
- 管理節點之間要進行信息的共享
- 確定一套選舉算法
特點與節點類型
一、特點
- Zookeeper是一個樹狀結構(Znode樹)
- 樹狀結構(Znode樹)的根節點爲 /
- Zookeeper的每一個節點稱之爲是znode節點
- 所有的znode節點都是從根節點開始計算
- 每一個znode節點都必須存儲數據
- 每一個持久的znode節點都可以掛載子節點
- 每一個znode節點的路徑都是唯一的。所以基於這一個特點,可以做集羣的統一命名服務
- Znode樹是維繫在內存中的,即每一個znode節點中的數據也是維繫在內存中,這樣做的目的是方便快速查找
- 不能利用Zookeeper存儲海量數據,原因:
- Znode樹維繫在內存中,並且多個Zookeeper存儲的是相同的數據造成內存的浪費;
- Zookeeper是做分佈式的協調服務而不是做存儲服務
- Zookeeper提供了持久化機制,持久化的目錄由zoo.cfg中的dataDir屬性來決定
- Zookeeper會爲每一次的事務(增加、刪除、更新)提供一個全局的遞增的事務id
- 任意一個路徑是唯一的
二、節點類型
順序節點 | 非順序節點 | |
---|---|---|
持久節點 | Persistent_Sequential | Persistent |
臨時節點 | ephemeral_Sequential | ephemeral |
節點詳解
屬性 | 說明 |
---|---|
cZxid | 這個節點創建的時候分配的事務id |
ctime | 這個節點創建的時間 |
mZxid | 這個節點的數據更新分配的事務id |
mtime | 這個節點的數據更新的時間 |
pZxid | 記錄子節點發生增刪的事務id |
cversion | 記錄子節點增刪的次數 |
dataVersion | 記錄當前節點數據更新的次數 |
aclVersion | acl策略的更新次數 |
ephemeralOwner | 如果是持久節點,那麼此項爲0x0, 如果是臨時節點,那麼此項爲當前sessionid |
dataLength 數據的字節個數 | |
numChildren 子節點個數 |
常用命令
一、客戶端指令
指令 | 解釋 |
---|---|
ls | 查看指定節點下的所有的子節點 |
create | 創建持久節點 |
create -e | 創建臨時節點 |
create -s | 創建持久順序節點 |
create -e -s | 創建臨時順序節點 |
delete | 刪除節點 |
rmr | 遞歸刪除 |
get | 獲取節點數據和信息 |
set | 更新節點數據 |
quit | 退出客戶端 |
二、服務器端指令
指令 | 解釋 |
---|---|
sh zkServer.sh start | 啓動服務器 |
sh zkServer.sh status | 查看服務器狀態 |
sh zkServer.sh stop | 停止服務器 |
sh zkServer.sh restart | 重啓服務器 |
單機安裝:
1. 關閉防火牆:
a. 臨時關閉service iptables
b. 永久關閉stop chkconfig iptables off
2. 安裝JDK,JDK要求是1.7及以上
3. 下載Zookeeper的安裝包
http://archive.apache.org/dist/zookeeper/zookeeper-3.4.7/
4. 解壓安裝包:tar -xvf zookeeper-3.4.7.tar.gz
5. 進入到安裝目錄的子目錄conf下
6. 複製:cp zoo_sample.cfg zoo.cfg Zookeeper在啓動的時候會默認去找zoo.cfg
7. 編輯zoo.cfg,修改屬性dataDir
安裝完成。在bin目錄啓動zookeeper並查看狀態
- 當服務器端啓動成功之後,可以執行jps命令查看是否有Zookeeper的QuorumPeer進程
- 或者在服務器端啓動成功之後,可以執行一下命令查看服務器端狀態
sh zkServer.sh start
sh zkServer.sh status
集羣安裝
1. 關閉Linux(版本是Centos6.X)的防火牆
臨時關閉防火牆:service iptables stop
永久關閉防火牆:chkconfig iptables off
2. 下載安裝JDK。注意至少是JDK1.6及以上版本才能使用
3. 下載或者上傳Zookeeper的壓縮包
http://archive.apache.org/dist/zookeeper/zookeeper-3.4.7/
4. 解壓壓縮包 tar -xvf zookeeper-3.4.7.tar.gz
5. 進入Zookeeper的安裝目錄下的子目錄conf目錄中
6. 將conf目錄下的zoo_sample.cfg複製爲zoo.cfg。Zookeeper在啓動的時候會自動尋找zoo.cfg,根據其中的配
置來啓動存儲數據
cp zoo_sample.cfg zoo.cfg
7. 編輯zoo.cfg文件
```xml
vim zoo.cfg
```
8. 修改其中的屬性dataDir,指定數據的存儲目錄
9. 在zoo.cfg文件的末添加要構建集羣的服務器地址
編號要求是數字並且不能重複
原子廣播端口號和選舉端口號只要不和當前已經使用的端口號衝突即可
#格式:server.編號=IP地址:原子廣播端口:選舉端口
#例如:
server.1=192.168.199.11:2888:3888
server.2=192.168.199.12:2888:3888
server.3=192.168.199.13:2888:3888
10. 在dataDir的指定目錄下創建數據存儲目錄並進入tmp目錄
11. 在數據存儲目錄下編輯新的文件,文件名爲myid
在myid文件中填入當前服務器所對應的編號。例如當前服務器的地址爲192.168.199.11,則在zoo.cfg文件中指
定編號爲1,那麼就在myid文件中添加數字1
vim myid
12. 將要配置的集羣中的其他服務器按照上述步驟配置。或者可以將當前服務器中的配置拷到其他服務器上,修
改對應的myid ,這裏複製過去即可
scp -r zookeeper-3.4.14 [email protected]:/home/software/
scp -r zookeeper-3.4.14 [email protected]:/home/software/
複製完成後吧myid分別改爲對應的id號
13. 集羣全部配置好之後,依次啓動每一臺服務器,進入Zookeeper安裝目錄下的bin目錄
sh zkServer.sh start
sh zkServer.sh status
注意:
14. 在Zookeeper集羣中,如果單獨啓動一臺服務器,是無法對外提供服務的
15. 當把集羣中的服務器都啓動之後,可以利用sh zkServer.sh status
來查看當前節點的狀態,如果出現leader或者follower,則說明啓動成功。
需要注意zoo.cfg裏面的路徑配置。dataDir=/home/software/zookeeper-3.4.14/tmp
需要把原路徑全部刪除從新寫。