zookeeper 核心概念
选举机制

1.半数机制:zookeeper 集群只要有一半的机器保持存活状态。zookeeper 集群就处于可用状态,因此zookeeper 适合安装奇数台机器
2.zookeeper 虽然在配置中没有明确配置 master 和 slave 节点,但集群在运行时却在初始化运行时会根据选举机制选举出 leader 和 flower 机制。符合主从架构。
3.选举机制:半数以上机器选择(半数以上代表的是整个zookeeper 集群中机器的半数),优先选择编号高的,一旦确定leader不会轻易改变。
以5台机器的 zookeeper 集群为例,说明 zookeeper 选举机制。
假设这些机器都是最新启动,也没有历史数据。这些服务器编号myid 从 1 -5 。依照编号从 1- 5 启动。
1号机器启动,发出选举报文信息没有任何响应,所以选举状态一直处于 looking 状态。
2号机器启动,它与1号机器通信,由于 id 编号较大,在选举中胜出,但由于没有达到超过半数以上机器选举它,所以也没能成为 leader,也处于 looking 状态
3号机器启动,此时它与1号和2号机器通信,并且1号2号因为3号的id编号大,所以选择它作为leader,它自己也投了本身1票,超过了集群半数的要求,所以成为 zookeeper集群的leader。
4号机器启动,由于4号编号大,理论上应选择它为集群的leader,由于启动顺序晚于 3 号机,前2个机器已经选择 3 号机器作为leader,所以 4号只能当folwer
5号机器启动,由于5号编号大,理论上应选择它为集群的leader,由于启动顺序晚于 3 号机,前4个机器已经选择 3 号机器作为leader,所以 5号只能当folwer
注意,集群启动顺序不同,会产生不同的选举结果。由上面的选举机制可以看出集群只要有3台机器,这个zookeeper就可以正常对外提供服务。因此zookeeper 适合安装奇数机器。
文件结构与节点类型

zookeeper 文件结构是一个类 unix 的文件树结构。每个文件目录中的节点,我们称之为 znode,zookeeper在 znode 上进行数据存储,znode 默认存储数据大小为 1M。
znode 节点可以分为 持久性节点和短暂性节点。
持久性节点创建后,客户端关闭不会被删除。
短暂性节点创建后,会在当前客户端存活是保存,当前客户端关闭,节点被删除。 create -e
上述两个节点又可以分为带序号节点和不带序号节点 。序号由上层父节点负责维护。在分布式系统中我们可以通过序号标识一个时间的时间顺序。
watch 监控机制

1.首先客户端存在一个主线程 Main() 线程。
2.在主线程 Main 中创建 zookeeper 的客户端zkclient,此时 zkclient 会创建两个线程 connect 线程和 listener 线程
3.connect 线程负责注册监听事件到 zookeeper 服务端集群。并与客户端保持通信
4.zookeeper 服务端会把注册信息加入 注册监听器列表
5.zookeeper服务端 当监听发现到数据或路径改变时,就把改变的消息发送到 zkClient 的 listener 进程
6.listenter 内部调用 process()方法进行响应处理
常见的监听分为:
监听节点数据发生的变化 znode
监听节点增加删除(路径变化)
通过常见监听我们也可发现 zookeeper是一个基于观察者模式的文件目录树系统。
写数据流程

zookeeper 集群中各个机器数据保持一致性。且实时同步。正式因为这一特性,zookeeper 才适合做统一信息,配置管理。zookeeper写数据采用了广播通信。
写数据流程:
1.client 向 zookeeper 发送写数据请求。
2.如果连接的zookeeper 节点不是 leader,flower节点会把请求转发到 leader机器。
3.leader 把写请求通过广播机制,传递给各个 节点。节点接收到写请求,进行写数据。
4.当 leader 收到半数以上机器的写成功响应,就会通知client连接的zookeeper 节点写成功
5. client连接的zookeeper 节点通知zookeeper 客户端,写数据成功。
zookeeper的部署方式?集群角色?至少需要几台机器?
部署方式:单机部署,伪分布式:(通过启动不同配置文件,启动zookeeper在不同端口),分布式环境
集群角色: leader , folwer (主从架构)选举机制
至少需要机器数量: 3台,zookeeper 因为集群中有半数机器存活就可正常使用,所以适合配置奇数台机器。
zookeeper 常用命令
