用户工具


节点类型

  • 持久节点
  • 持久顺序节点(zookeeper自动把节点名加上一个数字后缀)
  • 临时节点(临时节点的生命周期和一次会话一样,会话关闭时被zookeeper删除)
  • 临时顺序节点

节点的version属性

version字段记录该节点的内容第几次更新。zookeeper利用这个字段实现乐观锁。客户端每次发起更新时,必须要携带本次更新的版本值(可能这个客户端在读取的时候,别的会话已经修改过这个字段了,version已经加1了)。如果携带的版本值比znode当前的版本值小。说明别人在你读取之后已经修改过值了,所以你的更新会失败

角色

leader

  • 事务请求的唯一调度和处理者,保证集群事务处理的顺序性
  • 集群内部各服务的调度者

follwer

  • 处理客户端非事务请求,事务请求转发给leader
  • 参与事务请求proposal的投票
  • 参与leader选举的投票

follower越多,容灾能力越强,但是选举过程代价越大,同步leader的消耗也越大

observer

  • 处理客户端非事务请求,事务请求转发给leader
  • 不参与任何投票

observer通常用于不影响集群能力的情况下,提升集群非事务的处理能力

查看运行状态

提到对运行时的java系统的管控,不得不提到JMX(java manaement extensions)。jmx是一个为应用程序。设备系统等植入管理功能的框架,非常方便的让java系统对外提供运行时数据信息和系统管理的借口。zookeeper也使用了标准的JMX对外提供运行时数据。

zookeeper默认开启了JMX的功能,但只限本地连接,做如下修改即可(要重启):

# 注释默认配置
#ZOOMAIN="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=$JMXLOCALONLY org.apache.zookeeper.server.quorum.QuorumPeerMain"

# 设置远程连接JMX的端口,验证方式等等
ZOOMAIN="-Dcom.sun.management.jmxremote.port=5000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false org.apache.zookeeper.server.quorum.QuorumPeerMain"

jdk默认自带了Jconsole工具,终端输入jconsole,弹出如下界面,指定主机:端口即可(因为没有开启密码验证)