ZooKeeper 可视化:让分布式协调一目了然 (zookeeper的主要功能)
消息队列之zookeeper
分布式协调技术----zookeeper 分布式协调技术是用来解决分布式环境中多个进程间的同步控制,使他们能有序的访问某种临界资源,防止造成“脏数据”的后果,分布式并不是一个简单的调度算法就能轻易解决的,这是一种误解。 如果进程全部是在一台机器上确实这么久好办,但是出于分布式的环境下该怎么解决呢?给大家分析一下这个图,图中的三台机器,每个程序个跑一个应用程序,通过网络图将此连接起来,构成一个系统为用户提供服务,对用户来说这是个透明的架构的系统,我们可以把这个系统称之为分布式系统。 在分析一下这个分布式系统是如何对进程进行调度,假设在server1上挂载了一个资源,三个分布式的进程都要来竞争这个资源,但是又不希望他们同时访问,此时就需要一个“协调器”,让他们有序获取资源,“协调器”则被称为锁。 比如“进程-1”说明程序在使用该资源时会先获取锁,“进程1”获取锁就会对资源独占,使用完将锁释放,让其他进程来获得锁。 这个锁则是分布式锁,也是分布式协调技术。 分布式做的比较好的就是Google的Chubby和Apache的Zookeeper,Chubby是非开源的,后来雅虎模仿Chubby开发出了Zookeeper,也实现了类似的分布式功能,并把zookeeper作为开源程序捐给了Apache。 Zookeeper用来构建我们的系统,不仅Bug少而且节约成本。 Zookeeper的优点是一种高可用、高性能且一直的开源协调工具。 并且提供了“分布式锁服务”,功能强大,可以配置维护、组服务、分布式通知及分布式消息队列等。 在性能方面它采用了Zab协议,数据结构用的Znode,在数据结构上定义了原语,通知机制用的Watcher机制,有严格的序列访问控制,不会因为一个节点的错误而崩溃。 (1)给Zookeeper起了俩主节点,主节点-A master-,主节点-B master-,启动后都像zookeeper注册一个节点,主节点-A变成了主节点,主节点-B变成了备用节点,对俩Master进程进行调度。 (2)主节点-A挂了,它注册的节点被自动删除,感知节点发起选举,经过选举后主节点-B变成了主节点,替代了主节点-A。 (3)Master恢复,它会在向zookeeper注册一个节点master-,再次选举后主节点-B依旧是主节点,主节点A变成了备用节点。 安装配置步骤: 试验机器:192.168.10.10 hostname:zk1 192.168.10.11hostname:zk2 192.168.10.12 hostname:zk3 1.安装jdk [^_^] ~# tar xf -C /usr/local/ [^_^] ~# mkdir /usr/local/java [^_^] java# mv jdk1.8.0_171 /usr/local/java [^_^] ~# cat /etc/profile.d/ JAVA_HOME=/usr/local/java/jdk1.8.0_131 JRE_HOME=/usr/local/java/jdk1.8.0_131/jre CLASS_PATH=.:$JAVA_HOME/lib/:$JAVA_HOME/lib/:$JRE_HOME/lib PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH export JAVA_HOME JRE_HOME CLASS_PATH [^_^] ~# source /etc/profile.d/ 验证:java -version 2.安装zookeeper [^_^] ~# cat /etc/hosts 127.0.0.1localhost localhost4 4 ::1 localhost localhost6 6 192.168.36.10 zk1 192.168.36.11 zk2 192.168.36.12 zk3 [^_^] ~# cat /etc/profile.d/ #Set Zookeeper Environment export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.11 export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf [^_^] ~# source /etc/profile.d/ [^_^] ~#cp /usr/local/zookeeper/conf/zoo_/usr/local/zookeeper/conf/ [^_^] ~#mkdir -p /usr/local/zookeeper/data/log [^_^] ~#echo 1 >/usr/local/zookeeper/data/myid#三台zookeeper的myid是不一样的 [^_^] ~# egrep -v ^$|# /usr/local/zookeeper-3.4.11/conf/ tickTime=2000 initLimit=10 syncLimit=5 dataDir=/tmp/zookeeper dataLogDir=/tmp/zookeeper/log clientPort=2181 #服务端口 server.1=zk1:2888:3888 #2888是follower连leader的端口,3888是选leader端口 server.2=zk2:2888:3888 server.3=zk3:2888:3888 [^_^] ~# cd /usr/local/zookeeper-3.4.11/bin/ [^_^] bin# ./ start & [^_^] bin#jps #查看是否启动成功 1155 Jps 1093 QuorumPeerMain #QuorumPeerMain是zookeeper进程 [^_^] bin# ./ status#查节点状态 [^_^] bin# -server zk1:2181,zk2:2181,zk3.:2181#可以创建zk集群
开源的分布式协调服务—Zookeeper
名词概念
Zookeeper集群中有三种角色:Leader、Follower、Observer。Leader提供读和写服务。Follower和Observer能提供读服务。Observer和Follower的区别就在于Ovserver不参与Leader选举,不参与写操作的过半成功策略。
客户端会话,一个客户端连接是指客户端和服务端之间的一个TCP长连接。客户端启动的时候,首先会和服务器建立一个TCP长连接,从第一次建立连接开始,会话(session)的生命周期就开始了。通过这个连接,客户端能够通过心跳检测与服务器保持有效的会话,也能够向Zookeeper服务器发送请求,同时还能接受服务器的Watch事件通知。
Zookeeper数据模型中的一个单元,我们称之为数据节点。Zookeeper将所有数据存储在内存中,数据模型是一棵树,由斜杠进行分割的路径,就是一个Znode。如/app。每个Znode都能保存自己的数据内容,还会保存属性信息。4. 版本
每个Znode都有一个叫作Stat的数据结构,Stat里记录了Znode的三个数据版本,分别是version(当前Znode的版本)、cversion(当前Znode子节点的版本)、aversion(当前Znode的ACL版本)5. Watcher(事件监听器)
Watcher是Zookeeper中一个很重要的特性,Zookeeper允许用户在指定节点上注册一些Watcher,并且在一些特定事件触发的时候,Zookeeper服务端会将事件通知到感兴趣的客户端,该机制是Zookeeper实现分布式协调服务的重要特性。6. ACL
Zookeeper采用ACL策略来进行权限控制,它定义了五种权限:
注意:CREATE和DELETE这两种权限是针对子节点的权限控制
连接成功之后,系统会输出Zookeeper的相关环境及配置信息等信息
很少直接使用了,接口介绍省略
ZkClient是github上一个开源的zookeeper客户端,在原生API的基础上进行了包装,更加易用。同时还实现了如Session超时重连、Watcher反复注册等功能。
直接上代码:
Curator是Netflix公司开源的客户端框架。它实现了连接重连、Watcher反复注册、重试策略和NodeExistsException异常解决等等。
直接上代码:
ZooKeeper 的功能和原理初探
在公司核心系统的开发过程中用到了ZooKeeper,简称zk,用于搭建分布式核心环境,开发过程中也经常会遇到zk出现的问题,看了几篇博客了解和总结一下zk的基本原理。 ZooKeeper主要有几个重要的概念,简单总结下: ZooKeeper中主要有三种角色:Leader、Follower、Observer 一个 ZooKeeper 集群同一时刻只会有一个 Leader,其他都是 Follower 或 Observer。 ZooKeeper 集群的所有机器通过一个 Leader 选举过程来选定一台被称为『Leader』的机器,Leader服务器为客户端提供读和写服务。 Follower 和 Observer 都能提供读服务,不能提供写服务。 两者唯一的区别在于,Observer机器不参与 Leader 选举过程,也不参与写操作的『过半写成功』策略,因此 Observer 可以在不影响写性能的情况下提升集群的读性能。 每个子目录项如 NameService 都被称作为znode,和文件系统一样,我们能够自由的增加、删除znode,在一个znode下增加、删除子znode,唯一的不同在于znode是可以存储数据的。 Session 是指客户端会话。 在ZooKeeper 中,一个客户端连接是指客户端和 ZooKeeper 服务器之间的TCP长连接。 ZooKeeper 对外的服务端口默认是2181,客户端启动时,首先会与服务器建立一个TCP连接,从第一次连接建立开始,客户端会话的生命周期也开始了,通过这个连接,客户端能够通过心跳检测和服务器保持有效的会话,也能够向 ZooKeeper 服务器发送请求并接受响应,同时还能通过该连接接收来自服务器的 Watch 事件通知。 Session 的 SessionTimeout 值用来设置一个客户端会话的超时时间。 当由于服务器压力太大、网络故障或是客户端主动断开连接等各种原因导致客户端连接断开时,只要在SessionTimeout 规定的时间内能够重新连接上集群中任意一台服务器,那么之前创建的会话仍然有效。 zookeeper的结构其实就是一个树形结构,leader就相当于其中的根结点,其它节点就相当于follow节点,每个节点都保留自己的内容。 zookeeper的节点分两类: 持久节点 和 临时节点 持久节点:所谓持久节点是指一旦这个 树形结构上被创建了,除非主动进行对树节点的移除操作,否则这个 节点将一直保存在 ZooKeeper 上。 临时节点:临时节点的生命周期跟客户端会话绑定,一旦客户端会话失效,那么这个客户端创建的所有临时节点都会被移除。 有四种类型的znode: 1、PERSISTENT-持久化目录节点 客户端与zookeeper断开连接后,该节点依旧存在 2、PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点 客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号 3、EPHEMERAL-临时目录节点 客户端与zookeeper断开连接后,该节点被删除 4、EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点 客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号 每个 节点除了存储数据内容之外,还存储了 节点本身的一些状态信息。 用 get 命令可以同时获得某个 节点的内容和状态信息 在 ZooKeeper 中,version 属性是用来实现乐观锁机制中的『写入校验』的(保证分布式数据原子性操作)。 Zookeeper 的核心是原子广播,这个机制保证了各个Server之间的同步。 实现这个机制的协议叫做Zab协议。 Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。 当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和 leader的状态同步以后,恢复模式就结束了。 状态同步保证了leader和Server具有相同的系统状态。 在ZooKeeper中,能改变ZooKeeper服务器状态的操作称为事务操作。 一般包括数据节点创建与删除、数据内容更新和客户端会话创建与失效等操作。 对应每一个事务请求,为了保证事务的顺序一致性,ZooKeeper都会为其分配一个全局唯一的事务ID,用 ZXID 表示,通常是一个64位的数字。 每一个 ZXID对应一次更新操作,从这些 ZXID 中可以间接地识别出 ZooKeeper 处理这些事务操作请求的全局顺序。 ZooKeeper允许用户在指定节点上注册一些 Watcher,并且在一些特定事件触发的时候,ZooKeeper 服务端会将事件通知到感兴趣的客户端上去。 该机制是 ZooKeeper 实现分布式协调服务的重要特性。
若对本页面资源感兴趣,请点击下方或右方图片,注册登录后
搜索本页相关的【资源名】【软件名】【功能词】或有关的关键词,即可找到您想要的资源
如有其他疑问,请咨询右下角【在线客服】,谢谢支持!
相关文章
- 沉浸在音乐海洋中:酷狗音乐2021手机版,为你打造专属音乐空间! (沉浸在音乐海里的感受)
- 解锁无限音乐宝库:酷狗音乐2021版手机版火力全开! (无限制音乐)
- 手写输入的未来:技术如何改变我们的书写体验 (手写输入有问题)
- 手写输入与现代科技的交汇:创新工具赋能传统形式 (手写输入手写输入)
- 手写输入的教育价值:数字时代培养基本技能 (手写输入的教案怎么写)
- 数字化时代的手写输入:便利与怀旧的完美融合 (数字化时代的特点)
- 手写输入的魔力:触觉体验如何提升大脑功能 (手写输入的魔法是什么)
- 手写输入:失落的艺术还是数字时代的复兴? (手写输入失灵)
- 下载神器强势来袭,迅雷VIP账号每日分享,下载无忧 (最强下载神器)
- 网盘下载加速器,迅雷VIP账号每日更新,下载快人一步 (怎么给百度网盘下载加速)
发表评论
评论列表
- 这篇文章还没有收到评论,赶紧来抢沙发吧~