HA集群的简介以及怎么搭建一个HA集群

本文介绍了Hadoop HA集群相关内容。因HDFS集群存在单点故障问题,引出HA集群。阐述了硬件需求,包括一个主节点和三个及以上从节点。详细说明了配置文件的设置,如hdfs - site.xml和core - site.xml。还给出配置具体步骤,最后介绍了测试方法,如查看状态信息、上传文件等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、背景

     在Hadoop 2.0.0之前,NameNode是HDFS集群中的单点故障(SPOF)。每个群集都有一个NameNode,如果该机器或进程变得不可用,整个群集将无法使用,直到NameNode重新启动或在单独的计算机上启动。

这在两个主要方面影响了HDFS集群的总体可用性:

  • 对于计划外事件(例如计算机崩溃),在操作员重新启动NameNode之前,群集将不可用。

  • 计划维护事件(如NameNode计算机上的软件或硬件升级)将导致群集停机时间窗口。

2、原因

      普通的完全分布式集群只有一个主节点,它的namenode存在单节点故障,如果namenode一旦出现故障,整个集群将处于瘫痪状态。为了解决这个问题便出现了HA集群,HA又称为hdfs的高可用性。

高可用性的简介:
    a.只有两台独立的计算机配置为NameNode,其中一个NameNode处于活动状态(active),另外一个Namenode只是充当从属服务器(Standby)
    b.在集群中配置一组"journalnode",记录活跃Namenode的编辑信息,同时传给备份Namenode,并防止"脑裂情景"的发生(JournalNodes只允许一个NameNode一次成为一个writer)
    c.datanode要向两个Namenode进行心态反馈

3、硬件需求

        ---->一个主节点master

        ----->三个及三个以上的从节点slave1、slave2、slave3

4、配置文件(注:我的主节点是master,要在salve1上配置namenode)

(1)在< hdfs-site.xml> 中

a.配置名称服务的昵称(也就是另外一个namenode的名称)
    <property>
    <name>dfs.nameservices</name> 
    <value>mycluster</value>
    </property>

b.为名称服务配置相应的ID唯一标识符:用逗号分开,注意:目前,每个名称服务最多只能配置两个NameNode。
    <property>
    <name>dfs.ha.namenodes.mycluster</name>
    <value>nn1,nn2</value>
    </property>

c.为名称服务的唯一标识符,配置独立完整的rpc地址
    <property>
    <name>dfs.namenode.rpc-address.mycluster.nn1</name>
    <value>master1:9000</value>
    </property>
    <property>
    <name>dfs.namenode.rpc-address.mycluster.nn2</name>
    <value>slave1:9000</value>
    </property>

d.配置webui的访问地址
    <property>
      <name>dfs.namenode.http-address.mycluster.nn1</name>
      <value>master1:50070</value>
    </property>
    <property>
      <name>dfs.namenode.http-address.mycluster.nn2</name>
      <value>slave1:50070</value>
    </property>

f.指定journalnode守护进程所在的机器,及其指定目录(即重用名称服务的值)
    <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://master1:8485;slave2:8485;slave3:8485/mycluster</value>
    </property>

g.配置client用于联系ActiveNamenode的java类型
    <property>
    <name>dfs.client.failover.proxy.provider.mycluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>

h.配置防护方式:sshfence,让journalnode守护进程防止脑裂的产生,还必须配置无密码登陆
     <property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
    </property>

    <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/home/hyxy/.ssh/id_rsa</value>
    </property>

(2)在<core-site.xml>中

a.配置默认的namenode的请求路径
    <property>
      <name>fs.defaultFS</name>
      <value>hdfs://mycluster</value>
    </property>

b.配置journalnode所产生的目录的具体路径(说明:mycluster目录的位置)
    <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/home/hyxy/apps/hadoop/tmp</value>
    </property>

5、配置具体步骤

         a.配置文件完成后,首先启动相应节点上的journalnode守护进程(因为我要在slave1上配置namenode,所以我要在另外三个节点上先启动journalnode)
     命令如下:
         hadoop-daemon.sh start journalnode

      b.同步元数据

         此时会有两种情况:

                    情况1、如果是新搭建的集群,选择其中一个namonde所在的机器进行格式化。
                        ]$ hdfs namenode -format

                    情况2、将已经格式化的namenode的元数据同步到另外一个未格式化的namenode上,目的就是在另一个未格式化的机器上
          生成${hadoop.tmp.dir}/dfs/name,存储最新的镜像文件:步骤如下-->

                       --1.开启格式化好的namenode(也就是开启master的namenode)
                                hadoop-daemon.sh start namenode
                     --2.在未格式化的namenode上,运行如下命令,同步元数据(也就是在你的slave1上开启)  
                               hdfs namenode -bootstrapStandby  

        c.将本地的元数据初始化到journalnode里(在master中)

           --1.关闭namenode
               hahadoop-daemon.sh stop namenode
          --2.初始化,注意,journalnode必须是开启的(n-1/2)
               hdfs namenode -initializeSharedEdits

      d.开启HA集群
         start-dfs.sh

         注释:此时在master和slave1中都显示是standby

     e.把一个namenode变成活跃节点(此时把master变成活跃节点)

           hdfs haadmin -transitionToActive nn1

6、测试

   a.查看两个namenode的50070的状态信息

  c. 上传文件/创建目录到HA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值