Zookeeper运行原理及配置过程

一、什么是Zookeeper
官网的解释是:
ZooKeeper是一种集中式服务,用于维护配置信息,命名,提供分布式同步和提供组服务。所有这些类型的服务都以分布式应用程序的某种形式使用。每次实施它们都需要做很多工作来修复不可避免的错误和竞争条件。由于难以实现这些类型的服务,应用程序最初通常会吝啬它们,这使得它们在变化的情况下变得脆弱并且难以管理。即使正确完成,这些服务的不同实现也会在部署应用程序时导致管理复杂性。
我的理解:Zookeeper就是在我们运行文件传输的过程中需要它来协调资源,它是分布式的应用程序协调服务,是一个服务。
二、Zookeeper配置
1.先将安装包传到虚拟机中,使用tar -zxvf 安装包名 去压缩安装包
2.在虚拟机的根目录下 vi /etc/profile也就是我们经常配置环境变量的地方家入Zookeeper的配置地址让Zookeeper的启动等命令可以在虚拟机的任何地方都生效
Zookeeper运行原理及配置过程
这里注意一定要配置在原来的java_home下
3.在解压好的Zookeeper的conf目录下可以看到一个zoo_sample.cfg文件
把它拷贝成zoo.cfg cp zoo_sampke.cfg zoo.cfg
配置zoo.cfg
vi zoo.cfg
Zookeeper运行原理及配置过程
将这dataDir=改成自定义的文件地址,这个地址存放着产生的数据
server就是zookeeper运行的所有虚拟机配置后面的数字2888就是提供的zookeeper对外通信,而3888就是当leader挂掉只够,重新选择leader的时候提供对外通信。
4.改完这个配置之后,要在我们刚才定义的dataDir的文件中输入 echo 1 > myid
这里一定要有这个文件,其他依次往下创建。
5.这时就可以在任何地方运行zookeeper

二、zookeeper启动客户端
在安装后可以使用zkServer.sh start来启动zookeeper,在虚拟机中写./zkCli.sh -server ip:port 就是启动客户端
在启动后可以进行节点的操作:
ls /:列出“/”下面的其它的节点
create -e /name1 xiaozhang 创建临时节点,用quit命令退出或结束,会话节点消失
create -s /name2 xiaowang 创建顺序节点
creae -e -s /name3 xiaoli 创建临时数据节点
get /name 通过名字获取节点
rmr /name 删除指定名字的节点
set /name3 xiaoxiao 设置节点内容

三、zookeeper的运行原理
首先我们要知道整个zookeeper中有三个角色
1.leader(整个集群中的领导者)
2.follower(集群中的跟随者)
3.observer(监视领导者的监视者)
对应的状态也有三种
1-a.leading
2-b.following
3-c.observering
d.还有一种状态就是当leader挂掉了或者集群刚启动时looking观望状态
在集群运行的过程中还有三种机制
1.原子广播
通过投票确定某一件事能不能做(过半原则—zookeeper最好是奇数,<=255)
1.1提交请求到follower,follower会将请求发送给leader
1.2leader将请求下发给所有的follower,follower来判断,并将结果返回给leader
1.3leader将请求写入的文件分发到所有的follower------(最终一致性–及时在写入的过程中有节点连接不上,当恢复的时候还会把节点上写入数据)
也就是类似于我们公司中董事长(leader)与股东(follow)的角色关系,当有一项任务要执行时,无论是提交给follow或者leader都会进行一次原子广播,leader会将任务请求分发给follow,让他们进行投票,投票后将请求再返回给leader,leader会进行判断这次任务是否执行,如果执行,就将相应的资源分发给follow,并且遵循最终一致性。
2.zab协议
这个协议是原子广播的基础,它分两种模式
2.1广播模式
选举leader开始对外提供服务,也就是开始进行原子广播
2.2恢复模式
选举leader,这时还有没leader(有可能是集群刚启动,也可能是leader死了新的还没起来)
这时也就是我们上面说的四大状态
looking—观望
following—跟从但是有想法
leading—继承人(准备被继承)
observing—observer(监听者)
3.选举机制
这里的选举机制也就是在follow指派observer去查看leader的状态,如果leader挂掉了,follow会进入一段时间的观望状态,然后在确定leader挂掉之后,进行选举,并且在他们在选举时每一个节点都会产生一个id,也就是我们在配置zookeeper时的myid,然后每一个follow自身还有一个zxid这个zxid就类似于公司中各股东手中的股份, 这时会先以id最大的为主,如果大家id都相同那么再根据zxid选举,在这里还有一个逻辑时钟原理,每个周期都会+1,根据这个逻辑时钟我们就会判断出现在集群是一个什么选举状态,如果是0,那么就意味着集群在进行之前的工作,也就是follow挂掉了,整个集群进入了恢复状态,如果是1,那就意味着集群在进行现在的状态,如果是2,那么就是说整个集群进入了新的一个周期的工作,也就是说之前的leader已经挂掉了,选举出了新的leader.

四、Zookeeper节点的应用
首先我们要知道zookeeper它有自己的文件系统,也就是znode节点,这种节点有四种:持久节点、临时节点、持久顺序节点、临时顺序节点(-e 临时、-s顺序 默认是持久)
我们需要在启动zookeeper之后再启动它的客户端 zkCli.sh -server ip:port(2181默认端口号)
我们可以在这里使用help查看相应的命令。
这里我在之后会写一篇文章来介绍zookeeper的节点应用