HA高可用

什么事应用程序的高可用

高可用性(high availability)通常用来描述一个系统经过专门的设计,从而减少停工的时间,而保持其服务的高度可用性


高可用程序的类型

主从方式(冷备)
两个相同的应用程序,一个对外提供服务,成为主程序,另一个平时不运行为备程序,就是一个主程序的备份,一旦主程序出现问题,备份提供恢复操作
双主互备(热备)
两个相同的应用程序,同时对外提供服务(两个程序相互为对方备份的存在,双主热备),当启动一个出现问题时,另一个可以对外提供服务,不会造成服务器宕机

总结:

hadoop1.x版本:
SecondaryNameNode他不是HA,他只是用来阶段性合并edits和fsimage以及缩短集群启动是啊金所使用,默认是1小时进行一次整合,当NN失效的时候,SNN并无法立即提供服务,SNN是无法保证数据完整性
hadoop2.x
提供了QJM系统来解决当前NameNode的单点故障问题
1.QJM的基本原理是基于2N+1每次需要对数据进行操作需要完成一个过半机制会返回成功,数据不会丢失
2.在HA框架中SNN这个冷备已经不存在了,为了保持standbyNN实时的和ActiveNN的数据保持一致,他们会开启一个进程
实时监控JN(JournalNode)
3,任何更改操作在ActiveNN上执行,JN进程同时记录并会修改log
这是StandbyNN检测JN终有数据同步log发生变化,就会同步当前数据
4,当发生故障的时候,ActiveNN挂了,StandbyNN会提升成为新的ActiveNN
读取会签JN里面修改的日志,这样就提供了可靠性
5.OJM技术
5.1不需要配置额外的高共享存储,减少复杂度和成本
5,2系统健壮性得到了增强
5.3JN不会疑问启动一台延迟而影响整体,亦不会因为JN增多而影响性能

Zookeeper

Zookeeper是一个分布式开源的应用协调程序,是谷歌的一个开源项目,是HBase好Hadoop的重要组件,呀是一个为分布式应用所提供一致性服务的软件,主要提供:配置的维护,域名服务,分布式同步…

集群角色

在Zookeeper中,没有主从关系,二是引入了新的概念: Leader(头),Flower(随从),Observer(观察者)三种角色
Zookeeper集群中所有的机器同一个Leader进行管理, Leader通过"选举机制"产生, Leader服务器对客户端进行服务,除了Leader外,其他机器包括Flower和Observer, Flower和Observer都能提供读取服务,区别在Observer机制不参与Leader的选举,Zookeeper中也一样有"过半机制"

在这里插入图片描述
在这里插入图片描述
ps:服务器的个数必须是技术(3,5,7,9…)

会话(session)

Session是指客户端会话,在Zookeeper中,一个客户端连接服务器之间会建立一个TCP长连接,Zookeeper对外的服务
器端口号2181,客户端启动是后,首先户先和服务器创建连接,从第一次连接开始的时候客户端会话的声明周期就开始
了,通过这个连接,客户端能够心跳检测和服务器保持有效的会话,也能够向Zookeeper服务器发送请求和接收相应,同
时还用过还该连接收来之服务器的watch事件通知,Session会使用SessionTimeOut的值来设置一个客户端会话超时
的时间,当由于服务器压力太大,或网络故障或是客户端注定断开连接等因素所导致的客户端断开,只要在
sessionTimeOut规定的时间内能够重新连接到集群上任意一台服务器,那么之前创建的会话仍然有效

Zookeeper的数据结构特点

在分布式中我们通常说”节点”是指组成集群中的每一个台机器,然而在Zookeeper中”节点”分为两类

  1. 同样指的是集群中的机器–>机器节点
  2. 是指数据模型中的数据单元 —.>Znode在这里插入图片描述
    每个 子目录项如 app1 都被称作为 znode,这个 znode 是被它所在的路径唯一标识,如 p1这个 znode 的标识为
    /app1/p1
    znode 可以有子节点目录,并且每个 znode 可以存储数据,注意 EPHEMERAL(ephemeral/ə’fɛmərəl/)类型的目录
    节点不能有子节点目录
    znode 是有版本的,每个 znode 中存储的数据可以有多个版本,也就是一个访问路径中可以存储多份数据
    znode 可以是临时节点,一旦创建这个 znode 的客户端与服务器失去联系,这个 znode 也将自动删除,
    Zookeeper 的客户端和服务器通信采用长连接方式,每个客户端和服务器通过心跳来保持连接,这个连接状态称为
    session,如果 znode 是临时节点,这个 session 失效,znode 也就删除了
    znode 的目录名可以自动编号,如 app1 已经存在,再创建的话,将会自动命名为 app2
    znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的
    客户端,这个是 Zookeeper 的核心特性,Zookeeper 的很多功能都是基于这个特性实现的,后面在典型的应用场
    景中会有实例介绍

和传统文件系统区别

共同点:树形文件系统,都可以存储数据
不同点:传统的文件系统专门用于存储大量数据,zk的存储少量数据
传统的文件系统目录和文件分明,zk即使文件也是文件目录
每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识
节点Znode可以包含数据和子节点(但是EPHEMERAL类型的节点不能有子节点)
客户端应用可以在节点上设置监视器

节点类型

Znode有两种类型:
短暂(ephemeral)(断开连接自己删除)
持久(persistent)(断开连接不删除)
Znode有四种形式的目录节点(默认是persistent )
PERSISTENT 持久类型
PERSISTENT_SEQUENTIAL(持久序列类型/test0000000019 )sequential
EPHEMERAL 短暂类型
EPHEMERAL_SEQUENTIAL 短暂序列类型
创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护
在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序

Zookeeper设计目的

1.最终一致性:client不论连接到哪个Server,展示给它都是同一个视图,这是zookeeper最重要的性能。第一个
clinet上传了数据 其他client在访问得到的是同一个数据 2.可靠性:具有简单、健壮、良好的性能,如果消息被到
一台服务器接受,那么它将被所有的服务器接受。 3.实时性:Zookeeper保证客户端将在一个时间间隔范围内获得
服务器的更新信息,或者服务器失效的信息。但由于网络延时等原因,Zookeeper不能保证两个客户端能同时得到
刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。 4.等待无关(wait-free):慢的或者失效
的client不得干预快速的client的请求,使得每个client都能有效的等待。 5.原子性:更新只能成功或者失败,没有
中间状态。
6.顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有Server上
消息a都将在消息b前被发布;偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。

HA:Zookeeper部分

总结:
1.Hadoop中提供了ZKFailoverController交涉,部署在每个namenode所在的基点上,做一个进程进行监控简称ZKFC
ZKFailoverController主要包含三个组件
1.HealthMonitor:监控当前namenode时候出健康(活着)或不健康(死亡)状态,通过当前RPC来调用NN相应的方法来
完成
2.ActiveStandbyElector:管理和监控自己的zk中的状态
3.ZKFailoverController监听HealthMonitor和ActiveStandbyElector的时间来管理NN的状态
ZKFailoverController的主要职责:
1.健康测试:周期性的向它监控的NN发送健康探测命令,从而来确定某个NN是否处于健康的状态,若机器宕机,心跳失
败,那么zkfc就会标记当前出一个不健康的状态集群/节点配置 NN NN DN ZK ZKFC JN
hadoop01 有 有 有
hadoop02 有 有 有 有 有
hadoop03 有 有 有
hadoop04 有 有
2.会话管理:如果NN是健康的,zkfc会和zk保持一个打开的会话状态,如果NN同时还是Active状态,那么zkfc还会在zk中
创建一个类型为短暂类型的znode,当这个NN挂掉,这个znode就会被删除,然后备用的NN将得到这个锁,升级为主
NN,同时被标记为Acitve
3.当宕机的NN重新启动的时候,他会再次注册zk,发现已经有znode锁了,它会自动变为standby状态
循环往复,就可以保证高可用的可靠性
4.zk中的leader是用过选举机制得到的

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值