系统支持度: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.