Zookeeper

使用zkCli.cmd对Zookeeper进行ACL控制

Apr 12, 2016 | | Say something

zkCli提供如下操作ACL的方法 create [-s] [-e] path data acl 创建节点时设置权限 setAcl path acl 对已经存在的节点设置权限 getAcl path 查询已有节点的权限 addauth scheme auth 对当前连接添加凭证 使用zkCli时,ACL的格式为schema:certificate:privileges 采用ip认证,那么ACL就为ip:192.168.1.110:cdwra cdwra分别表示create, delete,write,read, admin 遗憾的是,zookeeper-3.4.6版本是不支持ip:192.168.1.0/24:cdwra这种子网模式的 采用digest认证,那么ACL为digest:root:qiTlqPLK7XM2ht3HMn02qRpkKIE=:cdwra 遗憾的是,这个地方需要经过编码的密码 ,可是使用org.apache.zookeeper.server.auth.DigestAuthenticationProvider的main方法产生。 添加认证信息时,IP认证对客户端是透明的,digest认证,执行addauth digest username:password 对当前的session添加凭证

zookeeper基本概念

Oct 27, 2015 | | Say something

leader选举 一个server启动后,会向集群中的其他server发送一个选举它自己为leader的通知,如果集群中已经有leader,那么其他server会告诉它应该follow现有的leader,如果没有leader,会按照epoch,zxid, sid来选举一个leader,当然采用过半原则。 zab协议: 当集群中的某个server收到写操作时,会将这个操作forward给leader,leader会先发送一个写数据的提议(proposal),如果有过半的服务器应答了这个提议,那么就发送一个提交(commit)指令,来真正地持久化这个事务。 session管理: zookeeper采用bucket策略来管理session,使用如下的策略(expirationTime / expirationInterval + 1) * expirationInterval, 将一个时间段内过期的session放入一个bucket中,这样可以一次清理一个时间段内的session,减少清理session的额外开销 数据与存储: 当有写操作时,zookeeper会写事务日志(log.400000001,这种文件),在一定的时间间隔后,还会将内存的数据dump到磁盘,产生(snapshot.10000c85d文件),当一个新的server加入集群的时候,如果它的事务记录不是落后leader太大,那么就执行DIFF同步,只同步缺少的事务日志记录,如果落后太多,那么就使用SNAP模式,先同步一个最新的snapshot,然后再应用事务日志。 Observer 不参与提议的讨论,只学习提议的结果,通过INFORM消息同步数据,follower需要先应答leader的提议(proposal)然后处理leader发送的commit两个指令同步数据