zoukankan      html  css  js  c++  java
  • zookeeper 碎片知识点

    zookeeper有2中运行状态:

    1,可用状态

    2,不可用状态

     

    集群面临问题:

    1,leader肯定会挂
    2,服务不可用
    3,不可靠的集群
    4,事实,zk集群及其高可用
    5,快速的恢复出一个leader(官网给出数据是200ms)

     

    特征/保障:

    顺序一致性 - 客户端的更新将按发送顺序应用。

    原子性 - 更新成功或失败。没有部分结果。

    统一视图 - 无论服务器连接到哪个服务器,客户端都将看到相同的服务视图。

    可靠性 - 一旦应用了更新,它将从那时起持续到客户端覆盖更新。

    及时性 - 系统的客户视图保证在特定时间范围内是最新的。

     

    扩展性:

    框架架构 --- 角色有三个: Leader ,  Follower ,  Observer

    读写分离 --- observer放大查询能力

    只有Follower --- 才能参与 Leader 选举

    zoo.cfg (配置文件)
    server.1=node01:2888:3888
    server.2=node02:2888:3888
    server.3=node03:2888:3888
    server.4=node04:2888:3888:observer
    
    
    3888: 选主投票用的端口
    2888: Leader接受 write 请求的端口

     

    可靠性:

    快速恢复Leader (官网给出数据是200ms)

    数据 可靠 可用 一致性:选举过程中,节点不对外提供服务!!!


    ZK选举过程:

    1, 通过3888端口造成两两通信!

    2,只要任何人投票,都会触发那个准 Leader 发起自己的投票

    3,推选制:先比较zxid,如果zxid相同,再比较myid

    当启动初始化集群的时候,server1的myid为1,zxid为0 server2的myid为2,zxid同样是0,以此类推。此种情况下zxid都是为0。
    
    先比较zxid,再比较myid
    
    
    重新投票选举leader怎么保证数据不会丢失?
    
    zk是cp的,不一定保证可用性,在选举的过程中,不能对外提供服务。但在选举的过程中,
    
    首先选zxid(zk的事务ID ---发生过多少次操作)最大的为leader,zxid最大,表示数据是最新的,然后广播给follower,这样避免数据丢失。
    
    
    致使ZooKeeper节点状态改变的每一个操作都将使节点接收到一个Zxid格式的时间戳,并且这个时间戳全局有序。也就是说,
    
    每个对节点的改变都将产生一个唯一的Zxid。如果Zxid1的值小于Zxid2的值,那么Zxid1所对应的事件发生在Zxid2所对应的事件之前。
    
    实际上,ZooKeeper的每个节点维护者两个Zxid值,为别为:cZxid、mZxid。
    
    (1)cZxid: 是节点的创建时间所对应的Zxid格式时间戳。
    
    (2)mZxid:是节点的修改时间所对应的Zxid格式时间戳。
    
    实现中Zxid是一个64为的数字,它高32位是epoch(纪元)用来标识Leader关系是否改变,每次一个Leader被选出来,
    
    它都会有一个新的epoch。低32位是个递增计数。(表示重新选举过Leader)

     

    原子性:成功、失败。没有中间状态(队列+2PC)

    广播:分布式多节点的。全部知道!(过半)

    队列:FIFO,顺序性

    zk的数据状态在内存,用磁盘保存日志

  • 相关阅读:
    使用Mybatis时报错Invalid bound statement (not found):
    MyBatis学习(3)
    选数字
    看程序写结果
    NP
    完全平方数
    hahaha
    haha

    凝视
  • 原文地址:https://www.cnblogs.com/lifan12589/p/14607358.html
Copyright © 2011-2022 走看看