Contents
  1. 1. zookeeper集群特性
  2. 2. 扩容和压缩
  3. 3. 默认选举方式 FastLeaderElection
  4. 4. 集群中读写
  5. 5. 一致性原则
  6. 6. 主从分工
    1. 6.1. Leader工作流程
    2. 6.2. Follower工作流程

zookeeper集群特性

  • Zookeeper:一个leader,多个follower组成的集群
  • 全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的
  • 更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行,由FIFO信道维护有序性
  • 数据更新原子性,一次数据更新要么成功,要么失败
  • 实时性,在一定时间范围内,client能读到最新数据

扩容和压缩

因为修改集群的数量需要修改每个zookeeper的zoo.cfg,所以要么全部重启,要么逐个重启,慢慢更新直到成功加入。

默认选举方式 FastLeaderElection

https://www.cnblogs.com/leesf456/p/6107600.html
核心:每个Node有编号:ServerID。数据都有ZXID:(SID,ZXID)作为2个参数进行投票

  • 节点1的 SID为1,节点2的SID为2,如果大家都刚启动,则ZXID都为0,此时SID谁大谁做老大,当然还需要半数机器同意才行。
  • 如果新NODE加入,老集群已经有leader了,则不需要选举,同步自己的状态为Following即可
  • 如果非Leader节点挂了,不影响Leader,如果Leader挂了,重新选举

集群中读写

集群中所有的zk节点都对外提供暴露,提供读写服务

  1. 集群中所有的ZK服务器都保存一份完整的数据,可以单独的相应所有的读操作
  2. 当请求是写操作时,会把该请求转发给Master节点,然后Master节点通知所有的节点一起完成写操作,所有节点都写成功才成功,否则都写失败,再转给接入的节点,最后反馈给用户
  3. 写的操作类似于2PC,Master向所有的Follower发起投票,F完成修改持久化后会ACK到M,M发现已经超过半数F完成了持久化,就认定该操作是成功的,就通知所有的F,都Commit,并且返回用户操作成功

一致性原则

  • 顺序一致性(Sequential Consistency):从一个客户端来的更新请求会被顺序执行。
  • 原子性(Atomicity):更新要么成功要么失败,没有部分成功的情况。
  • 唯一的系统镜像(Single System Image):无论客户端连接到哪个Server,看到系统镜像是一致的。
  • 可靠性(Reliability):更新一旦有效,持续有效,直到被覆盖。
  • 时间线(Timeliness):保证在一定的时间内各个客户端看到的系统信息是一致的。

主从分工

Leader工作流程

  1. 恢复数据;
  2. 维持与follower的心跳,接收follower请求并判断follower的请求消息类型;
  3. follower的消息类型主要有PING消息、REQUEST消息、ACK消息、REVALIDATE消息,根据不同的消息类型,进行不同的处理。
  • PING消息是指follower的心跳信息;REQUEST消息是follower发送的提议信息,包括写请求及同步请求;
  • ACK消息是follower的对提议的回复,超过半数的follower通过,则commit该提议;
  • REVALIDATE消息是用来延长SESSION有效时间。

Follower工作流程

  1. 向Leader发送请求(PING消息、REQUEST消息、ACK消息、REVALIDATE消息);
  2. 接收Leader消息并进行处理;
  3. 接收Client的请求,如果为写请求,发送给Leader进行投票;
  4. 返回Client结果。
Contents
  1. 1. zookeeper集群特性
  2. 2. 扩容和压缩
  3. 3. 默认选举方式 FastLeaderElection
  4. 4. 集群中读写
  5. 5. 一致性原则
  6. 6. 主从分工
    1. 6.1. Leader工作流程
    2. 6.2. Follower工作流程