zookeeper安裝和簡單使用

zookeeper安裝和簡單使用java

下載zookeeper-3.4.6,解壓縮到一個目錄。修改conf目錄下的配置文件爲zoo.cfg,使用默認的參數。以下,node

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181

這個版本的zookeeper提供windows的啓動腳本,因此直接啓動腳本就能夠了。shell

zookeeper 默認的端口號爲2181。啓動後以下,數據庫

C:\Users\Lenovo>netstat -anob|findstr "2181"

C:\Users\Lenovo>netstat -anob|findstr "2181"
  TCP    0.0.0.0:2181           0.0.0.0:0              LISTENING       5148
  TCP    [::]:2181              [::]:0                 LISTENING       5148

能夠看到2181端口啓動成功。windows

如今使用windows的客戶端腳本啓動zookeeper的客戶端。
安全

以下,運行help查看命令行的幫助。服務器

[zk: localhost:2181(CONNECTED) 6] help
ZooKeeper -server host:port cmd args
        stat path [watch]
        set path data [version]
        ls path [watch]
        delquota [-n|-b] path
        ls2 path [watch]
        setAcl path acl
        setquota -n|-b val path
        history
        redo cmdno
        printwatches on|off
        delete path [version]
        sync path
        listquota path
        rmr path
        get path [watch]
        create [-s] [-e] path data acl
        addauth scheme auth
        quit
        getAcl path
        close
        connect host:port
[zk: localhost:2181(CONNECTED) 7]

能夠運行簡單的命令,以下,ls命令和stat命令架構

[zk: localhost:2181(CONNECTED) 7] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 8] stat /
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0xe
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1

如今使用create命令在根目錄下創建一個目錄以下,
分佈式

[zk: localhost:2181(CONNECTED) 9] create /zk_test mydata
Created /zk_test
[zk: localhost:2181(CONNECTED) 10] ls /
[zookeeper, zk_test]

如今使用get命令查看zk_test目錄的信息,以下,oop

[zk: localhost:2181(CONNECTED) 11] get /zk_test
mydata
cZxid = 0x14
ctime = Sun Mar 15 16:47:09 CST 2015
mZxid = 0x14
mtime = Sun Mar 15 16:47:09 CST 2015
pZxid = 0x14
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0

如今可使用set命令設置目錄 zk_test的數據,以下,

[zk: localhost:2181(CONNECTED) 12] set /zk_test junk
cZxid = 0x14
ctime = Sun Mar 15 16:47:09 CST 2015
mZxid = 0x15
mtime = Sun Mar 15 16:50:36 CST 2015
pZxid = 0x14
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
[zk: localhost:2181(CONNECTED) 13] get /zk_test
junk
cZxid = 0x14
ctime = Sun Mar 15 16:47:09 CST 2015
mZxid = 0x15
mtime = Sun Mar 15 16:50:36 CST 2015
pZxid = 0x14
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0

最後使用delete命令刪除目錄,以下,

[zk: localhost:2181(CONNECTED) 14] delete /zk_test
[zk: localhost:2181(CONNECTED) 15] get /zk_test
Node does not exist: /zk_test
[zk: localhost:2181(CONNECTED) 16] ls /
[zookeeper]


以上就是zookeeper的安裝和客戶端的使用。


zookeeper的原理和運行機制

ZooKeeper 的客戶端-服務器架構

ZooKeeper 有一個相似於文件系統的數據模型,由 znodes 組成。能夠將 znodes(ZooKeeper 數據節點)視爲相似 UNIX 的傳統系統中的文件,但它們能夠有子節點。另外一種方式是將它們視爲目錄,它們能夠有與其相關的數據。每一個這些目錄都被稱爲一個 znode。圖 2 顯示的圖顯示zookeeper的目錄結構,


    znode 層次結構被存儲在每一個 ZooKeeper 服務器的內存中。這實現了對來自客戶端的讀取操做的可擴展的快速響應。每一個 ZooKeeper 服務器還在磁盤上維護了一個事務日誌,記錄全部的寫入請求。由於 ZooKeeper 服務器在返回一個成功的響應以前必須將事務同步到磁盤,因此事務日誌也是 ZooKeeper 中對性能最重要的組成部分。能夠存儲在 znode 中的數據的默認最大大小爲 1 MB。所以,即便 ZooKeeper 的層次結構看起來與文件系統類似,也不該該將它用做一個通用的文件系統。相反,應該只將它用做少許數據的存儲機制,以便爲分佈式應用程序提供可靠性、可用性和協調


    當客戶端請求讀取特定 znode 的內容時,讀取操做是在客戶端所鏈接的服務器上進行的。所以,因爲只涉及集合體中的一個服務器,因此讀取是快速和可擴展的。然而,爲了成功完成寫入操做,要求 ZooKeeper 集合體的嚴格意義上的多數節點都是可用的。在啓動 ZooKeeper 服務時,集合體中的某個節點被選舉爲領導者。當客戶端發出一個寫入請求時,所鏈接的服務器會將請求傳遞給領導者。此領導者對集合體的全部節點發出相同的寫入請求。若是嚴格意義上的多數節點(也被稱爲法定數量(quorum))成功響應該寫入請求,那麼寫入請求被視爲已成功完成。而後,一個成功的返回代碼會返回給發起寫入請求的客戶端。若是集合體中的可用節點數量未達到法定數量,那麼 ZooKeeper 服務將不起做用。


    法定數量是經過嚴格意義上的多數節點來表示的。在集合體中,能夠包含一個節點,但它不是一個高可用和可靠的系統。若是在集合體中有兩個節點,那麼這兩個節點都必須已經啓動並讓服務正常運行,由於兩個節點中的一個並非嚴格意義上的多數。若是在集合體中有三個節點,即便其中一個停機了,您仍然能夠得到正常運行的服務(三個中的兩個是嚴格意義上的多數)。出於這個緣由,ZooKeeper 的集合體中一般包含奇數數量的節點,由於就容錯而言,與三個節點相比,四個節點並不佔優點,由於只要有兩個節點停機,ZooKeeper 服務就會中止。在有五個節點的集羣上,須要三個節點停機纔會致使 ZooKeeper 服務中止運做。

    如今,咱們已經清楚地瞭解到,節點數量應該是奇數,讓咱們再來思考一下 ZooKeeper 集合體中須要有多少個節點。讀取操做始終從鏈接到客戶端的 ZooKeeper 服務器讀取數據,因此它們的性能不會隨着集合體中的服務器數量額變化而變化。可是,僅在寫入法定數量的節點時,寫入操做纔是成功的。這意味着,隨着在集合體中的節點數量的增長,寫入性能會降低,由於必須將寫入內容寫入到更多的服務器中,並在更多服務器之間進行協調。

    ZooKeeper 的美妙之處在於,想運行多少服務器徹底由您本身決定。若是想運行一臺服務器,從 ZooKeeper 的角度來看是沒問題的;只是您的系統再也不是高度可靠或高度可用的。三個節點的 ZooKeeper 集合體支持在一個節點故障的狀況下不丟失服務,這對於大多數用戶而言,這多是沒問題的,也能夠說是最多見的部署拓撲。不過,爲了安全起見,能夠在您的集合體中使用五個節點。五個節點的集合體讓您能夠拿出一臺服務器進行維護或滾動升級,並可以在不中斷服務的狀況下承受第二臺服務器的意外故障。

    所以,在 ZooKeeper 集合體中,3、五或七是最典型的節點數量。請記住,ZooKeeper 集合體的大小與分佈式系統中的節點大小沒有什麼關係。分佈式系統中的節點將是 ZooKeeper 集合體的客戶端,每一個 ZooKeeper 服務器都可以以可擴展的方式處理大量客戶端。例如,HBase(Hadoop 上的分佈式數據庫)依賴於 ZooKeeper 實現區域服務器的領導者選舉和租賃管理。您能夠利用一個相對較少(好比說,五個)節點的 ZooKeeper 集合體運行有 50 個節點的大型 HBase 集羣。


參考:

http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/

http://www.ibm.com/developerworks/cn/data/library/bd-zookeeper/

http://ifeve.com/zookeeper-leader/

http://greemranqq.iteye.com/blog/2171449

=============END=============

相關文章
相關標籤/搜索