Zookeeper简介

  • 中间件,提供协调服务
  • 作用于分布式系统,发挥其优势,可以为大数据服务
  • 支持Java,提供Java语言和C语言的客户端api

什么是分布式系统

  • 很多台计算机组成一个整体,一个整体一致对外并且处理同一请求
  • 内部的每台计算机都可以相互通信(rest/rpc远程调用)
  • 客户端到服务端的一次请求到相应结束会经历很多台计算机

zookeeper的特性

  • 一致性:数据一致性,数据按照顺序分批入库
  • 原子性:事务要么成功,要么失败,不会局部化
  • 单一视图:客户端连接集群中的任一zk节点,数据都是一致的
  • 可靠性:每次对zk的操作状态都会保存在服务端
  • 实时性:客户端可以读取到zk服务端的最新数据

1.配置

在conf目录下,有一个zoo_sample.cfg,复制它并修改为zoo.fg

  • tickTime:用于计算的时间单元,比如session超时:N*tickTime
  • initLimit:用于集群,允许从节点连接并同步到master节点的初始化连接时间,以tickTime的倍数来表示
  • syncLimit:用于集群,master主节点与从节点之间发送消息,请求和应答时间间隔(心跳机制)超过该时间,从节点将被抛弃。
  • dataDir:必须配置的,Zookeeper用于存储相关数据文件的
  • dataLogDir:日志目录,如果不配置会和dataDir公用
  • clientPort:连接服务器的端口,默认是2181

2. 运行

zookeeper/bin目录下运行

./zkServer.sh start

进入命令行

./zkCli.sh

3. Zookeeper基本数据模型

  • zk的数据模型也可以理解为linux/unix的文件目录 /usr/local/...
  • 每一个节点都称为znode,它可以有子节点,也可以有数据
  • 每个节点分为临时节点和永久节点,临时节点在客户端断开后消失
  • 每个zk节点都有各自的版本号,可以通过命令行来显示节点信息
  • 每当节点数据发生变化,那么该节点的版本号就会累加(乐观锁)
  • 删除/修改过时节点,版本号不匹配则会报错
  • 每个zk节点存储的数据不宜过大,几K即可
  • 每个节点可以设置权限acl,可以通过权限来限制用户的访问

4. Zookeeper的作用体现

  • master节点选举,主节点挂了以后,从节点就会接手工作,并保证这个节点是唯一的,从而保证集群是高可用的
  • 统一配置文件管理,即只需要部署一台服务器,则可以把相同的配置文件同步更新到其他所有服务器,比如可以用来同步redis配置
  • 发布与订阅,类型消息队列MQ(amq,rmq),dubbo,发布者把数据存在znode上,订阅者会读取这个数据。
  • 提供分布式锁,分布式环境中不同进程之间争夺资源,类似多线程中的锁。
  • 集群管理,集群中保证数据的强一致性。