高可用性(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是一个分布式开源的应用协调程序,是谷歌的一个开源项目,是HBase好Hadoop的重要组件,呀是一个为分布式应用所提供一致性服务的软件,主要提供:配置的维护,域名服务,分布式同步…
在Zookeeper中,没有主从关系,二是引入了新的概念: Leader(头),Flower(随从),Observer(观察者)三种角色
Zookeeper集群中所有的机器同一个Leader进行管理, Leader通过"选举机制"产生, Leader服务器对客户端进行服务,除了Leader外,其他机器包括Flower和Observer, Flower和Observer都能提供读取服务,区别在Observer机制不参与Leader的选举,Zookeeper中也一样有"过半机制"
Session是指客户端会话,在Zookeeper中,一个客户端连接服务器之间会建立一个TCP长连接,Zookeeper对外的服务
器端口号2181,客户端启动是后,首先户先和服务器创建连接,从第一次连接开始的时候客户端会话的声明周期就开始
了,通过这个连接,客户端能够心跳检测和服务器保持有效的会话,也能够向Zookeeper服务器发送请求和接收相应,同
时还用过还该连接收来之服务器的watch事件通知,Session会使用SessionTimeOut的值来设置一个客户端会话超时
的时间,当由于服务器压力太大,或网络故障或是客户端注定断开连接等因素所导致的客户端断开,只要在
sessionTimeOut规定的时间内能够重新连接到集群上任意一台服务器,那么之前创建的会话仍然有效
在分布式中我们通常说”节点”是指组成集群中的每一个台机器,然而在Zookeeper中”节点”分为两类
共同点:树形文件系统,都可以存储数据
不同点:传统的文件系统专门用于存储大量数据,zk的存储少量数据
传统的文件系统目录和文件分明,zk即使文件也是文件目录
每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识
节点Znode可以包含数据和子节点(但是EPHEMERAL类型的节点不能有子节点)
客户端应用可以在节点上设置监视器
Znode有两种类型:
短暂(ephemeral)(断开连接自己删除)
持久(persistent)(断开连接不删除)
Znode有四种形式的目录节点(默认是persistent )
PERSISTENT 持久类型
PERSISTENT_SEQUENTIAL(持久序列类型/test0000000019 )sequential
EPHEMERAL 短暂类型
EPHEMERAL_SEQUENTIAL 短暂序列类型
创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护
在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序
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前面。
总结:
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是用过选举机制得到的