高可用HA和搭建Zookeeper

HDFS2.xHA技术

标签(空格分隔): Hadoop:高可用HA
Hadoop1.0中HDFS和MapReduce在高可用和扩展性上存在着一些问题
1.HDFS存在问题:
1)NameNode单点故障,难于应用于在线的场景
2)namenode压力过大,且内存受限,影响扩展
2.MapReduce存在的问题
1)JobTracker访问压力过大,影响扩展

高可用HA和搭建Zookeeper
4.什么是应用程序的高可用:
高可用性(high availability 简称HA):通常用来描述一个系统经过专门的设计,从而减少停工时间,而保持服务的高度可用性

5.高可用程序的类型
1)主从方式(冷备)
两个相同的应用程序,一个对外提供服务称为主程序,另外一个平时不运行(只要负责跟对外提供服务的主机进行数据备份)称为备程序,就是一个程序的备份
一旦主出现问题,备份提供恢复操作
2)双主互备(热备)
两个相同的应用程序,同时对外提供服务(这两个从互相作为对方备份而存在,双主热备)当启动一个出现问题时,另外一个可以对外提供服务,不会造成服务器宕机。
绿色部分:
单独来讲绿色部分就已经是HA (手动HA)
Namenode:用来存储元数据使用的
NameNode中的元数据是用来增删查改和DataNode汇报块信息的位置
Namenode和DataNode之间使用心跳进行联系

现在我们要做HA:
客户端只能访问Active的NameNode,所以数据应该存储在当前NameNode中,那么standby的NameNode是不是应该存储相同的数据br> 这样一来,active的NameNode,NN的单点故障,standby的NN,起到一样的作用,就必须同步当前的ActiveNN中的数据

问题:如何将运输的元数据传递给standbyNN/h2>

假设:我们拿到了NameNode的源码,我们进行修改,使用一种什么方式可以进行数据传输br> 因为hadoop的编写是Java所编写,数据传输应该使用流
因为是服务器,服务器和服务器之间的连接使用的是网线,网络流
网络流—>TCP/IP–>socket
我们就可以使用哪个Socket的方式进行数据传输
通过上述的分析,此时我们只需要创建Socket连接就可完成ActiveNN和StandbyNN之间的数据通信
如何解决数据通信问题,也就是数据一致性问题
针对状态,可以借助一个共享村塾系统来实现

提供三个解决方案:
1。NFS(NetWorkFile System)系统是Linux锁提供的,并且Linux系统中使用的这个服务进行数据存储,实现起来比较麻烦
2.QJM(Quorum Journal Manager)—>
3.zookeeper

总结:

1)hadoop1.x:
SecondaryNameNode他不是HA,它只是用来阶段合并edit和fsimage以及缩短集群启动时间所使用,默认是1小时进行一次整合,当NN失效色的时候,当NN实现的时候,SNN并无法立即提供服务,SNN是无法保证数据完整性
2)hadoop2.x
提供了QJM 的系统来解决当前NameNode的单点故障

1.QJM的基本原理是基于2N+1每次需要对数据进行操作,完成一个过半机制(>= N+1)会返回成功,数据不会丢失,当前这个算法容忍最多N台机器挂掉
2.HA框架中,SNN这个冷备已经不存在了,为了保持standbyNN实时的和ActiveNN的数据保持一致,他们会开启一个进程–实时监控 JN (JournalNode)
3.任何更改操作在ActiveNN上执行,JN进程同时记录并且会修改log
这个standby检测到JN中有数据同步,log发生 变化,就会同步当前数据
4.当发生故障的时候,ActiveNN挂了,StandbyNN会提升为新的ActiveNN,会读取JN里面修改的日志,这样就可以提供可靠性
5.QJM技术
5.1不需要配置额外的高共享存储,减少复杂度和维护成本
5.2系统健壮性得到了增强
5.3JN不会因为其中一台延迟,而影响整体,也不会因为JN的政所而影响性能

zookeeper:

zkfc是依赖于zookeeper而存在的
zookeeper是一个分布式开源应用协调程序,是Google的一个开源项目,是Hadoop集合Hbase的重要组件,它是一个为分布式应用所提供的一致性服务的软件,只要提供:配置的维护,域名服务,分布式同步等。

集群角色

在zookeeper中没有主从概念,而是引用了新的机制Leader(头),Follower(随从)和Observer(观察者)三种角色
zookeeper集群中所有的机器通过一个Leader来管理,Leader通过选举机制产生的,Leader服务器对客户端进行服务,除Leader外,其他机器,包括Follower和Observer,Follower和Observer都能够提供读取服务,区别在于Observer机器不残疾Leader的选举,zookeeper中也提供另外一个

高可用HA和搭建Zookeeper

注意:zookeeper的server必须是奇数

zookeeper中的每个server都是自私的
这几个server之间只有一个leader
ps:zk服务器的个数必须是奇数3,5,7,9这个服务器的配置需要太多

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

zookeeper的数据结构特点:

在 分布式中我们通常说“节点”是指组成集群中的每一台机器,然而在Zookeeper中节点分为两类
1.同样指的是集群中的机器—>机器节点
2.是指数据模型中的数据单元–>Znode

高可用HA和搭建Zookeeper

zookeeper的搭建:

1.必须停止集群为了以后方便,就让hadoop1-4之间互相免密
ps:这个集群配置hadoop1要和自身2-3免密hadoop2要和自身和134免密
2.将zookeeper3.4.7上传到hadoop2节点并解压到 /opt/software/下
命令:
tar -zxvf zookeeper-3.4.7.tar.gz -C /opt/software/
3.先配置zookeeper的环境变量vi /etc/profile

高可用HA和搭建Zookeeper
6.上面的配置完成后需要将zookeeper中的文件夹分发给hadoop3和hadoop4
ps:下面的分发已经在/opt/software/所以使用./当前路径
scp -r ./zookeeper-3.4.7/hadoop3:/opt/software/
scp -r ./zookeeper-3.4.7/hadoop4:/opt/software/
7.分发完成后需要给hadoop3,hadoop4添加myid
先创建mkdir -p /var/software/zk
向路径下 追加文件并添加文件值:myid的值
echo 值 > /var/software/zk/myid
ps:Hadoo3 —->2 4—>3
8.配置3和4中的 etc/profile
直接在hadoop2中进行分发即可
1)scp /etc/profile hadoop3:/etc/prrofile
2)scp /etc/profile hadoop4:/etc/prrofile
在3和4中重新加载profile文件
source /etc/profile
9.启动zookeeper集群
1)zkServer.sh start 是启动集群,执行顺序是2,3,4
2)zkServer.sh status 查看当前集群状态
3)zkServer.sh stop 停止集群

集群HA:

1.修改hadoop1中的hadoop配置文件 hdfs-site.xml
命令:vi /opt/software/hadoop-2.7.1/etc/hadoop/hdfs-site.xml

高可用HA和搭建Zookeeper
高可用HA和搭建Zookeeper
高可用HA和搭建Zookeeper

2.修改另外一个文件/opt/software/hadoop-2.7.1/etc/hadoop/core-site.xml
命令:
vi /opt/software/hadoop-2.7.1/etc/hadoop/core-site.xml

高可用HA和搭建Zookeeper

3.将修改完的配置分发给hadoop2,3,4各一份
scp /opt/software/hadoop-2.7.1/etc/hadoop/hdfs-site.xml
/opt/software/hadoop-2.7.1/etc/hadoop/core-site.xml hadoop2:/opt/software/hadoop-2.7.1/etc/hadoop/

scp /opt/software/hadoop-2.7.1/etc/hadoop/hdfs-site.xml
/opt/software/hadoop-2.7.1/etc/hadoop/core-site.xml hadoop3:/opt/software/hadoop-2.7.1/etc/hadoop/

scp /opt/software/hadoop-2.7.1/etc/hadoop/hdfs-site.xml /opt/software/hadoop-2.7.1/etc/hadoop/coresite.xml hadoop4:/opt/software/hadoop-2.7.1/etc/hadoop/

4.需要手工启动 journalnode
需要在1,2,3中执行:hadoopdaemon.sh start journalnode

5.需要在hadoop1中格式化NameNode
hdfs namenode -format
让hadoop1中的namenode要先跑起来hadoop-daemon.sh start namenode
jps可以查看一下确认跑起来
hadoop2中执行:
hdfs namenode -bootstrapStandby
需要在hadoop1中执行zkfc看格式化:
hdfs -zkfs -formatZK
就可以启动集群了

ps:如果集群关闭:启动顺序

1.先开启Zookeeper–>zkfc是依赖于zk 的
hadoop2,3,4先后执行zkServer.sh start
2.启动Hadoop集群
start-dfs.sh
3.通过jps 查看进程是否启动成功
hadoop-daemon.sh start namenode zkfc journalnode 单点启动

文章知识点与官方知识档案匹配,可进一步学习相关知识云原生入门技能树首页概览8720 人正在系统学习中

来源:哪有天生的学霸,一切都是厚积薄发

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年8月22日
下一篇 2018年8月22日

相关推荐