您的位置:首页 > 其它

Zookeeper笔记

2015-11-07 21:37 309 查看
zk是一个高可用的文件系统,是一个具有高可用性的协调服务。zk中的路径必须是绝对地址。

zk使用路径/zookeeper子树来保存管理信息,如配额信息。

----------------------------------

zonde是保存小数据的容器(如同文件),也可以作为保存其他znode的容器(功能如同目录)。

两种类型的znode:持久(只能由客户端来删除)和短暂(客户端断开后znode就自动删除了。这类节点不会有子节点)。可以用短暂znode来实现组员的灵活加入与退出。

顺序号:用于为所有事件进行排序,可根据顺序号推断事件的顺序。在创建znode时设置了顺序标识,后续创建znode会以递增方式创建znode,znode的实际路径会在create后返回。

可以用取顺序号最小的临时znode作为leader,用来实现分布式锁控制。删除znode实现锁的释放。客户端过期,短暂znode会释放,对应了锁的释放。 

『羊群效应』

创建顺序znode是非幂等操作。写是幂等操作。

在顺序znode名称中嵌入一个已知的id,可以用来判断重新连接后,之前的要创建的子节点是否成功创建了。最终顺序znode格式:lock-<sessionId>-<sequeueId>

wacher:在znode以某种方式变化时,zk会通过watcher回调通知客户端。可以针对zk服务的操作来设置watcher。watcher只能触发一次,触发后需再重新注册,才可能再次触发。

在读操作exists、getChildren、getData上可以设置watcher,这些watcher会被写操作create、delete、setData触发。

事件触发时可以调用相应的操作读取最新状态。从收到观察事件到执行读操作期间,znode的状态可能发生改变。

watcher可以用来获取zk状态变化通知,也可以获取znode变化通知。

ACL决定了谁可以对znode进行操作,用于客户端身份验证。exists不需要权限验证.ACL权限操作:CREATE,READ,WRITE,DELETE,ADMIN.

zk集群中只要存活超过半数的机子,就可以正常提供服务。

一致性保证:

1、客户端更新按提交顺序发送给集群slaves

2、更新操作的原则性。如果更新失败,客户端看不到更新结果。

3、滞后于故障服务器的其他slaves不会接受发给故障服务器的链接请求。

4、会对更新的数据进行持久化

zk客户端可以自动进行故障切换,切换后之前与故障服务器的会话仍然有效。建立连接后,客户端会自动进行ping,保持会话。

tick是zk中的基本时间周期。会话长度为[2tick,20tick]。较短的会话超时可以较快检测机器故障,但会导致slaves频繁的发送心跳给master。

可以在应用端做一定的超时恢复机制,在超时重试时提供超时会话的ID和密码,zk会恢复超时的会话环境。

zk中的服务器越多,会话超时时间应设置越大。

----------------使用------------------

zookeeper(hosts,SESSION_TIMEOUT,new Watcher(){
@Overwrite
public void process(WatchedEvent event){//连接zk服务器成功后回调
}

});

String znodePath=zk.create(znodePathStr,data,Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT/*客户端连接断开后znode数据仍存在*/);

List<String> childrenPaths=zk.getChildren(path,false);//获取所有的子znode

zk.delete(path,version);

删除znode时需提供版本号。如果提供的版本号与路径对应的znode的版本号一致,则会删除znode。这是乐观加锁机制。版本号设为-1可以绕过版本检测机制。

不支持递归删除操作,类似于目录删除,必须先删除所有的子znode后,才能删除父znode。

zk.setData(path,newData,version);//设置znode数据时也必须提供版本号

zk的数据读、写具有原子性。要么获取到znode的所有数据,要么失败。不会只读到部分数据。写是进行覆盖,数据只有完全写到znode才算是成功。写不支持append。

zk允许读到的数据滞后于zk的最新数据,客户端可以以异步方式调用sync()操作使自己的读操作可以获得最新数据。

zk中可以同步或异步方式执行操作,异步操作的结果是通过回调返回的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: