ZooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個爲分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。(百度百科)。ZooKeeper代碼版本中,提供了分佈式獨享鎖、選舉、隊列的接口,其中分佈鎖和隊列有Java和C兩個版本,選舉只有Java版本。通常用於分佈式的消息監聽(主要)和分佈式鎖的用途(次要)。node
咱們此次先來簡單安裝一個zookeeper和zookeeper的一些簡單命令的使用。apache
1、安裝tomcat
1,下載服務器
輸入,便可下載。咱們最新版3.5.5爲例來講。併發
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.5/apache-zookeeper-3.5.5-bin.tar.gz分佈式
咱們也能夠直接去官網下載壓縮包,而後本身上傳到服務器上,下載地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/oop
2,解壓ui
tar -zxvf apache-zookeeper-3.5.5-bin.tar.gz 加密
根據本身的習慣能夠自行創建軟鏈接,我這apache還有一個tomcat,我就創建一個軟鏈接了。spa
ln -s apache-zookeeper-3.5.5-bin zookeeper-3.5.5-bin
3,啓動
切換到咱們zookeeper下的conf目錄下,咱們看到有三個文件,其中一個叫zoo_sample.cfg,咱們拷貝一份,叫作zoo.cfg。
cp zoo_sample.cfg zoo.cfg
切換回咱們zookeeper下的bin目錄下,直接輸入
./zkServer.sh start
就能夠啓動咱們的zookeeper,默認會執行咱們剛纔複製的配置文件。若是咱們不想複製配置文件,咱們也能夠輸入
./zkServer.sh start ../conf/zoo_sample.cfg
來指定咱們的配置文件來啓動
查看是否啓動成功(在bin目錄下執行)
./zkServer.sh status
4,配置(單機)
咱們來看一下咱們的配置文件都寫了什麼吧。
tickTime=2000 # zookeeper時間配置中的基本單位 (毫秒)
initLimit=10 # 容許follower初始化鏈接到leader最大時長,它表示tickTime時間倍數 即:initLimit*tickTime
syncLimit=5 # 容許follower與leader數據同步最大時長,它表示tickTime時間倍數 即:syncLimit*tickTime
dataDir=/tmp/zookeeper # zookeper 數據存儲目錄
clientPort=2181 # 對客戶端提供的端口號
maxClientCnxns=60 # 單個客戶端與zookeeper最大併發鏈接數
autopurge.snapRetainCount=3 # 保存的數據快照數量,以外的將會被清除
autopurge.purgeInterval=1 # 自動觸發清除任務時間間隔,小時爲單位。默認爲0,表示不自動清除。
5,客戶端參數詳解(本節重點)
在咱們的zookeeper的bin目錄下輸入
./zkCli.sh
就進入到咱們的客戶端了。輸入help,先看看都有什麼命令再來一個個嘗試。
一個個來講一下。
addauth scheme auth 添加用戶,語法在後面權限內會詳細去說。
close 斷開當前客戶端和服務端的鏈接
config [-c] [-w] [-s] 動態加載配置
connect host:port 鏈接到客戶端
create [-s] [-e] [-c] [-t ttl] path [data] [acl] 建立節點 -e 臨時節點(不容許有子節點) -s 序列節點 -c 默認節點 (path爲路徑) 【data爲數據】 【acl權限】 -t節點存活時間,我這未成功。有弄明白-t的小夥伴幫我一下,留言就行。
delete [-v version] path 刪除節點(不能帶有子節點) [-v version] 版本號,通常不用
deleteall path 刪除節點(包含其子節點)
delquota [-n|-b] path 刪除節點限額 -n 子節點數 -b 字節數
get [-s] [-w] path 取得節點的值 -s 取值和狀態,-w 添加監聽(監聽數據)
getAcl [-s] path 取得限權,-s取權限和狀態
history 歷史操做記錄
listquota path 查看節點限額
ls [-s] [-w] [-R] path查看節點 -s查看節點和內容 -w(添加監聽是否添加或刪除子節點,但不會監聽子節點值的變化) -R查到全部節點(包含根節點)
ls2 path [watch] 至關於ls和stat的組合
printwatches on|off 是否打印監聽事件
quit 退出當前客戶端
reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*] 從新加載配置文件
redo cmdno 從新操做某命令,與history配合使用
removewatches path [-c|-d|-a] [-l] 移除監聽
rmr path 刪除和deleteAll徹底一致(已被deleteAll替換,不建議繼續使用)
set [-s] [-v version] path data 給節點賦值 -s返回節點狀態
setAcl [-s] [-v version] [-R] path acl 設置節點權限(後面會詳細說一下這個)
setquota -n|-b val path 設置節點限額 -n 子節點數 -b 字節數
stat [-w]path 查看節點狀態,-w同get -w用法
sync path 強制同步
2、節點類型:
節點類型主要有四種:
PERSISTENT持久節點,一直存在的
PERSISTENT_SEQUENTIAL持久序號節點,不會重名的節點,可用於分佈式鎖
EPHEMERAL臨時節點(不可在擁有子節點),當客戶端退出時會刪除。可用於心跳監聽
EPHEMERAL_SEQUENTIAL臨時序號節點(不可在擁有子節點)
3、節點屬性:
咱們能夠經過stat [path]命令來查看節點的屬性,咱們來逐個看一下它對應的什麼意思。
cZxid = 0x40 建立時事務ID,持久不變的數值。
ctime = Sat Sep 28 10:39:45 CST 2019 建立時間
mZxid = 0x47 當前數據變動時的事務ID,不包含子節點
mtime = Sat Sep 28 10:43:26 CST 2019 最後修改時間
pZxid = 0x41 子節點變動的事務ID,不包含子節點的數據變動,只是子節點的數量變化
cversion = 1 子節點變動版本號(子節點變動次數)
dataVersion = 1 數據版本號,變動次數
aclVersion = 0 權限版本號,變動次數
ephemeralOwner = 0x0 是否爲臨時節點,有值表示臨時節點
dataLength = 4 當前節點的數據長度
numChildren = 1 子節點的數量
4、節點監聽:
這裏很簡單,只要咱們添加get -w [path] 就能夠對咱們的節點添加監聽。這裏須要注意的是,咱們這的監聽不會監聽子節點,只監聽當前設置節點值得變化和是否被刪除。建立子節點和變動子節點的值不會監聽。並且這個監聽是一次性的。
若是想監聽該節點下子節點的新增和刪除,咱們能夠設置ls -w便可。
5、acl權限:
ACL全稱爲Access Control List(訪問控制列表),用於控制資源的訪問權限。ZooKeeper使用ACL來控制對其znode的防問。基於scheme:id:permission的方式進行權限控制。scheme表示受權模式、id模式對應值、permission即具體的增刪改權限位。
scheme:認證模型分爲四種:
1.world開放模式,world表示全世界均可以訪問(這是默認設置)
2.ip,ip模式,限定客戶端IP防問。
3.auth用戶密碼認證模式,只有在會話中添加了認證才能夠防問
4.digest與auth相似,區別在於auth用明文密碼,而digest 用sha-1+base64加密後的密碼。在實際使用中digest 更常見。
permission權限位
c->CREATE能夠建立子節點
d->DELETE能夠刪除子節點(僅下一級節點)
r->READ能夠讀取節點數據及顯示子節點列表
w->WRITE能夠設置節點數據
a->ADMIN能夠設置節點訪問控制列表權限
咱們來看一下幾個權限設置的小例子。
輸入
getAcl /root
模式一全開放的就不寫了,例如:setAcl /root world:anyone:ra便可。咱們先來看一下IP模式的
IP模式:setAcl <path> ip:<ip地址|地址段>:<權限位>
setAcl /authDir ip:127.0.0.1:ra
意思我是對於127.0.0.1的IP設置了authDir目錄的讀和控制的權限(權限控制)
auth模式:
語法:
1. setAcl <path> auth:<用戶名>:<密碼>:<權限位>
setAcl /authDir auth:root:111:rwcda
2. addauth digest <用戶名>:<密碼> 注意中間的空格
addauth digest root:111
digest 權限:
語法:
設置echo -n root:123456 | openssl dgst -binary -sha1 | openssl base64 獲得輸出結果咱們進行保存。
也就是咱們一會帳號root,密碼123456對應的加密結果。
1. setAcl <path> digest :<用戶名>:<密鑰>:<權限位>
setAcl /digestDir digest:root:qiTlqPLK7XM2ht3HMn02qRpkKIE=:ra
2. addauth digest <用戶名>:<密碼>
addauth digest root:123456
到這裏zookeeper的基本單機操做就說完了,也熟悉了一下,記住stat下面的幾個ID啊,後面選舉機制很重的參數。咱們明天來講一下集羣和JAVA_API的操做。
最進弄了一個公衆號,小菜技術,歡迎你們的加入