高可用(Hign Availability,HA)

一、概念

  作用:用于解决负载均衡和故障转移(Failover)问题。

  问题描述:一个NameNode挂掉,如何启动另一个NameNode。怎样让两个NameNode数据同步。

  实现原理:

    在另一台服务器上有一个相同的NameNode节点,这台服务器上的 NameNode的状态为standBy。正在运行的NameNode的状态为Active。   

    解决两个NameNode信息同步问题:因为如果一个NameNode挂掉,另一个NameNode的editlog和fsimage不一定能实时同步,会造成路径信息丢失,也就造成了文件丢失。那现在的同步方式为:NameNode(Active)会实时的把editlog和fsimage保存到JournalNode节点中,也就是对应的服务器磁盘中,NameNode(standBy),从JournalNode节点中取出editlog和fsimage,进行同步。

    解决一台服务器NameNode挂机,另一台服务器NameNode启动问题:这两个NameNode需要把自己的状态,都同步到zookeeper上,由zookeeper调配,解决脑裂问题。NameNode和Zookeeper的通信,是通过ZKFC服务进行的。其中healthMonitor是用于实时监控NameNode状态的线程,stateController是用于接受zookeeper命令,改变 NameNode状态的线程,让active状态的NameNode获取znode锁。

    DataNode的运行过程中。所有的DataNode都会向两个NameNode汇报自己的状态信息。

二、配置部署

 1、在mudole文件夹下创建目录HA

  mkdir HA

 2、把hadoop-2.7.2往HA中拷贝一份。

  cp  -r  hadoop-2.7.2/   HA/

 3、修改core-site.xml文件  

  <configuration>

    <!-- 把两个NameNode的地址组装成一个集群mycluster -->

    <property>
      <name>fs.defaultFS</name>
      <value>hdfs://mycluster</value>
    </property>

    <property>
      <name>hadoop.tmp.dir</name>
      <value>/home/admin/modules/HA/hadoop-2.7.2/hadoop-data</value>
    </property>

    <!--配置journalnode服务器存储目录-->

    <property>
      <name>dfs.journalnode.edits.dir</name>
      <value>/home/admin/modules/HA/hadoop-2.7.2/jn/mycluster</value>
    </property>

  </configuration>

  4、修改hdfs-site.xml

  <configuration>

    <!-- 完全分布式集群名称(必须和core-size.xml中mycluster一样) -->

    <property>

  <name>dfs.nameservices</name>

   <value>mycluster</value>

         </property>

         <!-- 集群中NameNode节点都有哪些 ,nn1\nn2是两个namenode的名称-->

         <property>

         <name>dfs.ha.namenodes.mycluster</name>

  <value>nn1,nn2</value>

   </property>

       <!-- nn1的RPC通信地址 -->

      <property>

              <name>dfs.namenode.rpc-address.mycluster.nn1</name>

              <value>linux01:8020</value>

         </property>

    <!-- nn2的RPC通信地址 -->

     <property>

            <name>dfs.namenode.rpc-address.mycluster.nn2</name>

            <value>linux02:8020</value>

      </property>

     <!-- nn1的http通信地址 -->

     <property>

            <name>dfs.namenode.http-address.mycluster.nn1</name>

            <value>linux01:50070</value>

       </property>

    <!-- nn2的http通信地址 -->

       <property>

            <name>dfs.namenode.http-address.mycluster.nn2</name>

           <value>linux02:50070</value>

     </property>

      <!-- 指定NameNode元数据在JournalNode上的存放位置 -->

        <property>

             <name>dfs.namenode.shared.edits.dir</name>

       <value>qjournal://linux01:8485;linux02:8485;linux03:8485/mycluster</value>

      </property>

     <!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 ,防止脑裂-->

       <property>

             <name>dfs.ha.fencing.methods</name>

            <value>sshfence</value>

     </property>

     <!-- 使用隔离机制时需要ssh无秘钥登录-->

     <property>

           <name>dfs.ha.fencing.ssh.private-key-files</name>

          <value>/home/atguigu/.ssh/id_rsa</value>

     </property>

       <!-- 访问代理类:client,mycluster,active配置失败自动切换实现方式-->

     <property>

         <name>dfs.client.failover.proxy.provider.mycluster</name>

       <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

     </property>

    <!-- 指定数据冗余份数,默认3份,会占用磁盘空间 -->
    <property>
      <name>dfs.replication</name>
      <value>1</value>
    </property>

    <!-- 关闭权限检查,非hadoop用户不可以操作hadoop集群 -->
    <property>
      <name>dfs.permissions.enabled</name>
      <value>false</value>
    </property>

    <!-- 浏览hdfs的方式,一种是webhdfs,一种格式https -->
    <property>
      <name>dfs.webhdfs.enabled</name>
      <value>true</value>
    </property>

  </configuration>

 5、分发到linxu02、linux03

  在modules路径下:

  scp -r HA linux02:/home/admin/modules/

  scp -r HA linux03:/home/admin/modules/

 三、启动HDFS-HA集群

 1、打开三台服务器上的JouranlNode节点:

  sbin/hadoop-daemon.sh start journalnode

 2、格式化linux01的namenode

  bin/hdfs namenode -format

 3、启动namenode

  sbin/hadoop-daemon.sh start namenode

 4、在linux02中,同步linux01中的active的namenode

  sbin/hdfs namenode -bootstrapStandby

 5、启动所有的DataNode

  分别在三台服务器上,执行:

  sbin/hadoop-daemons.sh start datanode

 ************* 测试  *************

   linux01:50070,Overview看他们状态。
   linux02:50070,Overview看他们状态。

 6、将linux01的NameNode切换为Active

  bin/hdfs haadmin -transitionToActive nn1

 7、把linux01的NameNode切换为Standby,再把linux02的NameNode切换为Active

  bin/hdfs haadmin -transitionToStandby nn1

  bin/hdfs haadmin -transitionToActive nn2

 8、关闭linux01的namenode节点,把linux02强制切换为active

  sbin/hadoop-daemon.sh stop namenode
  bin/hdfs haadmin -transitionToActive nn2 -forceactive

四、安装zookeeper

 1、在HA文件加下,执行解压命令。把zookeeper安装到HA下

   tar -zxf /home/admin/softwares/installations/zookeeper-3.4.5.tar.gz -C ./

 2、修改/conf路径下文件名称,修改该配置文件

   mv zoo_sample.cfg zoo.cfg 修改名称。

  把dataDir的路径改为:/home/admin/modules/HA/zookeeper-3.4.5/zkData

  在最后配置节点ip:

    server.1=192.168.137.20:2888:3888

    server.2=192.168.137.21:2888:3888

    server.3=192.168.137.22:2888:3888

 3、在zookeeper-3.4.5目录下,创建文件夹zkData,在zkData中,创建文件myid,在myid文件中追加一个1,对应server.1,在linux02中的myid为2...

  mkdir zkData

  touch myid

  echo 1 > myid

 4、zookeeper分发到linux02、linux03

  scp -r zookeeper-3.4.5 linux02:/home/admin/module/HA

 5、给三台服务器的hadoope中配置zookeeper

  在core-size.xml中添加 

    <property>
      <name>ha.zookeeper.quorum</name>
      <value>linux01:2181,linux02:2181,linux03:2181</value>
    </property>

  在hdfs-size.xml中添加

    <property>

           <name>dfs.ha.automatic-failover.enabled</name>

           <value>true</value>

    </property>

五、结合zookeeper实现高可用

 1、先关闭所有服务器的HDFS

  sbin/stop-dfs.sh

 2、启动所有服务器的zookeeper,查看三台服务器的zookeeper的状态

  (paxos算法,让一台服务器的zookeeper状态为leader,其他节点为follower)

  bin/zkServer.sh start

  bin/zkServer.sh status

 3、初始化zookeeper

  bin/hdfs  zkfc -formatZK,将新配置的高可用namenode,在zookeeper中格式化

 4、先手动启动journalnode

  sbin/hadoop-daemon.sh start journalnode

 5、启动HDFS服务

  sbin/start-dfs.sh

  注意:先手动启动journalnode,如果没有使用start-dfs.sh命令启动服务,每个服务单独启动,

测试、

 1、进到zookeeper客户端

  bin/zkCli.sh

  

大数据 - hadoop - HDFS+Zookeeper实现高可用的更多相关文章

  1. 我要进大厂之大数据Hadoop HDFS知识点(1)

    01 我们一起学大数据 老刘今天开始了大数据Hadoop知识点的复习,Hadoop包含三个模块,这次先分享出Hadoop中的HDFS模块的基础知识点,也算是对今天复习的内容进行一次总结,希望能够给想学 ...

  2. 我要进大厂之大数据Hadoop HDFS知识点(2)

    01 我们一起学大数据 老刘继续分享出Hadoop中的HDFS模块的一些高级知识点,也算是对今天复习的HDFS内容进行一次总结,希望能够给想学大数据的同学一点帮助,也希望能够得到大佬们的批评和指点! ...

  3. 大数据hadoop之zookeeper

    一.ZooKeeper 的实现 1.1 ZooKeeper处理单点故障 我们知道可以通过ZooKeeper对分布式系统进行Master选举,来解决分布式系统的单点故障,如图所示. 图 1.1 ZooK ...

  4. 大数据Hadoop——HDFS Shell操作

    一.查询目录下的文件 1.查询根目录下的文件 Hadoop fs -ls / 2.查询文件夹下的文件 Hadoop fs -ls /input 二.创建文件夹 hadoop fs -mkdir /文件 ...

  5. 基于zookeeper的高可用Hadoop HA集群安装

    (1)hadoop2.7.1源码编译 http://aperise.iteye.com/blog/2246856 (2)hadoop2.7.1安装准备 http://aperise.iteye.com ...

  6. 云计算分布式大数据Hadoop实战高手之路第七讲Hadoop图文训练课程:通过HDFS的心跳来测试replication具体的工作机制和流程

    这一讲主要深入使用HDFS命令行工具操作Hadoop分布式集群,主要是通过实验的配置hdfs-site.xml文件的心跳来测试replication具体的工作和流程. 通过HDFS的心跳来测试repl ...

  7. 大数据篇:Zookeeper

    Zookeeper 1 Zookeeper概念 Zookeeper是什么 是一个基于观察者设计模式的分布式服务管理框架,它负责和管理需要关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Z ...

  8. 14周事情总结-机器人-大数据hadoop

    14周随着考试的进行,其他该准备的事情也在并行的处理着,考试内容这里不赘述了 首先说下,关于机器人大赛的事情,受益颇多,机器人的制作需要机械和电控两方面 昨天参与舵机的测试,遇到的问题:舵机不动 排查 ...

  9. hadoop 集群HA高可用搭建以及问题解决方案

    hadoop 集群HA高可用搭建 目录大纲 1. hadoop HA原理 2. hadoop HA特点 3. Zookeeper 配置 4. 安装Hadoop集群 5. Hadoop HA配置 搭建环 ...

随机推荐

  1. font——文字属性大全

    一.字体风格(font-style) <style type="text/css"> /*默认值.浏览器显示一个标准的字体样式.*/ p.normal {font-st ...

  2. WEB UI 上传URL附件(使用方法备份)

    FUNCTION zcrm_update_atta. *"------------------------------------------------------------------ ...

  3. IIS环境配置和项目部署

    本人实际工作项目中IIS部署,亲测可用~~ 具体步骤: 1.打开控制面板 2.打开程序和功能 3.打开或关闭Windous功能 然后勾选相关内容: 4.添加应用程序 先打开iis管理器页面(控制面板— ...

  4. 微信和QQ内置浏览器为什么老是弹停止访问该网页,微信域名被屏蔽的解决办法

    近来很多商家开始重视域名防封的技术了,为什么呢,因为实在是封怕了.三天两头就得去换域名,换域名是小事,用户流失就是大事了,直接跟利益挂钩的.那么域名防封技术究竟有多重要呢?又该如何实现域名防封呢?下面 ...

  5. TCP建立连接三次握手和释放连接四次握手

    TCP建立连接三次握手和释放连接四次握手     [转载]http://blog.csdn.net/guyuealian/article/details/52535294   在谈及TCP建立连接和释 ...

  6. IPFS扫盲

    第二届深圳区块链技术与应用大会暨展览会,深圳区块链存储与IPFS技术应用大会暨展览会于2019年4月9日在深圳会展中心6号馆举行.那么这个IPFS是什么?和区块链有什么关系?有什么用?又怎么用呢?接下 ...

  7. 跟随我在oracle学习php(10)

    正则表达式 做验证 做匹配 用符号来描述书写规则:/ 中间写正则表达式 /^ :匹配开头,$:匹配结尾 : /^ve/以ve开头的 /ve$/以ve结尾\d:一个任意的数字\w:一个任意的数字或字母\ ...

  8. 算法和数据结构~各位排序算法的介绍与实现(C#)

    排序是指将元素集合按照规定的顺序排列.通常有两种排序方法,升序排列和降序排列.例如,对整数集{5,2,7,1}进行升序排列,结果为{1,2,5,7},对其进行降序排列结果为{7,5,2,1}.总的来说 ...

  9. IntelliJ IDEA 安装和破解教程

    1.首先下载IntelliJ IDEA,下载链接:http://www.jetbrains.com/idea/download/#section=windows:记得一定要选择UItimate版! 2 ...

  10. python修炼第五天

    第五天,感觉开始烧脑了.递归逻辑难,模块数量多,但是绝世武功都是十年磨一剑出来的!稳住! 1 递归. 定义-----递归就是在函数的内部调用自己递归深度 998不建议修改递归深度,因为如果998都没有 ...