Duxy's

a digged hole

Zookeeper文档总结

从官方文档里总结的Zookeeper的使用方法,在此mark。

zookeeper主要是解决配置文件,状态信息, 规则约定等系统的协调信息。所以每一个znode的信息最好在K级,不要超过1M。否则某些操作的时间会非常长。

结点状态

watches

个人理解,就是某个znode的触发器,或者理解为观察者模式。当znode有修改时,就会给观察者发个消息通知一下。

数据操作

znode的数据操作是原子性的,也就是说,读和取是整个一起做的。
在操作过程中,有用户权限保障,对zookeeper的管理提供更丰富的应用场景。“Each node has an Access Control List (ACL) that restricts who can do what.”

瞬时节点(Ephemeral Nodes)

这类节点会短时间存在于zookeeper中,当session执行结束后,该结点就会被删除,因此,这类节点不能有子节点。
感觉这类节点主要用于锁或瞬时统计功能。

序列节点

就是自增节点,以带前导0的10位整数表示。
也就是000000001到2147483647。也就是最多能存231-1个序列。

zookeeper里的时间

  • Zxid,也是修改zookeeper状态产生的唯一id(ZooKeeper Transaction Id)。当修改后,会形成一个新的项目,分配一个新的zxid2代替zxid1,且zxid2的值要比zxid1大。
  • 版本号,是节点上的修改记录,包含三种:
    • version,znode的修改次数
    • cversion,znode所有子节点的修改次数
    • aversion,ACL(访问权限控制)的修改次数
  • Ticks,zookeeper通过ticks定义事件的操作时限,包含status uploads, session timeouts, connection timeouts等。
  • zookeeper中,除了在新建和修改znode时,会将真实时间放到属性里之外,其余的管理都不使用真实时间。

Zookeeper的状态

ZooKeeper Stat Structure
The Stat structure for each znode in ZooKeeper is made up of the following fields:

czxid
mzxid
ctime
mtime
version
cversion
aversion
ephemeralOwner
dataLength
numChildren

设想的操作模块

系统机器的管理

维护系统中有哪些机器,机器名、ip、挂了哪些服务,对应的端口号,配置文件当前版本号,配置文件最新版本号。
机器信息添加trigger,在更新后,由客户端接收信息做出相应的修改。

集群结构的管理

/服务名/子模块名/机器:端口(含配置文件)
此处,对子模块名,添加子项增加trigger。使修改更新到机器管理中。

安装脚本

/installer/应用名/子模块名
如:
/installer/weedfs/master
/installer/weedfs/installer
安装脚本应当能够与zookeeper交互,获得当前的基本状态,再进行安装。

一项特殊的安装:zookeeper客户端。需要在每一台新机器上配置zookeeper客户端,以管理机器上的各类服务。该安装由新机器主动调用,可自升级。
其余的脚本,在机器管理信息被修改后,由客户端获取并安装。

ACL的管理

由网页进行管理。

设想中的流程

权限修改流程

st=>start: 开始
e=>end: 结束
auth=>condition: 是否有权限修改?
show=>operation: 显示网页
deal=>operation: 生成ACL并提交

st->auth
auth(yes)->show->deal->e
auth(no)->e

新增机器流程

新机->新机: (由管理员)下载客户端安装脚本,执行安装
新机->zookeeper: 连接,并更新机器状态

新增服务流程

zookeeper->集群结构: 配置集群信息
note right of 集群结构: 触发trigger
集群结构->机器信息: 更新机器提供的服务及状态
note right of 机器信息: 触发trigger
机器信息->客户端: 安装服务
note right of 客户端: 从zookeeper安装信息
客户端->客户端: 安装服务
note right of 客户端: 从集群结构获取配置参数
客户端->客户端: 写入配置信息
客户端->客户端: 启动
客户端->机器信息: 更新服务状态

todo

  • zookeeper数据的读写
  • watcher的添加