#Zookeeper概述node
- 背景
- Zookeeper可讓企業的IT架構逐步從集中式向分佈式過分,所謂的分佈式是指:把一個計算任務分解成若干個計算單元,而且分派到若干不一樣的計算機中去執行,而後彙總計算結果的過程。
- Zookeeper介紹
- Zookeeper是源代碼開放的分佈式協調服務,由雅虎建立,是Google Chubby開源實現。Zookeeper是一個高性能的分佈式數據一致性解決方案,它將那些複雜、容易出錯的分佈式一致性服務封裝起來,構成一個搞笑可靠的原語集,並提供一系列簡單易用的接口給用戶使用。
- Zookeeper的典型應用場景
- 數據發佈/訂閱 顧名思義就是一方把數據發佈出來,另外一方經過某種手動能夠獲得這些數據。
- 一般數據訂閱有兩種方式:推模式和拉模式,推模式通常是服務器主動向客戶端推送消息,拉模式是客戶端主動去服務端獲取數據(一般採用的是輪詢的方式)。
- Zookeeper採用兩種方式的結合。
- 發佈者將數據發佈到Zookeeper集羣節點上,訂閱者經過必定的方法告訴服務器,我對那個節點的數據感興趣,那個服務器在這些節點的數據發送變化時,就通知客戶端,客戶端獲得通知後能夠去服務器獲取數據信息。
- 分佈式協調/通知
- 心跳檢測:在分佈式系統中,一般須要機器是否能夠用,Zookeeper中咱們讓全部的機器都註冊一個臨時節點,因此只須要判斷這個節點是否存在就能夠了,不須要直接去鏈接須要檢查的機器,下降系統的負載度(節點分爲臨時和持久)。
- Zookpeeper重量級使用
- Zookeeper的基本概覽
- 集羣角色
- Leader、Follower、Observer
- Leader服務器是整個Zookeeper集羣工做機制的核心
- Follower服務器是Zookeeper集羣狀態的跟隨者
- Oserver服務器充當一個觀察者的角色
- Leader、Follower設計模式,Observer觀察者模式
- 會話
- 會話是指客戶端Zookeeper服務器的鏈接,Zookeeper中的會話叫Session,客戶端與服務器創建TCP的長鏈接來維持一個Session,客戶端在啓動的時候首先會與服務器創建一個TCP鏈接,經過這個鏈接客戶端可以經過心跳檢測與服務器保持有效的會話,也能向Zookeeper服務器發送請求並得到響應。
- 數據節點
- Zookeeper中的節點有兩類
- 集羣中的一臺機器稱爲一個節點
- 數據模型中的數據單元Znode,分別爲持久節點和臨時節點。(其實數據節點就是一個tree節點就是Znode)
- 版本
- Zookeeper中的版本
- version
- cversion
- aversion
- watcher(事件監聽器)
- Zookeeper容許用戶在指定節點上註冊一些Watcher,當數據節點發生變化的時候,Zookeeper服務器會把這個變化通知發送給感興趣的客戶端。
- ACL權限控制
- ACL是Access Contril Lists 的縮寫,Zookeeper採用ACL策略來進行權限控制,有如下權限:
- CREATE:建立子節點
- READ:獲取子節點
- WRITE:更新子節點數據權限
- DELETE:刪除子節點權限
- ADMIN:設置節點ACL權限
#Zoopeeper環境搭建(集羣、單機、僞集羣)設計模式
- 單機模式(設備環境有限暫時單機)
- 準備工做
- 下載Zookeeper(此處自行處理)
- 解壓 tar xzvf xxx.gz 解壓
- 重命名文件夾 Zookeeper 命令mv xxx xxx 後面的參數是新名字(能夠不作)
- 進入文件夾中/conf/
- 複製配置文件zoo_sample.cfg(樣例文件) 並重命名 zoo.cfg
* 編輯zoo.cfg內容(僅供參考,具體環境自行修改)
* tickTime = 2000
* tickTime:基本事件單元,以毫秒爲單位。這個時間是做爲 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每一個 tickTime 時間就會發送一個心跳。
* initLimit= 5
* initLimit:這個配置項用來配置Zookeeper接受客戶端初始化鏈接時最長能忍受多少個心跳時間間隔數,當已超過5個心跳的時間(也就是tickTime)長度後Zookeeper服務器尚未收到客戶端的返回信息,那麼代表這個客戶端鏈接失敗。總的時間長度是5 * 2000=4s。
* dataDir = D:\\zookeeper\\data
* 顧名思義就是 Zookeeper 保存數據快照的目錄,默認狀況下,Zookeeper 將寫數據的日誌文件也保存在這個目錄裏)。
* dataLogDir= D:\\zookeeper\\log
* 顧名思義就是 Zookeeper 保存日誌的目錄。
* synclimit = 5
* 這個配置項表示Leader與Follower之間發送消息,請求和應答時間長長度,最長不能超過多少個tickTime的時間長度,總的時間長度是2 * 2000 = 4s。
* clientPort = 2181
* 這個端口就是客戶端鏈接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。
* Server(待續)
* 格式:server.id=host:port:port(兩個port保證能夠正常使用就行)
* id:一般爲整數,而且不能重複使用整數。
* host:服務器的IP地址。
* port: Follower端口
* port: Leader選舉投票。
* ZooKeeper建議使用hostname,而非ip。這須要對主機的/etc/hostname和/etc/hosts作host綁定(不一樣的OS不一樣修改方式)。
* 建立一個myid文件(放在 dataDir文件下面)
* 寫入一行數據(請查閱zoo.cfg文件)
* 寫入id位置的數據便可。表示當前系統環境Zookeeper是哪個Server(通信用的)。
* 啓動服務與中止服務
* 進入bin/文件
* 執行zkServer.cmd 或則 zkServer.sh
* CMD直接雙擊運行 ,SH則 sudo sh ./zkServer.sh start 啓動 stop 關閉
* 驗證 使用telnet來測試(自行安裝)
* telnet ip port 敲命令 stat 若返回數據表示當前服務器不能對外提供服務代表集羣下其餘服務器未啓動(在Zookeeper中只要有半數的服務器正常工做就能夠向外提供服務)。
* 在此簡單說明下何爲僞集羣就是在一臺服務器上的多個Zookeeper的集羣叫僞集羣(僞集羣 兩個port不能與其餘zookeeper的port同樣)。
* 單機模式就刪除其餘服務器運行的時候就是單機模式。