高可用(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. 解决JNI native 线程不能正常退出的问题

    本人刚涉足学习C++ 安卓  java,遇到这个棘手的问题,多谢博客园作者lknlfy 看了你的博客解决了这个问题,此文转发, 方便日后学习 以下内容转自lknlfy作者博客  传送门:http:// ...

  2. 下载网站js css img 资源

  3. nginx配置文件详解----第一篇【访问与错误日志】

    error_log错误日志    access_log访问日志 log_format指令 语法: log_format name string …;默认值: log_format combined “ ...

  4. FileSystemObject对象及常用方法

    FSO 对象模式包含在 Scripting 类型库中,该库位于 Scrrun.dll 文件中.因而,要使用 FSO 对象模式,必须把 Scrrun.dll 放在 Web 服务器的适当系统目录中. 要用 ...

  5. Ubuntu配置MYSQL远程连接

    一.修改mysql权限 1.mysql -u root -p  回车输入密码 2.use mysql:      打开数据库 3.将host设置为%表示任何ip都能连接mysql,当然您也可以将hos ...

  6. 【vue学习】vue 2.0版本以上创建项目的的步骤

    一.环境准备 1.vue项目依赖 node.js npm,需要先安装node和npm,先检查本地是否安装node.npm 快捷键win+r   输入cmd  弹出操作框,如果电脑已经安装git,直接右 ...

  7. Python2.7.13下载安装全过程(Windows版)

    前提:    我下载的Python是windows版本的,演示过程是在win10 64位操作系统上安装的. 1.下载 进入官网https://www.python.org/,找到Dowdloads,根 ...

  8. Vue的学习

    1.Vue是什么 参考Vue官网,一套用于构建用户界面的渐进式框架. 2.什么是渐进式框架 引用大神的话:“它给你提供足够的optional,但并不主张很多required,也不多做职责之外的事!这就 ...

  9. 关于人人网的form查找和打印

    from lianxi import sessionimport json# urlurl = 'http://www.renren.com/ajaxLogin/login?1=1&uniqu ...

  10. 《程序设计入门——C语言》翁恺老师 第四周编程练习记录

    1 奇偶个数(5分) 题目内容: 你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据.程序输出读到的数据中的奇数和偶数的个数. 输入格式: 一系列正整数,整数的范围是(0,1 ...