您的位置:首页 > 其它

Zookeeper介绍

2018-01-24 11:07 246 查看

 

Zookeeper介绍

 Zookeeper特性 

 

     zookeeper是一个开源的分布式协调服务.设计的目标是将那些复杂容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集.

     一致性

        从同一个客户端发起的事务请求,最终在zookeeper会按顺序执行.

    原子性

        所有事务请求的处理结果在所有节点上都是一致的.

    单一试图

        无论客户端连接上的是哪个zookeeper,看到的服务端数据模型都是一致的.

   

    zookeeper的数据模型类似于一个文件系统,节点(ZNode)之间的关系就像文件系统的目录结构一样.不过zookeeper将全部数据存储在内存中,以此来实现服务器的高吞吐,减少延迟的目的.

    zookeeper的集群通常由3-5台组成,只要集群中一半以上的机器正常工作,整个集群就能正常对外工作.

    对于客户端的每个请求,zookeeper都会分配全局唯一的递增编号,这个编号反应了事务的执行顺序.

 

Zookeeper集群

 

    集群中有三种角色:Leader,Fllower,Observer.

    所有的请求都由leader处理,它负责将一个客户端请求转换成一个事务,并将事务分发给其他节点,超过半数正确反馈之后,会再次发送commit消息,要求对前一个事务提交。

    leader服务器为客户端提供读写服务.其他的只提供读服务,唯一的区别在于Observer不参与选择leader的过程,也不参与写操作的“过半写成功”策略.

    在zk中,客户段是通过tcp长连接和zk建立连接的.对外的默认端口号是2181.客户端Session的sessionTimeout值用来设定客户端会话超时时间.如果服务器压力过大,或者网络原因,断开了与ZK的连接,只要在timeout时间之内连上,那么之前session依然有效。

    

ZNode

    zk中的数据节点叫做Znode,数据模型是ZNode Tree,由斜杆进行分割,就是一个Znode,比如:/foo/path.每个节点上都会保存自己的内容,同时保存一系列属性.

    Znode可以分为持久节点和临时节点方案.持久节点只有主动remove才会被移除,临时节点的生命周期和客户端会话绑定,一旦客户端失效,这个节点也失效.

   zk还允许用户为每一个节点添加一个属性:SEQUENTIAL.在节点被创建时,会在名字之后加上一个整形数字.

 

 ACL

     zk采用acl来进行权限控制,类似unix文件系统的权限控制.

     1.create  2.read  3.write   4.delete  5 admin(设置节点ACL权限)其中create和delete都是针对子节点的操作.

      

     权限模式

       ip

          ip模式通过地址粒度进行权限控制.例如:"ip:192.168.1.2".

     digest

           这个是最常用的模式.用类似"username:password"形式的权限标识,zk会进行两次编码(sha-1,base64)

     super

           是一种特殊的digest模式.  在zk启动的时候加上-Dzookeeper.DigestAuthenticationProvider.superDigest=username:password

          是用这个账号就可以拥有所有的权限.   

     world

        world是一种最开放的权限控制模式,从其名字中也可以看出,事实上这种权限控制几乎没有任何作用,对所有用户开放.

      

 

  

 ZAB协议(原子消息广播协议)

     ZAB协议包括两种基本的模式,分别是奔溃恢复和消息广播.当leader出现网络中断或者奔溃的是很好,zab协议会进入自动恢复模式并重新选举leader,当集群中过半的机器与新leader完成数据同步,就会退出恢复模式。

    当新的一个节点加入集群的时候,会先进入数据恢复模式:找到leader所在的服务器,同步数据,然后在一起参与到消息广播流程中国年.

    ZAB协议的消息广播过程使用的是一个原子广播协议,类似一个二段提交过程.

     



    

   

    假设一个事务被提交了,并且得到过半的节点的ack反馈,但是在发送commit之前leader挂掉了.假设leader现在广播了消息P1,P2,C1,P3,C2.其中一台只收到了P1P2C1 ,另一台只收到了P1P2.那么重新选举leader的时候会把拥有最大编号C1的那台选举为leader,原先的leader重新接入的时候,P3,C2 会被抛弃 

      

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: