java架構之路-(分佈式zookeeper)初識zookeeper安裝與參數詳解

  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的操做。

最進弄了一個公衆號,小菜技術,歡迎你們的加入

相關文章
相關標籤/搜索