creed的博客

zookeeper 入门

· zhangwengang

zookeeper是什么?§

官网的介绍:zookeeper是一个开放源代码的分布式协调服务,由雅虎创建.是google chubby的开源实现,她是一个典型的分布式数据一致性的解决方案,分布式系统可以基于它来实现诸如数据发布/订阅,负载均衡,命名服务,集群管理,master选举,分布式锁等功能,他可以保证分布式的数据一致性特性.

zookeeper的设计目标§

zookeeper致力于提供一个高性能,高可用,且具有严格的顺序访问控制能力(主要是写操作的顺序性)的分布式协调服务,高性能zookeeper能够轻松应对那些对系统吞吐量有明显要求的大型分布式系统,高可用使的单点问题得到很好的解决,而严格的写操作可以使的客户端能够基于zookeeper实现一些复杂的同步.

zookeeper的基本概念§

数据模型§

节点类型§

集群角色§

会话§

watcher§

zxid§

为什么选择zookeeper§

zookeeper 的zab协议§

zab协议的核心§

zab协议的具体内容§

zab协议其实包含两种模式,分别是崩溃恢复和消息广播模式

zookeeper的主要配置文件§

tickTime=2000
该参数用于配置leader服务器等待follower服务器启动,并与leader完成数据同步的时间,follower服务器会在启动的时候与leader服务器建立连接并完成数据的同步,从而确定自己对外提供服务的起始状态.leader服务器允许follower服务器在initlimit完成该任务
initLimit=10
该参数用于配置leader服务器和follower服务器之间进行心跳检测的最大延时时间,在zookeeper集群允许过程中,leader服务器会与所有的follower进行心跳检测来确定该服务器是否存活已经同步数据,如果leader服务器在synclimit时间内无法获得follower的心跳响应,那么leader服务器就会认为该follower已经脱离了同步,就会从服务中剔除
syncLimit=5

dataDir=/data/zookeeper/zk1/zk1/data/
dataLogDir
可以不配置,默认值是dataDir,默认情况下,zookeeper会将事务日志文件和快照数据存储在同一个目录下,生产中使用时,要将两者进行区分开,事务日志对于磁盘的性能要求非常高,为了保证数据的一致性,zookeeper在返回客户端事务请求响应之前,必须将本次请求对应的事务日志写入到磁盘中.因此,事务日志的写入性能直接决定了zookeeper在处理事务请求时的吞吐,针对同一块磁盘的并发读写操作,比如说快照数据存储操作,如果都放在同一块目录,会极大影响事务日志的写性能,因此在生产使用过程中,要将dataDir和dataLogDir进行区分,最好单独给分配一个磁盘,以提高zookeeper的整体性能
the port at which the clients will connect
clientPort=2181
该参数用来配置组成zookeeper集群的机器列表,id为server id ,与每台服务器的myid文件中的数字相对应,同时会配置两个端口,第一个端口是leader与follower进行通信与数据同步时所使用的端口,第二个端口是专门用于leader选举过程中的投票通信
server.1=172.19.17.5:2888:2889
server.2=172.19.17.5:3888:3889
server.3=172.19.17.5:4888:4889

zookeeper 在实际中的使用§

发布/订阅§

命名服务§

分布式锁§