Zookeeper基础命令操作(一)

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Zookeeper基础命令操作(一)

zookeeper的特性

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

安装zookeeper

下载地址

https://zookeeper.apache.org/

上传到服务器后解压,环境变量配置,需要先安装jdk

vim /etc/profile

添加环境变量

JAVA_HOME=/opt/jdk1.8.0_101
MAVEN_HOME=/opt/apache-maven-3.3.9
ZOOKEEPER_HOME=/usr/local/zookeeper
PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin:$ZOOKEEPER_HOME/bin
export PATH

重新加载配置文件

source /etc/profile

zookeeper目录结构

  • bin:主要的一些运行命令
  • conf:存放配置文件
  • contrib:附加的一些功能
  • dist-maven:mvn编译后的目录
  • docs:文档
  • lib:需要依赖的jar包
  • recipes:案例demo代码
  • src:源码

复制conf下的zoo_sample.cfg重新命名为confzoo.cfg

修改zoo.cfg配置,在/usr/local/zookeeper/目录下创建dataDir,dataLogDir文件夹

# 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=/usr/local/zookeeper/dataDir
dataLogDir=/usr/local/zookeeper/dataLogDir
# 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

配置文件说明

  • 1.tickTime =2000:通信心跳数,Zookeeper服务器与客户端心跳时间,单位毫秒
    Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳,时间单位为毫秒。

     它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。(session的最小      超时时间是2*tickTime)

  • 2.initLimit =10:LF初始通信时限
  • 集群中的Follower跟随者服务器与Leader领导者服务器之间初始连接时能容忍的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。
  • 3.syncLimit =5:LF同步通信时限
  • 集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit * tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer。
  • 4.dataDir:数据文件目录+数据持久化路径
    主要用于保存Zookeeper中的数据。
  • 把默认的dataDir修改位置,不建议使用临时目录,需要创建dataDir,dataLogDir目录
  • dataDir:必须配置
  • dataLogDir:日志目录,如果不配置会和dataDir公用
  • 5.clientPort =2181:客户端连接端口
    监听客户端连接的端口。

Zookeeper基本数据模型

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

zookeeper运行

进入到bin目录下,分别启动服务端可客户端

./zkServer.sh start
./zkCli.sh

可以用help命令查看指令帮助

zookeeper作用体现

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

zookeeper特性-session的基本原理

  • 客户端与服务端之间的连接存在会话
  • 每个会话都可以设置一个超时时间
  • 心跳结束,session则过期
  • session过期,则临时节点znode会被抛弃
  • 心跳机制,客户端向服务端的ping包请求

zookeeper基本命令操作

用客户端进入后可以用help来查找指令帮助

  • ls path [watch] 查看
  • stat path [watch] 获得节点的更新信息

cZxid :创建节点的id,每次修改ZooKeeper状态都会收到一个zxid形式的时间戳,也就是ZooKeeper事务ID。

事务ID是ZooKeeper中所有修改总的次序。每个修改都有唯一的zxid,如果zxid1小于zxid2,那么zxid1在zxid2之前发生。

ctime : 节点的创建时间

mZxid :修改节点的id

mtime :修改节点的时间

pZxid :子节点的id

cversion : 子节点的版本

dataVersion : 当前节点数据的版本

aclVersion :权限的版本

ephemeralOwner :判断是否是临时节点

dataLength : 数据的长度

numChildren :子节点的数量

  • get获取节点数据和更新信息
  • create [-s] [-e] path data acl 创建节点

-s表示是顺序节点,

-e表示是临时节点

默认是持久节点

acl表示权限

不加版本号号是直接可以修改或者删除的,如果添加版本号了可以使用乐观锁机制,在定版本号不对的时候,是不能修改或者删除数据的

  • set path data [version] 修改数据
  • delete path [version] 删除数据
  • rmr path 递归删除数据

watcher机制

1.针对每个节点的操作,都会由一个监督者->watcher

2.当监控的某个对象(znode)发生了变化,则触发watcher事件

3.父节点,子节点增删改都能够触发其watcher

4.针对不同类型的操作,触发的watcher事件也不同:子节点的创建、删除、修改等

watcher命令行学习

  • 通过get path [watch]设置watcher
  • 父节点增、删、改操作触发watcher
    创建父节点触发:NodeCreated

stat查看该节点的情况,没有的话watch也是可以设置的

2019070422091557.png

修改父节点数据触发:NodeDataChanged

20190704221419797.png

删除父节点触发:NodeDeleted

20190704221916611.png

ls为父节点设置watcher,创建子节点触发:NodeChildrenChanged

20190704222551707.png

ls为父节点设置watcher,删除子节点触发:NodeChildrenChanged
ls为父节点设置watcher,修改子节点不触发事件

watcher使用场景

  • 统一资源配置
相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
3月前
|
Shell
Zookeeper常用命令
Zookeeper常用命令
54 1
|
4月前
|
存储 数据安全/隐私保护
zookeeper 节点介绍及节点常用命令总结
zookeeper 节点介绍及节点常用命令总结
128 4
|
1月前
|
分布式计算 监控 Hadoop
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
39 1
|
2月前
|
存储 运维 监控
zookeeper的命令
zookeeper的命令
|
5月前
|
Shell 虚拟化
分布式系统详解--框架(Zookeeper-基本shell命令)
分布式系统详解--框架(Zookeeper-基本shell命令)
52 1
|
6月前
|
存储 Shell 数据安全/隐私保护
ZooKeeper【基础知识 04】控制权限ACL(原生的 Shell 命令)
【4月更文挑战第11天】ZooKeeper【基础知识 04】控制权限ACL(原生的 Shell 命令)
100 7
|
6月前
|
存储
ZooKeeper客户端常用命令
ZooKeeper客户端常用命令
66 1
|
6月前
|
Shell
ZooKeeper【基础 02】zookeeper-3.6.0 常用Shell命令(节点增删改查+监听器+四字指令)
【4月更文挑战第10天】ZooKeeper【基础 02】zookeeper-3.6.0 常用Shell命令(节点增删改查+监听器+四字指令)
80 0
|
6月前
Zookeeper的客户端的命令
Zookeeper的客户端的命令
45 0
|
6月前
|
存储 Shell 数据安全/隐私保护
ZooKeeper【基础 04】控制权限ACL(原生的 Shell 命令)
ZooKeeper【基础 04】控制权限ACL(原生的 Shell 命令)
160 0