zookeeper安裝

//下載
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
//解壓
tar xvf zookeeper-3.4.6.tar.gz
//文件夾重命名
mv zookeeper-3.4.6 zk
//配置環境變量
export ZOOKEEPER_HOME=/usr/local/zk
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf

cd conf/
mv zoo_sample.cfg zoo_1.cfg
mv zoo_sample.cfg zoo_2.cfg
mv zoo_sample.cfg zoo_3.cfg

zoo_1.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.
dataDir=/usr/local/zk/data_1

# the port at which the clients will connect
clientPort=2181

#the location of the log file
dataLogDir=/usr/local/zk/logs_1

server.0=128.199.173.52:2287:3387
server.1=128.199.173.52:2288:3388
server.2=128.199.173.52:2289:3389

zoo_2.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.
dataDir=/usr/local/zk/data_2

# the port at which the clients will connect
clientPort=2182

#the location of the log file
dataLogDir=/usr/local/zk/logs_2

server.0=128.199.173.52:2287:3387
server.1=128.199.173.52:2288:3388
server.2=128.199.173.52:2289:3389

zoo_3.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.
dataDir=/usr/local/zk/data_3

# the port at which the clients will connect
clientPort=2183

#the location of the log file
dataLogDir=/usr/local/zk/logs_3

server.0=128.199.XXX.XX:2287:3387
server.1=128.199.XXX.XX:2288:3388
server.2=128.199.XXX.XX:2289:3389   
  • initLimit:這個配置項是用來配置 Zookeeper 接受客戶端(這里所說的客戶端不是用戶連接 Zookeeper 服務器的客戶端,而是 Zookeeper 服務器集群中連接到 Leader 的 Follower 服務器)初始化連接時最長能忍受多少個心跳時間間隔數。當已經超過 10 個心跳的時間(也就是 tickTime)長度后 Zookeeper 服務器還沒有收到客戶端的返回信息,那么表明這個客戶端連接失敗。總的時間長度就是 10*2000=20 秒。
  • syncLimit:這個配置項標識 Leader 與 Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是 5*2000=10 秒。
  • server.A=B:C:D:其中 A 是一個數字,表示這個是第幾號服務器,就是集群模式下配置的myid文件所存放的數值;B是這個服務器的ip地址;C表示的是這個服務器與集群中的 Leader 服務器交換信息的端口;D 表示的是萬一集群中的 Leader 服務器掛了,需要一個端口來重新進行選舉,選出一個新的Leader,而這個端口就是用來執行選舉時服務器相互通信的端口。如果是偽集群的配置方式,由于B都是一樣,所以不同的Zookeeper 實例通信端口號不能一樣,所以要給它們分配不同的端口號。

/usr/local/zk/data_x目錄中分別創建myid,cfg文件中的server.X,“X”表示每個目錄中的myid的值。

vi myid

在bin目錄中啟動zookeeper

./zkServer.sh start zoo1.cfg

在bin目錄中查看zookeeper運行狀態

./zkServer.sh status zoo1.cfg

通過客戶端連接,進入zookeeper命令行

bin/zkCli.sh -server 128.199.XXX.XX:2181,128.199.XXX.XX:2182,128.199.XXX.XX:2183

zookeeper命令:

//查看操作
help
//查看已經存在的znode
ls /
//創建znode
create /test "test"
//獲取znode
get /test
//刪除znode。若刪除節點存在子節點,必須先刪除子節點,再刪除父節點。
delete /test
//創建臨時節點,創建它的客戶端斷開時會自動刪除
create -e /test-temp "temp"
//創建順序節點,會在節點名后添加自增長數字
create -s /test-no. ""
//更新節點
set /test "test2"
//退出
quit
  • Znode維護著數據、ACL(access control list,訪問控制列表)、時間戳等交換版本號等數據結構。每當Znode中的數據更新后它所維護的版本號將增加,這非常類似于數據庫中計數器時間戳的操作方式。另外Znode還具有原子性操作的特點:命名空間中,每一個Znode的數據將被原子地讀寫。讀操作將讀取與Znode相關的所有數據,寫操作將替換掉所有的數據。除此之外,每一個節點都有一個訪問控制列表,這個訪問控制列表規定了用戶操作的權限。
    ZooKeeper中同樣存在臨時節點。這些節點與session同時存在,當session生命周期結束,這些臨時節點也將被刪除。臨時節點在某些場合也發揮著非常重要的作用。

  • Watch機制就是監控某一個或者一些Znode的變化。一個Watch事件是一個一次性的觸發器,當被設置了Watch的數據發生了改變的時候,則服務器將這個改變發送給設置了Watch的客戶端,以便通知它們。
    Watch機制主要有以下三個特點:
    1.一次性的觸發器
    當數據改變的時候,那么一個Watch事件會產生并且被發送到客戶端中。但是客戶端只會收到一次這樣的通知,如果以后這個數據再次發生改變的時候,之前設置Watch的客戶端將不會再次收到改變的通知。
    例子:如果客戶端調用了 getData("/znode1", true) 并且稍后 /znode1 節點上的數據發生了改變或者被刪除了,客戶端將會獲取到 /znode1 發生變化的監視事件,而如果 /znode1 再一次發生了變化,除非客戶端再次對 /znode1 設置監視,否則客戶端不會收到事件通知。
    2.發送給客戶端(Sent to the client)
    這個表明了Watch的通知事件是從服務器發送給客戶端的,Zookeeper客戶端和服務端是通過Socket進行通信的,是異步的,這就表明不同的客戶端收到的Watch的時間可能不同(或因為故障不會成功地到達客戶端),但是ZooKeeper有保證當一個客戶端在看到Watch事件之前不會看到結點數據的變化。
    例子:A=3,此時在上面設置了一次Watch,如果A突然變成4了,那么客戶端會先收到Watch事件的通知,然后才會看到A=4。
    3.被設置Watch的數據
    znode 節點本身具有不同的改變方式。也可以想象 Zookeeper 維護了兩條監視鏈表:數據監視和子節點監視getData()/exists()設置數據監視。getChildren() 設置子節點監視。
    例子:
    一次成功的 setData()會觸發設置在某一節點上所設置的數據監視。
    一次成功的 create() 操作則會出發當前節點上所設置的數據監視以及父節點的子節點監視(child watch)。
    一次成功的 delete() 操作將會觸發當前節點的數據監視和子節點監視事件,同時也會觸發該節點父節點的的子節點監視(child watch)。
    當客戶端與Zookeeper服務器端失去聯系時,客戶端并不會收到監視事件的通知,當客戶端重新連接后,以前注冊的監視會重新被注冊并觸發,對于開發人員來說 這通常是透明的。只有一種情況會導致監視事件的丟失,即:通過exists()設置了某個znode節點的監視,但是如果某個客戶端在此znode節點被創建和刪除的時間間隔內與zookeeper服務器失去了聯系,該客戶端即使稍后重新連接 zookeeper服務器后也得不到事件通知。

  • ACL訪問控制列表。ZooKeeper使用ACL來控制對旗下Znode結點們的訪問。通過設置權限為來表明是否允許改變一個結點的內容。需要注意的是一條ACL僅針對于一個特定的節點,不適用于子節點。
    例子:如果/app 只對IP:172.16.16.1可讀 而 / APP/status 是對任何人可讀的。
    與傳統Linux機制不同,一個結點的數據沒有類似“擁有者,組用戶,其他用戶”的概念,在ZooKeeper中,ACL通過設置ID以及與其關聯的權限來完成訪問控制的。ACL的權限組成語法是:(scheme:expression, perms)。前者表明設置的ID,逗號后面表示的是ID相關的權限。
    例子:ip:172.16.16.1,READ 指明了IP地址為如上的用戶的權限為只讀。

      可設置的schemes:
      world 有個唯一的id, anyone ,代表所有人。
      auth 不使用任何id,代表任何已認證的用戶。
      digest 用 username:password 字符串來產生一個MD5串,然后該串被用來作為ACL ID。認證是通過明文發送username:password 來進行的,當用在ACL時,表達式為username:base64 ,base64是password的SHA1摘要的編碼。
      ip 使用客戶端的主機IP作為ACL ID 。這個ACL表達式的格式為addr/bits ,此時addr中的有效位與客戶端addr中的有效位進行比對。
    
      可設置的權限:
      CREATE:表明你可以創建一個Znode的子結點。
      READ:你可以得到這個結點的數據以及列舉該結點的子結點情況。
      WRITE:設置一個結點的數據。
      DELETE:可以刪除一個結點
      ADMIN:對一個結點設置權限。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容

  • 一、ZooKeeper的背景 1.1 認識ZooKeeper ZooKeeper---譯名為“動物園管理員”。動物...
    algernoon閱讀 9,106評論 1 106
  • 1 Zookeeper概述# ZooKeeper是一個為分布式應用所設計的分布的、開源的協調服務,它主要是用來解決...
    七寸知架構閱讀 7,369評論 0 101
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,786評論 18 139
  • ZooKeeper是一個分布式的,開放源碼的分布式應用程序協調服務,它包含一個簡單的原語集,分布式應用程序可以基于...
    Prize閱讀 255評論 0 1
  • ZooKeeper是一個分布式的,開放源碼的分布式應用程序協調服務,它包含一個簡單的原語集,分布式應用程序可以基于...
    caryr閱讀 374評論 0 0