zookeeper内部使用paxos协议进行运作,根据官方的说法,paxos协议怎么来理解呢?一个zookeeper集群(zk server clustr)可以看做是一个小岛,这个集群里面的每一个节点,也就是每一个zk server,可以比喻成岛上的居民,有人的地方,就要有规矩,无规矩不成方圆,zookeeper里面规定你客户端做什么操作都要进行提议(znode change),每个提议都有编号,就是所谓的zxid。有人的地方要有规矩,还要有什么?江湖,斗争,有了斗争就有人成功,有人失败,胜者为王,败者为寇,人自然而然就有了三六九等,可见这个岛也不是一个民主的岛,不过它也没有打着民主的旗号,不可厚非的。领导就是leader,领导的下属就是follower,其余zookeeper的客户端都相当于zookeeper的臣民(client),这就引出了zookeeper里面的几种角色:

    1.leader:一个zk server,负责发起投票和做最终的决定等以及follower通信

    2.follower:zk server,负责跟客户端交互以及和leader交互以及返回数据给客户端,参与投票(读写都可以)

    3.observer:负责跟客户端交互以及和leader交互以及返回数据给客户端(读的能力),但不参与投票(这是和follower的区别所在)

    4.client:人民发起提议,leader和follower针对这个提议会开会讨论

client端执行“get /appdata”得到某个znode节点的内容时,zk内部流程是如何处理的?

        client get znode数据:client--zk server(follower从leader处同步sync得到最新的数据)--leader-follower-client接收到数据

什么时候需要投票?

        client执行更新操作和选举leader(比如leader挂掉了)的时候

怎么启动?

        ./zkServer.sh   start/status/stop

zk里面的选举是自动的吗?

        是自动选举的,安装并配置好zk集群后,通过./zkServer.sh status查看,可以看到就会出现mode:leader(zk自动选取的,选取后其他就是mode:follower或者mode:observer了)了。

zk里面的leader挂了之后谁来接管leader?

        如果你kill -9 leader_pid结束了zk的leader进程,其他follower自动接管,至于由哪个follower来接管,是zk内部通过选举算法决定的。

observer角色有什么用?

        observer观察者角色企业中用的并不多,可以只做了解。

zk集群对机器数量有什么要求?

        配置zk集群的机器数目一般都是奇数个,一般就3,5,7,9,11(支持上千台服务器了)就足够了。

zk依据zab协议两种模式:恢复模式(选主)广播模式(同步)  ,zk一般是独立的服务器

为什么要搭奇数台?

        省一个服务器,容错能力,因为zk里面有个很重要的概念"半数以上"。

zk有选举机制吗?

        有,选举的是自己的leader保证了自己的高可用性

java可以操作zk吗?

        当然可以了,zk提供了java的api,引入zk的相关jar包就可以了,如zookeeper-3.4.6.jar

 

zk为什么可以实现高可用,高可用不是keepalived的功能吗?

        zk利用其ephemeral这种节点,watcher可以感知某个znode节点数据的变化以及某个znode节点的后代节点的变化,通过这个功能

可以通知客户端节点的变化,做到高可用。zk用于高可用相当于一个副业。