Zookeeper简介

什么是Zookeeper?

       Zookeeper是一个高效的分布式协调服务,它暴露了一些公用服务,比如命名/配置管理/同步控制/群组服务等。我们可以使用ZK来实现比如达成共识/集群管理/leader选举等。

  Zookeeper是一个高可用的分布式管理与协调框架,基于ZAB算法(原子消费广播协议)的实现。该框架能够很好地保证分布式环境中数据的一致性。也正是基于这样的特性,使得Zookeeper成为了解决分布式一致性问题的利器。

  顺序一致性:从一个客户端发起的事务请求,最终将会严格地按照其发起的顺序被应用到Zookeeper中去。

  原子性:所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么整个集群所有的机器都成功应用了某一事务,要么有没有应用,一定不会出现部分机器应用了该事务,而另一部分没有应用的情况。

  单一视图:无论客户端连接的是哪一个Zookeeper服务器,其看到的服务器端数据模型都是一致的。

  可靠性:一旦服务器成功地应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务端状态将会被一致保留下来,除非有另一个事务对其更改。

  实时性:通常所说的实时性就是指一旦事务被成功应用,那么客户端就能立刻从服务器上获取变更后的新数据,Zookeeper仅仅能保证一段时间内,客户端最终一定能从服务器端读取最新的数据状态。

Zookeeper设计目标

  • 简单的数据结构。Zookeeper就是以简单的树形结构来进行相互协调的(也叫树形名字空间)。
  • 可以构建集群。一般Zookeeper集群通常由一组机器构成,一般3~5台机器就可以组成一个Zookeeper集群了,只要集群中超过半数以上的机器能正常工作,那么整个集群就能够正常对外提供服务。
  • 顺序访问。对于来自每一个客户端的每一个请求,Zookeeper都会分配一个全局唯一的递增编号,这个编号反应了所有事务操作的先后顺序,应用程序可以使用Zookeeper的这个特性来实现更高层次的同步
  • 高性能。由于Zookeeper将全量数据存储在内存中,并直接服务于所有的非事务请求,因此尤其是在读操作为主的场景下性能非常突出,在JMater压力测试下(100%读请求场景下),其结果大约在12~13W的QPS.

(一)Zookeeper基础知识,体系结构、数据模型

  1. zookeeper是一个类似hdfs的树形文件结构,zookeeper可以用来保证数据在(zk)集群之间的数据的事务性一致
  2. zookeeper有watch事件,是一次性触发的,当watch监视的数据发生变化时,通知设置了该watch的client,即watch
  3. zookeeper有三个角色:lender,follower,observer
  4. zookeeper应用场景:统一命名服务(Name Service)  配置管理(Configuration Management)  集群管理(Group Membership) 共享锁(Locks) 队列管理

(二)Zookeeper配置(搭建zookeeper服务器集群)

  1、结构:一共三个节点(zk服务器集群规模不小于3个节点),要求服务器之间系统时间保持一致。

  2、上传zk

      解压:tar zookeeper-3.4.5.tar.gz

      重命名:mv zookeeper-3.4.5 zookeeper

      修改环境变量:vi /etc/profile

            export ZOOKEEPER_HOME=/usr/local/zookeeper

            PATH=.:$ZOOKEEPER_HOME/bin:$JAVA_HOME...

      刷新:source /etc/profile

      修改zookeeper配置文件  cd /usr/local/zookeeper/conf         mv zoo_sample.cfg  zoo.cfg

      修改conf:vi  zoo.cfg  修改两处

            dataDir=/usr/local/zookeeper/conf/data

            最后面添加   server.0=url :2888:3888

                  server.1=url :2888:3888

                  server.2=url :2888:3888

      服务器标识配置:

            创建文件夹: mkdir data

            创建文件myid 并填写内容为 0: vi myid

(三)zoo.cfg详解:

  • tickTime    基本事件单元,以毫秒为单位。这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔。
  • dataDir     存储内存中数据库快照的文职,zookeeper保存数据的目录,默认情况下,zookeeper将写数据的日志文件也保存在这个目录
  • clientPort  这个端口是客户端连接zookeeper服务器的端口,zookeeper会监听这个端口,接受客户端的访问请求。
  • initLimit     这个配置用来配置zookeeper接受客户端初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过10个心跳时间长度后,zookeeper服务器还没接收到客户端的返回消息,那么表明这个客户端链接失败
  • syncLimbo 这个配置项标识Leader 与Follower 之间发送消息。请求和应答时间长,最长不能超过多少个tickTime的时间长度、
  • server.A =B:C:D     A表示这个是第几号服务器,B是这个服务器的ip地址,C表示的是这个服务器与集群中的Leader服务器交换信息的端口:D表示万一集群中Leader服务器挂了,需要一个端口进行重新选举。
原文地址:https://www.cnblogs.com/shmilyToHu/p/9005418.html