==== 节点类型 ==== * 持久节点 * 持久顺序节点(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" **通过jconsole连接JMX** jdk默认自带了Jconsole工具,终端输入jconsole,弹出如下界面,指定主机:端口即可(因为没有开启密码验证) {{:pasted:20150926-225335.png}}