ZooKeeper 是一个开源的分布式,它的设计目标是将那些复杂且容易出错的分布式协同服务封装起来,抽象出一个高效可靠的原语集,并以一系列简单的接口提供个用户使用。
ZooKeeper 有几大特征:
ZooKeeper 的理解和使用成本都很低,它提供的是一种层级式的命名空间,这一点和标准的文件系统类似。
ZooKeeper 服务可以支持集群模式,并且能够轻松扩展,客户端可以连接到任意一个服务器,都能够获得服务。
ZooKeeper 的节点是可以保证有序的。每一个更新操作都会被标记一个序号,ZooKeeper 执行的时候会按照顺序执行。
ZooKeeper 在读多写少的应用场景中可以实现快速响应。这是因为 ZooKeeper 本身的部署架构是主从模式,主节点可以响应读写请求,而从节点只能响应读请求。当读写比例大于10:1时,ZooKeeper 就可以利用扩展能力改善集群的响应速度。
ZooKeeper架构图
介绍完了 ZooKeeper 的整体情况,我们再来看看 ZooKeeper 的另一个比较重要的概念——节点(Node)。
ZooKeeper 的节点叫做Znode,可以分为两种:一种是持久性的,一种是临时性的。每一个 Znode 都可以存储数据,Znode 的更新是以版本更新的形式迭代的。因此,客户端接收数据的同时还会接收到版本信息。
ZooKeeper 临时节点的生命周期是与 session 相关的,当 session 处于活跃状态时,临时节点会一直存在,当 session 消亡时,临时节点会被删除。
ZooKeeper 客户端在和 Server 端进行连接的时候,会创建一个 session,客户端可以主动关闭 session。当 ZooKeeper 服务端节点没有在指定时间内收到客户端消息的话,服务端也会关闭 session。如果建立连接出错,ZooKeeper 客户端也会自动和其他服务端节点尝试建立新的连接。
ZooKeeper 的安装方式非常简单,首先到官网下载 ZooKeeper 的安装包,然后解压安装包。
接着是修改配置文件,进入目录apache-zookeeper-3.6.2-bin/conf
,从 zoo_sample.cfg 文件复制出来一个名为 zoo.cfg 的配置文件,修改dataDir=/data/zookeeper
,这个目录用于存储 ZooKeeper 的数据。配置好之后,我们就可以启动 ZooKeeper 了,不过为了更好的使用 ZooKeeper 命令,我们把 ZooKeeper 相关命令配置到 PATH 中。
现在就可以启动 ZooKeeper 了。只需要使用下面这个命令即可。
zkServer.sh start
启动之后,我们来看一下 ZooKeeper 有没有报错,我们来到 ZooKeeper 目录下的 logs 目录,输入命令
grep -E -i "((exception)|(error))" *
如果没有输出,说明 ZooKeeper 启动没有报错。
接着查看对2181端口的监听
netstat -an | grep 2181
正常监听的话,我们就可以使用客户端进行连接了。
在确保 ZooKeeper 服务端启动没有问题后,我们使用客户端进行连接。
zkCli
连接时会有上图所示的日志输出。
连接好之后可以输入命令
ls -R /
这个命令用来查看 ZooKeeper 现有的节点。
/
/zookeeper
/zookeeper/config
/zookeeper/quota
最初只有几个 ZooKeeper 自带的目录。
这里可以使用 create /app
命令来创建一个名为 app 的目录。
对于 ZooKeeper 的初印象到这里就结束了,目前我已经对 ZooKeeper 有了一个大概的了解,并且能够顺利在本机安装 ZooKeeper,对于 ZooKeeper 的命令也有一定的了解。
后面我们会对 ZooKeeper 常见的应用进行介绍。