12zookeeper——好程序

zookeeper的基础与架构、集群搭建

zookeeper是什么??
zookeeper是一个分布式协调服务,就是为用户的分布式应用提供协调服务
zookeeper是为其他的分布式程序服务的
zookeeper本身也是一个分布式程序(只要有半数以上节点存活,zk就能正常对外提供服务)一般奇数台

zk集群的角色主要有2种:leader和follower

选举机制

zookeeper集群的特性
zookeeper集群:一个leader,多个follower(zookeeper的老大是选举的,hdfs的老大是指定的)
全局一致性:每个server保存一份相同的数据副本。client连接那个server,数据都是一致的
分布式读写:更新、请求、转发,由leader实施(请求到follow的写操作都是转发给leader进行操作。读则没有关系)
更新请求顺序执行,来自同一个client的更新请求按照其发送顺序依次执行
数据更新原子性:一次数据更新操作要么成功,要么失败
实时性:在一定时间范围内,client能读取到最新的数据


选举机制:
全新集群:(id大的为leader)
1、启动第1台,选我,处于观望
2、第2台启动,选我。各1票,重新选,2得2票,2为leader


运行中的集群:
选举标准:数据版本、逻辑时钟、id大的
1、逻辑时钟小的选举结果被忽略,重新选举
2、统一逻辑时钟后,id大的为leader
3、数据Id相同的情况下,id大的胜出

 

 

 

网站服务

1、如果前端有请求过来,后端服务器那么多,前端到底应该调用那台服务器呢?

2、那么整一个服务列表不就可以了嘛,来一个分配一个,当随着服务群体不断增多,则需要增加很多服务器,那么增加的服务器,前端不一定知道呀,因为前端与后端分属于不同管理,同时如何将服务器放入待调度的队列中呢?

3、还有如果运行过程中某台宕机了呢,前端在一直分配,则一直就没有响应,访问就一直积压中,分了也白分

因为以上三点,就需要一个实时监控协调的功能,
a、挂了就自动判断是否挂了就不分配任务,
b、若节点上来了就加进到待分配列表中自动分配。
c、请求者需要动态感知服务层服务器的负载,上下线等动态信息。

所以需要增加一个中间人:中间人要有一个服务列表,里面有节点的信息,负载均衡,IP地址,端口号等
每一台登录的时候,注册一个节点,新上一台,则新标记一个节点。
但是如果挂了一台呢,则通过心跳感应,要求每三秒钟一次心跳,设置一个超时时间,
大概五次心跳时间,则判断为机器已经下线,这种不正常情况是通过心跳感应处理,中间人就可以将下线的节点删除掉。
如果用户模块是人为主动停的,是正常下线,是直接把注册的节点删除就可以进行维护或者什么了。

tomcat不用访问管理模块了,直接访问中间人,找负载最小的,中间人分配了负载的节点就加1

用户管理模块 与 tomcat 都是属于中间人的用户。

 

分布式爬虫系统

增加一个节点或减少一个节点,zookeeper都会知道,
因为新增一个节点,则就要向zookeeper进行注册,那么zookeeper的服务列表中就增多了一个服务节点,请求段的监控就会被触发,请求端就会从新向zookeeper发送请求,这时可以给新增的服务节点分配任务,

如果运行过程中,某台宕机了,则zookeeper自动删除节点,同时,请求端的监控就会触发请求端就向zookeeper再次发送请求,再次读zookeeper的服务列表时候,发现少了那台,就将任务收回,重新发给别的节点。
 

分布式共享锁


每一个证券中心都有一个交易接口,都是通过交易接口进行交易,

每一个节点,每一个交易客户端,直接把任务发送到zookeeper上,都放入调度队列中,队列里面注册锁,和客户端没有任何关系,就可以了,每一个节点都注册一下,则都具有监听事件,哪个删除了,哪个增加了,都知道。然后可以重新获取一下锁列表,获取到锁后读取最新资源,交易完成后,数字改变,则删除这把锁,生成新锁,从新读一下,在获取最小的资源,这样锁就可以源源不断的进行抢占资源,分配资源。

 

zookeeper的安装配置

1、解压到指定目录

2、编辑文件,添加环境变量

3、修改配置文件zoo.cfg

在zoo.cfg里面设置临时目录

在zoo.cfg里面设置端口号

在zoo.cfg里面设置设置通信端口2888,选举端口3888


写数据由leader完成,在这边写了数据

其他机器没有写,机器与机器之间要进行同步操作,RPC通信,通信则要通信端口2888。通过2888端口进行共享数据,也就是数据的同步

同时启动的时候要进行选举,选择数据是有专门的选举通道3888

补充:zookeeper集群至少有两台机器才能保证zookeeper正常启动

zookeeper中有三种角色:leader、follower、observer(其中observer可以接受client的请求并转发给leader 但是它不能参与投票 适当增加observer的数量可以提高伸缩性又不影响吞吐率)

配置observer的步骤:修改zookeeper配置文件zoo.cfg(master slave1 slave2都要修改)其实就是上面的2888,3888

4、通过mkdir命令去生成下面的路径

5、设置myid

6、拷贝分发

7、启动

同时,zookeeper的日记,是在哪个目录下执行zkserver命令,就在哪个目录下生成日记文件。

 

 

zookeeperr的客户端操作、监听事件

 

zookeeper -help  查看帮助

 

 

有wash的都可以进行监听功能。

ls是监听子目录是否发生改变

在目录下执行create后,ls检测到目录发生变化

但是只能监听一次,第二次要监听,要继续执行ls命令

 

get监听数据的值是否发生改变

修改它的值

但是也是只能监听一次

 

 

序列化:
每一个目录下序号都重新开始,从0开始
即使创建的节点不是序列化的节点,但是序号始终是被占用的

再继续创建相同前缀时候,前面相同的序列号是被占用的

如果之前每一台,则序号都重新开始,从0开始

下面又是一个序列号被占用的现象

序号是一直分配下去的。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值