什么是zookeeper

他是一个分布式系统的协调组建,并且他有一项重要的功能可以对标redis,就是可以在zookeeper上实现分布式锁。性能也是一样优秀。

数据结构

和redis不同的是,zk的数据结构是以目录的形式进行存储。和redis类似,zk的目录相当于key,值相当于value。value通常以字符串的形式存储在目录中。

zk目录中的数据量最大为1MB,也就是如果字符存储的话,最多可以存储100w个字符,且当一个字符占用1个B的时候。

基本操作

对zk的基本操作有如下几种操作

增,删,改,查

1
create /dataDir "hello"

1
delete /dataDir

1
set /dataDir  "hello"

1
get /dataDir 

可以获得dataDir目录下的包括数据在内的基本数据信息

高级

背景

由于单个zk会歇菜,所以单个zk节点当然不是很好的方案。

集群

和redis一样,我们为了解决单点故障问题,我们引入了主从架构,为了解决自动切换master问题,我们引入的哨兵架构;为了解决redis容量问题,我们引入了集群cluster的设计架构。那么在zk中,分为无主集群有主集群

无主集群

存在时机

zk集群刚刚创建,需要根据一定规则投票选举出一个leader。

集群中的leader由于某种原因宕机或者网络中断,那么集群中的其他服务器将重新选举leader。此时,集群无法正常对外提供服务。

有主集群

存在时机

当集群创建之后,投票选举出对应的leader,此刻集群相对稳定,读写分离模型已搭建。那么此时集群可以正常对外提供服务。

投票机制

触发时机

  • 集群刚刚创建并启动。
  • leader宕机或leader通信中断。

为了正常选举出对应的leader,zk必须有一种机制,并且这种机制必须是高效的。需要在能够容忍的最短时间内选出一个leader,领导整个集群对外提供服务。

zk采用集群服务器数/2+1的策略,进行选举。

举个栗子,现在集群中有四个机器,那么当其中的(4/2+1=)3台服务器启动之后,集群便会触发选举投票机制,最终按照既定的选择规则,选出leader,从而进行快速切换到工作模式。

据相关评测,这个过程大概仅需要200ms即可完成。