zookeeper

1 Zookeeper 的概述
Zookeeper 是一个开源的分布式协调服务框架,主要用来解决分布式集群中应用系统的一致性问题和数据管理问题
2:Zookeeper的特点
Zookeeper 本质上是一个分布式文件系统, 适合存放小文件,也可以理解为一个数据库在上图左侧, Zookeeper 中存储的其实是一个又一个 Znode, Znode 是 Zookeeper 中的节点node 是有路径的, 例如/data/host1, /data/host2, 这个路径也可以理解为是Znode 的 NameZnode 也可以携带数据, 例如说某个 Znode 的路径是/data/host1, 其值是一个字符串"192.168.0.1"正因为 Znode 的特性, 所以 Zookeeper 可以对外提供出一个类似于文件系统的试图, 可以通过操作文件系统的方式操作 Zookeeper使用路径获取 Znode获取 Znode 携带的数据修改 Znode 携带的数据删除 Znode添加 Znode
3.Zookeeper的应用场景
3.1 数据发布/订阅数据发布/订阅系统,需要发布者将数据发布到Zookeeper的节点上,供订阅者进行数据订阅,进而达到动态获取数据的目的,实现配置信息的集中式管理和数据的动态更新。发布/订阅一般有两种设计模式:推模式和拉模式,服务端主动将数据更新发送给所有订阅的客户端称为推模式;客户端主动请求获取最新数据称为拉模式.Zookeeper采用了推拉相结合的模式,客户端向服务端注册自己需要关注的节点,一旦该节点数据发生变更,那么服务端就会向相应的客户端推送Watcher事件通知,客户端接收到此通知后,主动到服务端获取最新的数据。
3.2 命名服务命名服务是分步实现系统中较为常见的一类场景,分布式系统中,被命名的实体通常可以是集群中的机器、提供的服务地址或远程对象等,通过命名服务,客户端可以根据指定名字来获取资源的实体,在分布式环境中,上层应用仅仅需要一个全局唯一的名字。Zookeeper可以实现一套分布式全局唯一ID的分配机制。
通过调用Zookeeper节点创建的API接口就可以创建一个顺序节点,并且在API返回值中会返回这个节点的完整名字,利用此特性,可以生成全局ID,其步骤如下1. 客户端根据任务类型,在指定类型的任务下通过调用接口创建一个顺序节点,如"job-"。2. 创建完成后,会返回一个完整的节点名,如"job-00000001"。3. 客户端拼接type类型和返回值后,就可以作为全局唯一ID了,如"type2-job-00000001"。
3.3 分布式协调/通知Zookeeper中特有的Watcher注册于异步通知机制,能够很好地实现分布式环境下不同机器,甚至不同系统之间的协调与通知,从而实现对数据变更的实时处理。通常的做法是不同的客户端都对Zookeeper上的同一个数据节点进行Watcher注册,监听数据节点的变化(包括节点本身和子节点),若数据节点发生变化,那么所有订阅的客户端都能够接收到相应的Watcher通知,并作出相应处理。在绝大多数分布式系统中,系统机器间的通信无外乎心跳检测、工作进度汇报和系统调度。①心跳检测,不同机器间需要检测到彼此是否在正常运行,可以使用Zookeeper实现机器间的心跳检测,基于其临时节点特性(临时节点的生存周期是客户端会话,客户端若当即后,其临时节点自然不再存在),可以让不同机器都在Zookeeper的一个指定节点下创建临时子节点,不同的机器之间可以根据这个临时子节点来判断对应的客户端机器是否存活。通过Zookeeper可以大大减少系统耦合。

4.Zookeeper架构
Zookeeper集群是一个基于主从架构的高可用集群每个服务器承担如下三种角色中的一种Leader一个Zookeeper集群同一时间只会有一个实际工作的Leader,它会发起并维护与各Follwer及Observer间的心跳。所有的写操作必须要通过Leader完成再由Leader将写操作广播给其它服务器。Follower一个Zookeeper集群可能同时存在多个Follower,它会响应Leader的心跳。Follower可直接处理并返回客户端的读请求,同时会将写请求转发给Leader处理,并且负责在Leader处理写请求时对请求进行投票。Observer角色与Follower类似,但是无投票权。

在这里插入图片描述.5:Zookeeper的选举机制Leader选举是保证分布式数据一致性的关键所在。当Zookeeper集群中的一台服务器出现以下两种情况之一时,需要进入Leader选举。
5.1. 服务器启动时期的Leader选举若进行Leader选举,则至少需要两台机器,这里选取3台机器组成的服务器集群为例。在集群初始化阶段,当有一台服务器Server1启动时,其单独无法进行和完成Leader选举,当第二台服务器Server2启动时,此时两台机器可以相互通信,每台机器都试图找到Leader,于是进入Leader选举过程。选举过程如下(1)每个Server发出一个投票。由于是初始情况,Server1和Server2都会将自己作为Leader服务器来进行投票,每次投票会包含所推举的服务器的myid和ZXID,使用(myid, ZXID)来表示,此时Server1的投票为(1, 0),Server2的投票为(2, 0),然后各自将这个投票发给集群中其他机器。
服务器IP主机名myid的值192.168.174.100node011192.168.174.110node022192.168.174.120node033(2)接受来自各个服务器的投票。集群的每个服务器收到投票后,首先判断该投票的有效性,如检查是否是本轮投票、是否来自LOOKING状态的服务器。(3)处理投票。针对每一个投票,服务器都需要将别人的投票和自己的投票进行PK,PK规则如下· 优先检查ZXID。ZXID比较大的服务器优先作为Leader。· 如果ZXID相同,那么就比较myid。myid较大的服务器作为Leader服务器。对于Server1而言,它的投票是(1, 0),接收Server2的投票为(2, 0),首先会比较两者的ZXID,均为0,再比较myid,此时Server2的myid最大,于是更新自己的投票为(2, 0),然后重新投票,对于Server2而言,其无须更新自己的投票,只是再次向集群中所有机器发出上一次投票信息即可。(4) 统计投票。每次投票后,服务器都会统计投票信息,判断是否已经有过半机器接受到相同的投票信息,对于Server1、Server2而言,都统计出集群中已经有两台机器接受了(2, 0)的投票信息,此时便认为已经选出了Leader。(5) 改变服务器状态。一旦确定了Leader,每个服务器就会更新自己的状态,如果是Follower,那么就变更为FOLLOWING,如果是Leader,就变更为LEADING。
5.2.服务器运行时期的Leader选举在Zookeeper运行期间,Leader与非Leader服务器各司其职,即便当有非Leader服务器宕机或新加入,此时也不会影响Leader,但是一旦Leader服务器挂了,那么整个集群将暂停对外服务,进入新一轮Leader选举,其过程和启动时期的Leader选举过程基本一致过程相同。
6: Zookeeper安装集群规划第一步
服务器IP主机名myid的值192.168.174.100node011192.168.174.110node022192.168.174.120node033(2)接受来自各个服务器的投票。集群的每个服务器收到投票后,首先判断该投票的有效性,如检查是否是本轮投票、是否来自LOOKING状态的服务器。(3)处理投票。针对每一个投票,服务器都需要将别人的投票和自己的投票进行PK,PK规则如下· 优先检查ZXID。ZXID比较大的服务器优先作为Leader。· 如果ZXID相同,那么就比较myid。myid较大的服务器作为Leader服务器。对于Server1而言,它的投票是(1, 0),接收Server2的投票为(2, 0),首先会比较两者的ZXID,均为0,再比较myid,此时Server2的myid最大,于是更新自己的投票为(2, 0),然后重新投票,对于Server2而言,其无须更新自己的投票,只是再次向集群中所有机器发出上一次投票信息即可。
(4) 统计投票。每次投票后,服务器都会统计投票信息,判断是否已经有过半机器接受到相同的投票信息,对于Server1、Server2而言,都统计出集群中已经有两台机器接受了(2, 0)的投票信息,此时便认为已经选出了Leader。(5) 改变服务器状态。一旦确定了Leader,每个服务器就会更新自己的状态,如果是Follower,那么就变更为FOLLOWING,如果是Leader,就变更为LEADING。5.2.服务器运行时期的Leader选举在Zookeeper运行期间,Leader与非Leader服务器各司其职,即便当有非Leader服务器宕机或新加入,此时也不会影响Leader,但是一旦Leader服务器挂了,那么整个集群将暂停对外服务,进入新一轮Leader选举,其过程和启动时期的Leader选举过程基本一致过程相同。6: Zookeeper安装集群规划第一步:
http://archive.apache.org/dist/zookeeper/我们在这个网址下载我们使用的zk版本为3.4.9下载完成之后,上传到我们的linux的/export/sowares路径下准备进行安装第二步:解压解压zookeeper的压缩包到/export/servers路径下去,然后准备进行安装第三步:修改配置文件第一台机器修改配置文件vim zoo.cfg第四步:添加myid配置在第一台机器的/export/servers/zookeeper-3.4.9/zkdatas /这个路径下创建一个文件,文件名为myid ,文件内容为1cd /export/softwaretar -zxvf zookeeper-3.4.9.tar.gz -C …/servers/ cd /export/servers/zookeeper-3.4.9/conf/cp zoo_sample.cfg zoo.cfgmkdir -p /export/servers/zookeeper-3.4.9/zkdatas/dataDir=/export/servers/zookeeper-3.4.9/zkdatas# 保留多少个快照autopurge.snapRetainCount=3# 日志多少小时清理一次autopurge.purgeInterval=1# 集群中服务器地址server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=node03:2888:388812312345123456789
echo 1 > /export/servers/zookeeper-3.4.9/zkdatas/myid第五步:安装包分发并修改myid的值安装包分发到其他机器第一台机器上面执行以下两个命令scp -r /export/servers/zookeeper-3.4.9/ node02:/export/servers/scp -r /export/servers/zookeeper-3.4.9/ node03:/export/servers/第二台机器上修改myid的值为2echo 2 > /export/servers/zookeeper-3.4.9/zkdatas/myid第三台机器上修改myid的值为3echo 3 > /export/servers/zookeeper-3.4.9/zkdatas/myid第六步:三台机器启动zookeeper服务三台机器启动zookeeper服务这个命令三台机器都要执行/export/servers/zookeeper-3.4.9/bin/zkServer.sh start查看启动状态/export/servers/zookeeper-3.4.9/bin/zkServer.sh status3 Zookeeper的Shell 客户端操作
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值