领导者,集群中只有一个。负责发起投票和决议,更新系统状态。 为客户端提供读写服务。
跟随者,集群中可有多个。接受客户端请求并响应(写请求转发到Leader),参与选主投票。 为客户端提供读服务。
观察者。接受客户端连接,转发请求。不参与投票。
节点,以树形结构表示,类似文件目录。 各节点可存储数据,配置监视器。 每个节点存储数据最大为1MB。
zooKeeper.exists(path, false)
stat /
- czxid: 事务id
- mzxid/mZxid: 最后更新事务id
- ctime: 创建时间(ms)
- mtime: 最后更新时间(ms)
- version/dataVersion: 数据变化号
- aversion/aclVersion: 访问控制版本号
- ephemeralOwner: 临时节点客户端的sessionId。持久节点为0
- dataLength: 数据长度
- numChildren: 子节点数量
- cversion: 子节点变化号,子节点修改次数
- pzxid/pZxid: 最后更新的子节点zxid
- 持久/临时:
- 持久: 创建后会一直存在,直到执行删除操作。
- 临时: 生命周期与客户端会话绑定,当客户端断开连接,则该节点自动删除。
- 非连续/连续:
- 非连续: 正常节点。
- 连续: 在创建时会自动为节点加上递增的数字后缀。该数字由父节点维护,同目录下子节点共享。
上述两两组合,共有下列类型:
- 持久节点。若节点已存在,会抛出异常。
- 持久的连续节点。
- 临时节点。该类型节点不能有子节点
- 临时的连续节点。
监视器/观察者。负责监控节点变化,通知客户端。 每次注册只监听一次,之后变化则需重新注册watcher 可监视的命令:
- create
- delete
- setData