初步认识zookeeper

zookeeper是一个开源的分布式协调服务,是由雅虎创建的,基于google chubby。

zookeeper是什么

分布式数据一致性的解决方案

zookeeper能做什么

  • 数据的发布/订阅
    • 配置中心:disconf
  • 负载均衡
    • dubbo利用zookeeper机制实现负载均衡
  • 命名服务
  • master选举
    • kafka
    • Hadoop
    • hbase
  • 分布式队列
  • 分布式锁

zookeeper特性

  • 顺序一致性
    • 从同一个客户端发起的事务请求,最终都会严格按照顺序被应用到zookeeper中
  • 原子性
    • 所有的事务请求的处理结果在整个集群中的所有机器上的应用情况是一致的,也就是说,要么整个集群中的所有机器都成功应用了某以事务、要么全都不应用
  • 实时性
    • 一旦一个事务被成功应用,客户端就能够立即从服务端读取到事务变更后的最新数据状态
      • zookeeper仅仅保证在一定时间内,近实时
  • 单一视图
    • 无论客户端连接到哪个服务器,所看到的模型都是一样
  • 可靠性
    • 一旦服务器端提交了一个事务并且获得了服务器端返回成功的标识,那么这个事务所引起的服务器端的变更会一直保留

Zookeeper并不是用来存储数据的,而是通过监控数据状态的变化,达到基于数据的集群管理

zookeeper安装

  • 单机环境
    • 下载zookeeper的安装包
    • 解压
      • tar -zxvf zookeeper-xx.tar.gz
    • 生成zoo.cfg
      • cd ZK_HOME/conf
      • cp zoo_sample.cfg zoo.cfg
    • 运行
      • sh zkServer.sh start-foreground
        • start
        • start-foreground
        • stop
        • restart
        • status
        • upgrade
        • print-cmd
    • 客户端连接
      • sh zkCli.sh -server ip:port
  • 集群环境
    • 集群角色
      • leader
      • follower
      • observer
        • server.id=ip:zkPort:leaderElectionPort:observer
        • 不参数投票,只接收投票结果
        • 不属于zookeeper的关键部位
        • 特殊的zookeeper节点
        • 帮助解决zookeeper的扩展性
          • 如果大量客户端访问zookeeper集群,需要增加zookeeper集群机器数量。从而增加zookeeper集群性能。导致zookeeper集群写性能下降,zookeeper的数据变更需要半数以上服务器投票通过,造成网络小号增加投票成本
    • 修改配置文件
      • server.id=ip:zkPort:leaderElectionPort
        • id:1~255,标识该机器在集群中的机器序号
        • 有几台机器就写几行
    • 创建 myid文件
      • 在每一台服务器的dataDir目录下创建
      • 数据内容是没太机器对应的serverId的数字
    • 启动zookeeper
  • 客户端的写请求一定会发送到leader节点上
  • 客户端的读请求,会根据算法分配到不同节点