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事件也不同
- (子)节点创建事件(子)节点删除事件(子)节点数据变化事件
当设置为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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)