Zookeeper

ZooKeeper是一个集中式服务,用于维护配置信息、命名、提供分布式同步和提供组服务。所有这些类型的服务都以某种形式被分布式应用程序使用。每次实现它们时,都有大量的工作要去修复不可避免的bug和争用条件。由于实现这些类型的服务的难度,应用程序最初通常会对这些服务略施小计,这会使它们在发生变化时变得脆弱,并且难以管理。即使正确地执行这些服务,这些服务的不同实现也会导致部署应用程序时的管理复杂性。

一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chuby一个开源的实现,是Hadoop和Hbase的重要组件。ZooKeeper使用Java所编写,但是支持Java和C两种编程语言。

官方文档

https://zookeeper.apache.org/

模型结构

在这里插入图片描述

模型的特点

  1. 每个子目录如/node1都被称作一个znode(节点)。这个znode是被它所在的路径唯一标识
  2. znode可以有子节点目录,并且每个znode 可以存储数据
  3. znode 是有版本的,每个znode中存储的数据可以有多个版本,也就是一个访问路径中可以存储多份数据
  4. znode可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端

节点的类型

持久节点(PERSISTENT)

节点在被创建后就一直存在直到主动删除(即使客户端消失也存在)

持久顺序节点(PERSISTENT_SEQUENTIAL)

节点在被创建后就一直存在直到主动删除,在ZK中,每个父节点会为他的第一级子节点维护一份时序,会记录每个子节点创建的先后顺序。基于这个特性,在创建子节点的时候,可以设置这个属性,那么在创建节点过程中,ZK会自动为给定节点名加上一个数字后缀,作为新的节点名。这个数字后缀的范围是整型的最大值。

临时节点(EPHEMERAL)

生命周期和客户端一致,客户端消亡,节点自动清除且不能有子节点

临时顺序节点(EPHEMERAL_SEQUENTIAL)

生命周期和客户端一致,客户端消亡,节点自动清除且不能有子节点,每个父节点会为他的第一级子节点维护一份时序

安装Zookeeper

我使用的docker安装方式

docker search zookeeper
//安装Java
docker pull adoptopenjdk/openjdk8
//安装zookeeper
docker pull zookeeper

启动

docker run --name zk -p 2181:2181 -d zookeeper

在这里插入图片描述

进入容器

docker exec -it 4284ec625c83 bash

在这里插入图片描述

连接zookeeper的cli

找到bin目录下的zkCli.sh启动

./zkCli.sh

在这里插入图片描述

配置文件(zoo_sample.cfg)

  1. tickTime:集群节点之间的心跳时间
  2. initLimit:初始化集群时的超时时间n*10s
  3. syncLimit:集群在运行时同步数据的超时时间
  4. dataDir:存储数据的默认位置
  5. clientPort:客户端端口(默认2181)
  6. maxClientCnxns:线程池线程数量
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true

Docker启动zookeeper并指定配置文件

意思是指定/root/dockerfiles/zookeeperconf目录作为zookeeper的conf目录

docker run --name zk -p 2181:2181 -v /root/dockerfiles/zookeeperconf:/conf -d zookeeper

指令

指定服务器进行连接

./zkCli.sh -server 地址:2181

查看所有节点

ls /

查看某个节点

ls /节点名称

创建节点(默认为持久节点)

create -节点类型 /节点名称 数据
//持久节点
create -p /node1 1
//持久顺序
create -s /node2 2
//临时
create -e /node3 3
//临时顺序
create -s -e /node4 4 

删除节点(无子节点)

delete /节点名称

删除节点(含有子节点)

递归删除全部

rmr /节点名称

退出连接,会话失效

quit

查看节点状态

stat /节点名称

在这里插入图片描述

  1. cZxid:创建的事务ID
  2. ctime:创建时间
  3. mZxid:修改的ID
  4. mtime:修改的时间
  5. pZxid:父节点ID
  6. cversion:创建的版本号
  7. dataVersion:节点数据版本号
  8. aclVersion:节点ACL的版本号
  9. ephemeralOwner:如果节点是临时节点,则表示创建该节点的会话的SessionID;如果节点是持久节点,则属性值为0
  10. dataLength:数据内容的长度
  11. numChildren:子节点个数

获取节点上的数据信息

get /节点名称

修改节点数据

set /节点名称 数据
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐