version字段记录该节点的内容第几次更新。zookeeper利用这个字段实现乐观锁。客户端每次发起更新时,必须要携带本次更新的版本值(可能这个客户端在读取的时候,别的会话已经修改过这个字段了,version已经加1了)。如果携带的版本值比znode当前的版本值小。说明别人在你读取之后已经修改过值了,所以你的更新会失败
follower越多,容灾能力越强,但是选举过程代价越大,同步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,弹出如下界面,指定主机:端口即可(因为没有开启密码验证)