从使用角度看何为zookeeper

Zookeeper

zookeeper作用

作用:

  • 中间件,提供协调服务,提供协助运算,协助管理存储等功能
  • 作用于分布式系统,发挥其优势,可以为大数据服务
  • 支持java,提供java和c语言的客户端Api

特性:

  • 一致性:数据一致性,数据按照顺序分批次入库
  • 原子性:事务要么成功要么失败,不会局部化
  • 单一视图:客户端链接集群中的任一节点,数据都是一致的
  • 可靠性:每次对zk的操作状态都会保存在服务端
  • 实时性:客户端可以读取到zk服务端的最新数据

作用体现:

  • Master节点选举,主节点挂了之以后,从节点就会接手工作,并且保证这个节点是唯一的,这也是所谓首脑模式,从而保证集群是高可用的。
  • 统一配置文件管理,即只需要部署一台服务器,则可以把相同的配置文件同步更新到其他所有服务器,此操作在云计算中用的特别多
  • 发布和订阅,类似消息队列MQ(amq, rmq…),dubbo发布者把数据存储到znode上,订阅者会读取到这个数据。
  • 提供分布式锁,分布式环境中不同进程之间争夺资源,类似多线程之间的锁
  • 集群管理,集群中保证数据的强一致性

什么是分布式系统

  • 很多台计算机组成一个整体,一个整体一致对外并处理同一请求
  • 内部每台计算机都可以相互通信
  • 客户端到服务端的一次请求到响应结束会经历很台计算机

在这里插入图片描述

发布包文件列表

# 可执行文件
drwxr-xr-x 2 andrew andrew  4096 3月  17  2021 bin
# 配置文件
drwxr-xr-x 2 andrew andrew  4096 1月   1 18:18 conf
# 文档路径
drwxr-xr-x 5 andrew andrew  4096 3月  17  2021 docs
# 依赖的jar包
drwxrwxr-x 2 andrew andrew  4096 1月   1 18:07 lib
-rw-r--r-- 1 andrew andrew 11358 3月  17  2021 LICENSE.txt
drwxrwxr-x 2 andrew andrew  4096 1月   1 18:20 logs
-rw-r--r-- 1 andrew andrew   432 3月  17  2021 NOTICE.txt
-rw-r--r-- 1 andrew andrew  2214 3月  17  2021 README.md
-rw-r--r-- 1 andrew andrew  3570 3月  17  2021 README_packaging.md

配置文件zoo_sample.cfg

# The number of milliseconds of each tick
# 用于计算的时间单元。比如session超时  N*tickTime
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
# 用于集群,允许从节点连接并同步到master节点的初始化时间,以tickTime的倍数来表示
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
# 用于集群,master主节点与从节点之间发送消息,请求和应答时间的长度。
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
# 默认数据保存位置,最后从新定义
dataDir=/tmp/zookeeper
# 如果不定义默认的位置和dataDir的位置是一致的
dataLogDir=/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

启动和停止zk服务

# 配置文件
# 将conf中zoo_sample.cfg 修改为zoo.cfg,并修改配置文件
# 启动zk 
./zkServer.sh start
# 停止zk 
./zkServer.sh stop

启动和停止zk客户端

# 通过/zkCli.sh 启动zk客户端

zookeeper基本数据模型

  • 是一个树形结构,类似于前端开发的tree.js组件
  • 可以理解为Linux的目录结构
  • 每一个节点都称之为znode,他可以有子节点,也可以有数据
  • 每个节点分为临时节点和永久节点,临时节点在客户端断开连接之后消失
  • 每个zk节点都有各自的版本号,可以通过命令行来显示节点信息
  • 每当节点数据发生变化,那么该节点的版本号会累加(乐观锁)
  • 删除/修改过时节点,版本号不匹配则会报错
  • 每个zk节点存储的数据不宜过大,几k即可
  • 节点可以设置权限acl,可以通过权限来限制用户的访问

zk特性原理

Session 基本原理

  • 客户端与服务端之间的连接存在会话
  • 每个会话都可以设置一个超时时间
  • 心跳结束,session则过期
  • session过期,则临时节点失效

Watcher机制

  • 针对每个节点操作,都会有一个监督者->watcher
  • 当监控的某个对象(znode)发生了变化,则触发watcher事件
  • Zk 的watcher是一次性的,触发后立即销毁
  • 父节点、子节点增删改查都能够触发其watcher事件
  • 针对不同类型的操作,触发的watcher事件也不同
  1. (子)节点创建事件
  2. (子)节点删除事件
  3. (子)节点数据变化事件

ACL的构成

  • 当设置为IP指定的IP地址,此时限制IP进行访问,比如IP:192.168.1.1:[permissions]
  • super:代表超级管理员,拥有所有的权限

zk客户端命令

客户端连接

# 默认本地链接127.0.0.1 
./zkCli.sh  

查看znode节点

# ls + path 查看对应目录下内容
[zk: localhost:2181(CONNECTED) 4] ls /
[zookeeper]
# get, stat命令
# ls2 ==> ls + stat
[zk: localhost:2181(CONNECTED) 8] ls -s /
[zookeeper]
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
# stat命令查看对应路径状态信息
[zk: localhost:2181(CONNECTED) 9] stat /
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
# get湖获取节点内容信息

关闭客户端连接

直接Ctrl+C进行退出即可

设置set命令

可以通过在数据后面跟上版本号来实现乐观锁控制,只有版本号给对的人才能设置成功

# 设置更改一个节点
[zk: localhost:2181(CONNECTED) 6] set /data/name
# 使用乐观锁的方式设置一个节点的值
[zk: localhost:2181(CONNECTED) 22] get -s /data/name
123
cZxid = 0x7
ctime = Mon Jan 03 23:25:59 CST 2022
mZxid = 0x1a
mtime = Wed Jan 05 21:48:36 CST 2022
pZxid = 0x7
cversion = 0
dataVersion = 15
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
# 指定版本必须和当前的版本保持一致,若是不一致会报错
[zk: localhost:2181(CONNECTED) 23] set /data/name 123 -v 15
# 上步执行之后,这里的version会变成16再按照15进行设置肯定会设置失败
[zk: localhost:2181(CONNECTED) 24] set /data/name 123 -v 15
version No is not valid : /data/name

删除节点delete命令

[zk: localhost:2181(CONNECTED) 25] delete /data/name 
[zk: localhost:2181(CONNECTED) 26] get /date/name
org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /date/name
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Achou.Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值