创作不易,如果觉得这篇文章对你有帮助,欢迎各位老铁点个赞呗,您的支持是我创作的最大动力!
本系列主要总结下Zookeeper的基础使用,笔者准备写四篇文章:
博文内容 | 资源链接 |
---|---|
Linux下搭建Zookeeper运行环境 | https://blog.csdn.net/smilehappiness/article/details/105933433 |
Zookeeper入门,一篇就够啦 |
https://blog.csdn.net/smilehappiness/article/details/105933292 |
Zookeeper客户端ZkClient、Curator的使用,史上最详细的教程来啦~ | https://blog.csdn.net/smilehappiness/article/details/105938058 |
Zookeeper使用总结(进阶篇) | https://blog.csdn.net/smilehappiness/article/details/105938119 |
文章目录
前言
本文主要介绍Zookeeper的一些概念,以及通过命令行的方式,简单的对Zookeeper节点进行增、删、改、查操作。下一篇会介绍,如何使用一些客户端,去操作Zookeeper节点,敬请期待。
1 初识Zookeeper
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在$zookeeper_home\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。(百度百科)
2 Zookeeper运行环境
如果没有zk运行环境的童鞋们,可以参考我的博文 Linux下搭建Zookeeper运行环境,搭建zookeeper的运行环境。
3 zoo.cfg配置文件详解
zookeeper的核心配置文件zoo.cfg如下图示,整体来看,还是比较简单的。
# 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/apache-zookeeper-3.6.1-bin/data
# 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
核心配置说明:
- tickTime
Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime时间就会发送一个心跳,tickTime以毫秒为单位 - initLimit
集群中的follower服务器与leader服务器之间初始连接时能容忍的最多心跳数(tickTime的数量) - syncLimit
集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量) - dataDir
存储zookeeper的快照文件
、pid文件
,默认为/tmp/zookeeper,建议在zookeeper安装目录下创建data目录,将dataDir配置改为/usr/local/apache-zookeeper-3.6.1-bin/data
- clientPort
客户端连接zookeeper需要的端口,即zookeeper对外的服务端口,默认为2181
4 Zookeeper数据结构
ZooKeeper是一个类似与操作系统的文件系统数据结构,整体来看就是一棵树结构,如下图所示:
每个节点被称为znode
,这个znode是可以存储数据
的。
可以增加、删除、查询、修改每一个znode,也可以在一个znode下增加、删除子znode,也即是操作children节点。
znode分类,大致可以分为两类:
-
持久化目录节点
PERSISTENT
持久化目录节点
客户端与zookeeper断开连接后,该节点依旧存在;PERSISTENT_SEQUENTIAL
持久化顺序编号目录节点
客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号 -
临时目录节点
EPHEMERAL
临时目录节点;
客户端与zookeeper断开连接后,该节点将被删除EPHEMERAL_SEQUENTIAL
临时顺序编号目录节点
客户端与zookeeper断开连接后,该节点将被删除,只是Zookeeper给该节点名称进行顺序编号
5 Zookeeper客户端
5.1 图形界面客户端
Zookeeper图形客户端工具下载地址:
https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip
下载完成后,解压即可使用:
在ZooInspector\build目录下,有一个zookeeper-dev-ZooInspector.jar
的jar包
运行jar文件:java -jar zookeeper-dev-ZooInspector.jar
稍微等一会,启动完成后,这个图形化工具就可以使用啦。
连接成功后,如下图所示:
当然啦,如果偷懒,不想敲启动jar命令,写个简单的批处理文件,点击启动也可以。
例如:
@echo off
title zk client
cmd /k "cd /d D:\workplace\ZooInspector\build && java -jar zookeeper-dev-ZooInspector.jar"
注意:如果云服务器开启了防火墙,需要开放2181端口
firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --reload
如果是阿里云服务器,另外,需要开放端口
5.2 命令行客户端
使用zkCli命令行工具连接ZooKeeper,跟mysql命令行工具类似,可以在命令行操作zookeeper。
进入bin目录下,执行命令:./zkCli.sh
默认直接连接的是本地的zk服务:127.0.0.1:2181
可以指定ip和端口号进行连接:./zkCli.sh -server ip:2181
命令行工具启动成功后,如下图所示:
命令行客户端主要是通过命令对zookeeper进行操作,一般地,我们对ZooKeeper的操作,都是对znode节点进行增、删、改、查
-
添加节点
语法:
create [-s] [-e] [-c] [-t ttl] path [data] [acl]
其中 -s 表示顺序节点,-e表示临时节点,默认是持久化的
-s 和 -e 可以同时结合使用
临时节点:当客户端会话结束后,临时节点会被删除
顺序节点:该特性可用于分布式环境下的主键生成器示例:
创建节点:create /root
创建节点并且指定数据:create /root/hello write-data
-
查询语法:ls /节点名称(路径)
列出nodeName节点下的节点:
ls /nodeName
注意:
所有的节点,都是以/
开头,否则提示:Path must start with / character
-
列出根目录节点下的所有节点
使用命令:
ls /
目前就只有一个系统自带的zookeeper节点 -
获取刚才添加的root节点下所有的子节点
使用命令:
ls /root
-
获取节点的数据
使用命令:
get /root/hello
可以获取到,刚才添加的hello节点的数据 write-data -
查看节点状态信息
使用命令:
stat [-w] path
比如:stat /root节点状态信息详解:
名称 描述 cZxid 节点创建时的zxid ctime 节点创建时间 mZxid 节点最近一次更新时的zxid mtime 节点最近一次更新的时间 pZxid 操作当前节点的子节点列表的事物ID(这种操作包含增加子节点,删除子节点) cversion 子节点数据更新次数 dataVersion 本节点数据更新次数 aclVersion 节点ACL(授权信息)的更新次数 ephemeralOwner 如果该节点为临时节点,ephemeralOwner值表示与该节点绑定的session id。如果该节点不是临时节点,ephemeralOwner值为0 dataLength 节点数据长度 numChildren 子节点个数 -
修改某个节点的数据
语法:
set [-s] [-v version] path data
比如:set /root/hello write-data2
-
删除某个节点的数据
语法:
delete [-v version] path
比如:
delete /root/hello
注意:delete只能删除不包含子节点的节点,如果要删除的节点包含子节点,使用deleteall命令。
deleteall语法:deleteall path [-b batch size]
-
关闭当前会话
使用命令:
close
-
退出连接的客户端命令行
使用命令:
quit
写博客是为了记住自己容易忘记的东西,另外也是对自己工作的总结,希望尽自己的努力,做到更好,大家一起努力进步!
如果有什么问题,欢迎大家评论,一起探讨,代码如有问题,欢迎各位大神指正!
给自己的梦想添加一双翅膀,让它可以在天空中自由自在的飞翔!
来源:oschina
链接:https://my.oschina.net/u/4350344/blog/4327349