zookeeper安装及简单应用
zookeeper
Zookeeper需要在JVM虚拟机上运行,所以一定要保证有JDK支持。
1 上传Zookeeper
zookeeper-3.4.9.tar.gz
2 解压
tar -zxvf /usr/local/zookeeper-3.4.9.tar.gz
3 准备配置文件
cp /usr/local/zookeeper-3.4.9/conf/zoo_sample.cfg /usr/local/zookeeper-3.4.9/conf/zoo.cfg
Zookeeper要求配置文件的文件名必须是:zoo.cfg
4 创建数据目录
mkdir /usr/local/zookeeper-3.4.9/data
5 在zoo.cfg中配置数据目录的位置
dataDir=/usr/local/zookeeper-3.4.9/data
1.1 常用命令
1.1.1 ZooKeeper服务器与客户端
启动服务器:./zkServer.sh start
停止服务器:./zkServer.sh stop
启动客户端:./zkCli.sh
退出客户端:[zk: localhost:2181(CONNECTED) 6] quit
1.1.2 ls
查看当前znode中所包含的内容
1.1.3 ls2
查看当前节点数据并能看到更新次数等数据
1.1.4 stat
查看节点状态
1.1.5 create
create [-s] [-e] path data acl
普通创建:不带有-s、-e参数
-s:含有序列
-e:临时(重启或者超时消失)
1.1.6 set
设置节点的具体值
set 节点 value值
1.1.7 get
获得节点的值
get节点
1.1.8 delete
可以删除指定znode,当该znode拥有子znode时,必须先删除其所有子znode,否则操作将失败。
1.1.9 rmr
rmr命令可用于代替delete命令,rmr是一个递归删除命令,如果发生指定节点拥有子节点时,rmr命令会首先删除子节点。
1.2 Zookeeper节点类型
1.2.1 PERSISTENT-持久化目录节点
客户端与zookeeper断开连接后,该节点依旧存在
1.2.2 PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点
客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
1.2.3 EPHEMERAL-临时目录节点
客户端与zookeeper断开连接后,该节点被删除
1.2.4 EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点
客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号
1.3 Zookeeper节点状态
1.3.1 介绍
znode维护了一个stat结构,这个stat包含数据变化的版本号、访问控制列表变化、还有时间戳。版本号和时间戳一起,可让ZooKeeper验证缓存和协调更新。每次znode的数据发生了变化,版本号就增加。
例如:无论何时客户端检索数据,它也一起检索数据的版本号。并且当客户端执行更新或删除时,客户端必须提供他正在改变的znode的版本号。如果它提供的版本号和真实的数据版本号不一致,更新将会失败。
1.3.2 属性
czxid:引起这个znode创建的zxid,创建节点的事务的zxid(ZooKeeper Transaction Id)
ctime:znode被创建的毫秒数(从1970年开始)
mzxid:znode最后更新的zxid
mtime:znode最后修改的毫秒数(从1970年开始)
pZxid:znode最后更新的子节点zxid
cversion:znode子节点变化号,znode子节点修改次数
dataversion:znode数据变化号
aclVersion:znode访问控制列表的变化号
ephemeralOwner:如果是临时节点,这个是znode拥有者的session id。如果不是临时节点则是0。
dataLength:znode的数据长度
numChildren:znode子节点数量
1.4 四字命令
1.4.1 介绍
ZooKeeper支持某些特定的四字命令,他们大多是用来查询ZooKeeper服务的当前状态及相关信息的,使用时通过telnet或nc向ZooKeeper提交相应命令。
[root@right bin]# echo ruok | nc localhost 2181
imok[root@right bin]#
1.4.2 nc命令
nc命令需要安装对应的程序才可以使用。
yum install -y nc
1.4.3 常用四字命令
ruok:测试服务是否处于正确状态。如果确实如此,那么服务返回“imok ”,否则不做任何响应
stat:输出关于性能和连接的客户端的列表
conf:输出相关服务配置的详细信息
cons:列出所有连接到服务器的客户端的完全的连接 /会话的详细信息。包括“接受 / 发送”的包数量、会话id 、操作延迟、最后的操作执行等等信息
dump:列出未经处理的会话和临时节点
envi:输出关于服务环境的详细信息(区别于conf命令)
reqs:列出未经处理的请求
wchs:列出服务器watch的详细信息
wchc:通过session列出服务器watch的详细信息,它的输出是一个与watch相关的会话的列表
wchp:通过路径列出服务器 watch的详细信息。它输出一个与 session相关的路径
2 集群
1.1 数据通信机制
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G1SteCUS-1655983920308)(file:///C:\Users\MENGFA~1\AppData\Local\Temp\ksohtml10732\wps1.jpg)]
1.2 搭建步骤
第1步:创建集群所在目录
mkdir /usr/local/cluster-zk
第2步:重新解压tar包到集群目录
tar -zxvf /usr/local/zookeeper-3.4.9.tar.gz -C /usr/local/cluster-zk/
第3步:复制新的解压目录
cp -r /usr/local/cluster-zk/zookeeper-3.4.9/ /usr/local/cluster-zk/zkone
第4步:配置zkone
i:创建zoo.cfg配置文件
cp /usr/local/cluster-zk/zkone/conf/zoo_sample.cfg /usr/local/cluster-zk/zkone/conf/zoo.cfg
ii:创建数据目录
mkdir /usr/local/cluster-zk/zkone/data
iii:在数据目录中创建编号文件
vim /usr/local/cluster-zk/zkone/data/myid
iv:编辑编号文件,内容就是当前服务器实例的编号
1
v:配置zoo.cfg
dataDir=/usr/local/cluster-zk/zkone/data
clientPort=1000
server.1=127.0.0.1:1001:1002
server.2=127.0.0.1:2001:2002
server.3=127.0.0.1:3001:3002
⬆
格式解释:server.服务器实例编号=IP地址:数据通信端口号:选举端口号
第5步:配置zktwo
i:把zktwo复制出来
cp -r /usr/local/cluster-zk/zkone /usr/local/cluster-zk/zktwo
ii:修改myid文件中编号值
vim /usr/local/cluster-zk/zktwo/data/myid
将1改成2
iii:修改zoo.cfg
dataDir=/usr/local/cluster-zk/zktwo/data
clientPort=2000
第6步:配置zkthree
i:把zkthree复制出来
cp -r /usr/local/cluster-zk/zkone /usr/local/cluster-zk/zkthree
ii:修改myid文件中编号值
vim /usr/local/cluster-zk/zkthree/data/myid
将1改成3
iii:修改zoo.cfg
dataDir=/usr/local/cluster-zk/zkt****hree/data
clientPort=3000
1.1 集群中服务器数量
结论:一般来说,集群中服务器数量最好设置为单数。
原则:集群中有超过一半的服务器正常工程,则整个集群判断为正常工作。对外提供服务时大致满足预期。
推导:
共2实例:宕机1实例,剩下1=2/2,没有超过一半。死亡容忍度为0。
共3实例:宕机1实例,剩下2>3/2,超过一半。死亡容忍度为1。
共4实例:宕机1实例,剩下3>4/2,超过一半。死亡容忍度为1。
共5实例:宕机2实例,剩下3>5/2,超过一半。死亡容忍度为2。
共6实例:宕机2实例,剩下4>6/2,超过一半。死亡容忍度为2。
ZooKeeper 是什么
ZooKeeper 的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
Zookeeper 怎么保证主从节点的状态同步
Zookeeper 的核心是原子广播机制,这个机制保证了各个 server 之间的同步。实现这个机制的协议叫做 Zab 协议。Zab 协议有两种模式,它们分别是恢复模式和广播模式。
恢复模式
当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数 server 完成了和 leader 的状态同步以后,恢复模式就结束了。状态同步保证了 leader 和 server 具有相同的系统状态。
广播模式
一旦 leader 已经和多数的 follower 进行了状态同步后,它就可以开始广播消息了,即进入广播状态。这时候当一个 server 加入 ZooKeeper 服务中,它会在恢复模式下启动,发现 leader,并和 leader 进行状态同步。待到同步结束,它也参与消息广播。ZooKeeper 服务一直维持在 Broadcast 状态,直到 leader 崩溃了或者 leader 失去了大部分的 followers 支持。
Zookeeper 下 Server 工作状态
服务器具有四种状态,分别是 LOOKING、FOLLOWING、LEADING、OBSERVING。
(1)LOOKING:寻 找 Leader 状态。当服务器处于该状态时,它会认为当前集群中没有 Leader,因此需要进入 Leader 选举状态。
(2)FOLLOWING:跟随者状态。表明当前服务器角色是 Follower。
(3)LEADING:领导者状态。表明当前服务器角色是 Leader。
(4)OBSERVING:观察者状态。表明当前服务器角色是 Observer。
Zookeeper宕机了如何处理?
Zookeeper本身也是集群,推荐配置不少于3个服务器。Zookeeper自身也要保证当一个节点宕机时,其他节点会继续提供服务。如果是一个Follower宕机,还有2台服务器提供访问,因为Zookeeper上的数据是有多个副本的,数据并不会丢失;如果是一个Leader宕机,Zookeeper会选举出新的Leader。ZK集群的机制是只要超过半数的节点正常,集群就能正常提供服务,即过半可使用原则。只有在ZK节点挂得太多,只剩一半或不到一半节点能工作,集群才失效。所以3个节点的cluster可以挂掉1个节点(leader可以得到2票>1.5)。2个节点的cluster就不能挂掉任何1个节点了(leader可以得到1票<=1)。
集群支持动态添加机器嘛?
支持,主要包含2种方式,如下:全部重启:关闭所有Zookeeper服务,修改配置之后启动。不影响之前客户端的会话。逐个重启:在过半存活即可用的原则下,一台机器重启不影响整个集群对外提供服务。这是比较常用的方式。3.5版本开始支持动态扩容。
Zookeeper 对节点的 watch 监听通知是永久的吗?为什么
不是。官方声明:一个 Watch 事件是一个一次性的触发器,当被设置了 Watch的数据发生了改变的时候,则服务器将这个改变发送给设置了 Watch 的客户端,以便通知它们。
为什么不是永久的,举个例子,如果服务端变动频繁,而监听的客户端很多情况下,每次变动都要通知到所有的客户端,给网络和服务器造成很大压力。
一般是客户端执行 getData(“/节点 A”,true),如果节点 A 发生了变更或删除,客户端会得到它的 watch 事件,但是在之后节点 A 又发生了变更,而客户端又没有设置 watch 事件,就不再给客户端发送。
在实际应用中,很多情况下,我们的客户端不需要知道服务端的每一次变动,我只要最新的数据即可。
Zookeeper 的典型应用场景
Zookeeper 是一个典型的发布/订阅模式的分布式数据管理与协调框架,开发人员可以使用它来进行分布式数据的发布和订阅。
通过对 Zookeeper 中丰富的数据节点进行交叉使用,配合 Watcher 事件通知机制,可以非常方便的构建一系列分布式应用中年都会涉及的核心功能,如:
(1)数据发布/订阅
(2)负载均衡
(3)命名服务
(4)分布式协调/通知
(5)集群管理
(6)Master 选举
(7)分布式锁
(8)分布式队列
Zookeeper 和 Dubbo 的关系?
Zookeeper的作用:
zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知道,简单来说就是ip地址和服务名称的对应关系。当然也可以通过硬编码的方式把这种对应关系在调用方业务代码中实现,但是如果提供服务的机器挂掉调用者无法知晓,如果不更改代码会继续请求挂掉的机器提供服务。zookeeper通过心跳机制可以检测挂掉的机器并将挂掉机器的ip和服务对应关系从列表中删除。至于支持高并发,简单来说就是横向扩展,在不更改代码的情况通过添加机器来提高运算能力。通过添加新的机器向zookeeper注册服务,服务的提供者多了能服务的客户就多了。
dubbo:
是管理中间层的工具,在业务层到数据仓库间有非常多服务的接入和服务提供者需要调度,dubbo提供一个框架解决这个问题。
注意这里的dubbo只是一个框架,至于你架子上放什么是完全取决于你的,就像一个汽车骨架,你需要配你的轮子引擎。这个框架中要完成调度必须要有一个分布式的注册中心,储存所有服务的元数据,你可以用zk,也可以用别的,只是大家都用zk。
zookeeper和dubbo的关系:
Dubbo 的将注册中心进行抽象,它可以外接不同的存储媒介给注册中心提供服务,有 ZooKeeper,Memcached,Redis 等。
引入了 ZooKeeper 作为存储媒介,也就把 ZooKeeper 的特性引进来。首先是负载均衡,单注册中心的承载能力是有限的,在流量达到一定程度的时 候就需要分流,负载均衡就是为了分流而存在的,一个 ZooKeeper 群配合相应的 Web 应用就可以很容易达到负载均衡;资源同步,单单有负载均衡还不 够,节点之间的数据和资源需要同步,ZooKeeper 集群就天然具备有这样的功能;命名服务,将树状结构用于维护全局的服务地址列表,服务提供者在启动 的时候,向 ZooKeeper 上的指定节点 /dubbo/${serviceName}/providers 目录下写入自己的 URL 地址,这个操作就完成了服务的发布。 其他特性还有 Mast 选举,分布式锁等。
bo 的将注册中心进行抽象,它可以外接不同的存储媒介给注册中心提供服务,有 ZooKeeper,Memcached,Redis 等。
引入了 ZooKeeper 作为存储媒介,也就把 ZooKeeper 的特性引进来。首先是负载均衡,单注册中心的承载能力是有限的,在流量达到一定程度的时 候就需要分流,负载均衡就是为了分流而存在的,一个 ZooKeeper 群配合相应的 Web 应用就可以很容易达到负载均衡;资源同步,单单有负载均衡还不 够,节点之间的数据和资源需要同步,ZooKeeper 集群就天然具备有这样的功能;命名服务,将树状结构用于维护全局的服务地址列表,服务提供者在启动 的时候,向 ZooKeeper 上的指定节点 /dubbo/${serviceName}/providers 目录下写入自己的 URL 地址,这个操作就完成了服务的发布。 其他特性还有 Mast 选举,分布式锁等。
zookeeper安装及简单应用相关推荐
- 安装以及简单使用zookeeper
本文来说下如何在Windows环境下安装以及简单的使用zookeeper 文章目录 概述 安装包下载 安装过程 本文小结 概述 ZooKeeper是开源分布式协调服务组件,提供高可用.高性能.稳定的分 ...
- zookeeper安装和使用 windows环境(转)
原文地址: http://blog.csdn.net/tlk20071/article/details/52028945 简介 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是G ...
- [大数据] zookeeper 安装和配置
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功 ...
- Zookeeper 安装
Zookeeper 安装 由 xpproen 创建,youj 最后一次修改 2016-12-27 在安装ZooKeeper之前,请确保你的系统是在以下任一操作系统上运行: 任意Linux OS - 支 ...
- ZooKeeper安装和配置
ZooKeeper是一个开源的分布式协调服务,由雅虎创建,是Google Chubby的开源实现.ZooKeeper的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集 ...
- Zookeeper 安装和配置---学习二
zookeeper介绍 zookeeper是一个为分布式应用提供一致性服务的软件,它是开源的Hadoop项目中的一个子项目,并且根据google发表的<The Chubby lock servi ...
- zookeeper 安装和使用
1.Windows安装和使用zookeeper 之前整理过一篇文章<zookeeper 分布式锁服务>,本文介绍的 Zookeeper 是以 3.4.5 这个稳定版本为基础,最新的版本可以 ...
- zookeeper安装和使用 windows环境
简介 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubb ...
- ZooKeeper安装教程
ZooKeeper安装教程 1.1 下载安装 1.2 配置启动 前言: ZooKeeper 是 Apache 软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务.同步服务和命名注册. ...
最新文章
- 解压版mysql安装服务失败怎么办_mysql-8.0.17解压版安装步骤及MySQL服务无法启动问题的解决办法...
- php上传过滤,编写PHP脚本过滤用户上传的图片_PHP
- 远程服务器存储之JDK方式
- android的帧布局,七、Android帧布局FrameLayout和霓虹灯效果
- Java程序员需要注意的五大Docker误区
- HDU1875 畅通工程再续【Kruskal算法+并查集】
- 【codeforces 534B】Covered Path
- pytorch minist
- VI编辑器将//替换为#
- html5%3chr%3e的样式,Vbs脚本编程简明教程
- office 2016 word文档另存为pdf之后文本内容显示不全
- OpenStack部署(未完成)
- Scrcpy投屏软件教程(将手机内容投屏到电脑上)
- 大型网站技术架构-读后感
- android sqlite 分词,sqlite3自定义分词器
- Epic宣布免费开放虚幻4引擎
- 北京兄弟连web前端
- 别再手动比对文件啦,Python 让你轻松实现文件内容以及目录对比!!!
- 氪8号积木机器人编程_氪项目编程使用手册
- 0x00405cad指令引用的“0x00000000”内存。该内存不能为“read”