系統支持度:java
一、安裝JDKnode
查看 >>apache
二、設置JAVA堆內存大小。避免使用交換空間(swap),會極大拉低ZooKeeper的性能。經過壓測,肯定設定內存大小,建議最大4G。api
三、下載安裝ZooKeeper。bash
下載地址:http://mirror.bit.edu.cn/apache/zookeeper/ 這裏選擇下載3.4.10版本。http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz服務器
四、建立配置文件。數據結構
tickTime=2000 dataDir=/var/lib/zookeeper/ clientPort=2181 initLimit=5 syncLimit=2 server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
每臺機器都是機器的一部分,每臺機器配置一行。app
server.id=host:port:port異步
五、建立機器ID文件ide
每臺機器都對應一個myid文件,文件內容爲相應的數字ID。存放在對應dataDir目錄下。
$ echo "1" > /tmp/data/myid #對應的dataDir位置
六、啓動ZooKeeper
$ java -cp zookeeper.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.15.jar:conf \ org.apache.zookeeper.server.quorum.QuorumPeerMain zoo.cfg
(java -cp等同於:classpath)
使用 bin/zkServer.sh啓動實例
bin/zkServer.sh start
七、測試部署
$ bin/zkCli.sh -server 127.0.0.1:2181
Znode,節點。絕對的,/zookeeper用於保存管理信息,好比關鍵配額信息。
艱鉅文件和目錄兩種特色。既像文件同樣維護着數據,原信息、ACL、時間戳等數據結構,又像目錄同樣能夠做爲路徑標識的一部分。
Znode由3部分組成:
管理調度數據。每一個Znode數據至多1M。
每個節點都擁有本身的ACL。
節點類型:
順序節點:
路徑結尾添加一個遞增的計數。對於此節點的父節點惟一。格式爲「%10d」(10位數字,沒有數值的位數用0補充)。當值大於2^32-1時,計數器溢出。
觀察:
客戶端可在節點上設置watch,稱爲監視器。當節點發生改變時(Znode的增、刪、改)將會觸發對應的操做。當watch被觸發時,ZooKeeper將會向客戶端發送且僅發送一條通知。
有多種記錄時間的形式
一、Zxid
導致節點狀態改變的每個操做都將使節點接收到一個Zxid格式的時間戳。而且該時間戳全局有序。
節點改變,產生惟一Zxid。每一個節點維護着3個Zxid值。
實現中Zxid是一個64位的數字。高32位是epoch用來標識leader關係是否改變,每次一個leader被選出,都會有一個新的epoch。低32位是遞增計數。
二、版本號
對節點的每個操做,都將導致這個節點的版本號增長。
三、節點屬性
9個基本操做
create:建立Znode(父Znode必須存在)
delete:刪除Znode(Znode沒有子節點)
exists:是否存在,並獲取他的元數據
getACL/setACL:
getChildren:獲取全部子節點列表
getData/setData:
sync:使客戶端的Znode視圖與ZooKeeper同步
更新操做是有限制的。delete或setData必須明確要更新的Znode的版本號,能夠調用exists找到。
更新是非阻塞式的。
能夠爲全部的讀操做設置watch,(exists、getChildren、getData)。一次性的觸發器,異步發送,一致性保證。
watch類型:
經過返回的數據來設置不一樣的watch:
所以:
注意:
watch實際上要處理兩類事件:
上面2類事件都在Watch中處理,即重載process(Event event)
節點事件的觸發,經過exists,getData或getChildren來處理這類函數,有雙重做用:
函數自己的功能又能夠異步的回調函數來實現,重載processResult()過程當中處理函數自己的功能。
Builtin ACL Schemes
ZooKeeper C client API
標準ACL IDs:
3個標準ACL:
The following ZooKeeper operations deal with ACLs:
int zoo_add_auth (zhandle_t *zh,const char* scheme,const char* cert, int certLen, void_completion_t completion, const void *data);
The application uses the zoo_add_auth function to authenticate itself to the server. The function can be called multiple times if the application wants to authenticate using different schemes and/or identities.
int zoo_create (zhandle_t *zh, const char *path, const char *value,int valuelen, const struct ACL_vector *acl, int flags,char *realpath, int max_realpath_len);
zoo_create(...) operation creates a new node. The acl parameter is a list of ACLs associated with the node. The parent node must have the CREATE permission bit set.
int zoo_get_acl (zhandle_t *zh, const char *path,struct ACL_vector *acl, struct Stat *stat);
This operation returns a node’s ACL info.
int zoo_set_acl (zhandle_t *zh, const char *path, int version,const struct ACL_vector *acl);
This function replaces node’s ACL list with a new one. The node must have the ADMIN permission set.