zookeeper

zookeeper

  • 解决分布式系统数据一致性
    – 多节点一致性
    – 有leader
    – 以树状结构存储
    ·一个node默认存储1MB
    – 当一台机器挂掉之后,在服务恢复后会自动从leader自动同步数据
    – 写硬盘日志,在写内存
    – 最终一致性
  1. leader选举 (选举时服务器状态:looking)
    选自己
    选强者,谁的数据最新.
    事务ID(zxid)最大
    如果zxid,选myid最大(conf里配的serverId)
    • 选举时机:(选举期间不能对外提供服务)
      • 集群启动,每个节点的myid为自己(相当于第一次都投给自己),zxid一致,各节点之间交换投票数据,选举myid最大的,然后根据过半机制,选举出leader
      • Leader挂了
      • Follower挂掉,Leader发现于过半的Follower失去链接,重新选举。
  2. 过半机制
    Follower/2
  3. 预提交,收到ask,提交(二次提交)
    • Leader收到一个事务请求,先把事务日志发送给所有Follower
    • Follower收到事务日志后,返回给Leader一个ask
    • Leader收到过半的ask后,给所有Follower发送commit命令
      备注: 如果Follower接收到事务请求,会转发给Leader处理
  • Observer
    集群中,如果机器特别多,读的效率会特别高,因为读请求是不需要转发给Leader,但是如果机器多了,会影响写请求的效率,因为涉及到过半提交。
    所以会有一个Observer,该节点只会处理客户端的读请求,并且定时从Leader同步数据,增加读取速度