Hadoop的HDFS集群高可用之手动故障转移

1 概述
  1. 所谓HA(High Available),即高可用(7*24小时不中断服务)。
  2. 实现高可用最关键的策略是消除单点故障。HA严格来说应该分成各个组件的HA机制:HDFS的HA和YARN的HA。
  3. Hadoop2.0之前,在HDFS集群中NameNode存在单点故障(SPOF)。
  4. NameNode主要在以下两个方面影响HDFS集群
  	    NameNode机器发生意外,如宕机,集群将无法使用,直到管理员重启
    	NameNode机器需要升级,包括软件、硬件升级,此时集群也将无法使用

HDFS HA功能通过配置Active/Standby两个NameNodes实现在集群中对NameNode的热备来解决上述问题。如果出现故障,如机器崩溃或机器需要升级维护,这时可通过此种方式将NameNode很快的切换到另外一台机器。

hdfs的HA方案官网
在这里插入图片描述
可以大概看一下官网,这里配置双namenode节点则不再需要secondary Namenode 节点
在这里插入图片描述

2 部署hdfs HA集群
2.1 机器列表
机器角色
wyl01nn1、JournalNode
wyl02nn2、JournalNode
wyl03JournalNode、其他角色
2.2 安装包位置和文件内容

前面我们介绍过hadoop集群的部署,所以这里我们只是部署hdfs集群的namenode的高可用。
三台机器,每台机器存放路径为下图所示
在这里插入图片描述
根据官网描述的我们需要修改两个配置为文件core-site.xmlhdfs-site.xml

# core-site.xml 的配置文件
[root@wyl01 hadoop]# cat core-site.xml 
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

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

  <property>
     <name>hadoop.tmp.dir</name>
     <value>/opt/HA/hadoop/data/tmp</value>
  </property>

  <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/opt/HA/hadoop/data/jndata</value>
 </property>

</configuration>
# hdfs-site.xml的配置文件
[root@wyl01 hadoop]# cat hdfs-site.xml 
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
  <property>
    <name>dfs.nameservices</name>
    <value>mycluster</value>
  </property>
  
  <property>
    <name>dfs.ha.namenodes.mycluster</name>
    <value>nn1,nn2</value>
  </property>

  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn1</name>
    <value>wyl01:8020</value>
  </property>
  
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn2</name>
    <value>wyl02:8020</value>
  </property>

  <property>
     <name>dfs.namenode.http-address.mycluster.nn1</name>
     <value>wyl01:50070</value>
  </property>
  
  <property>
    <name>dfs.namenode.http-address.mycluster.nn2</name>
    <value>wyl02:50070</value>
  </property>

  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
  
  <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://wyl01:8485;wyl02:8485;wyl03:8485/mycluster</value>
  </property>

  <property>
    <!--代理类,将nn2变成active-->
    <name>dfs.client.failover.proxy.provider.mycluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  </property>

  <!--关闭权限检查 -->
   <property>
      <name>dfs.permissions.enable</name>
      <value>false</value>
    </property>
   <!--fencing隔离机制当nn2试图active不让起-->
    <property>
      <name>dfs.ha.fencing.methods</name>
      <value>sshfence</value>
    </property>

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

</configuration>
2.3 拷贝到其他两台机器
[root@wyl01 HA]# rsync  -av hadoop  hadoop-2.9.2   wyl02:/opt/HA
[root@wyl01 HA]# rsync  -av hadoop  hadoop-2.9.2   wyl03:/opt/HA
2.4 启动各个节点

启动顺序:先生成JournalNode服务—>nn1初始化—>nn1启动—>nn2同步—>nn2启动
在各个JournalNode节点上,输入以下命令启动JournalNode服务

[root@wyl03 hadoop]# ./sbin/hadoop-daemon.sh start journalnode

在这里插入图片描述

在这里插入图片描述
在[nn1]上,对其进行格式化,并启动

# 初始化
[root@wyl01 hadoop]# ./bin/hadoop namenode -format

格式化后,我们看到会自动生成data目录存储数据
在这里插入图片描述

# 启动
[root@wyl01 hadoop]# ./sbin/hadoop-daemon.sh start namenode
starting namenode, logging to /opt/HA/hadoop-2.9.2/logs/hadoop-root-namenode-wyl01.out
[root@wyl01 hadoop]# jps
25399 Jps
25018 JournalNode
25339 NameNode

启动后我们打开web页面,查看到节点是状态时standby;
在这里插入图片描述

在[nn2]上,同步nn1的元数据信息

# 同步数据
[root@wyl02 hadoop]# ./bin/hdfs namenode -bootstrapStandby

在这里插入图片描述

[root@wyl02 hadoop]# ./sbin/hadoop-daemon.sh start namenode
starting namenode, logging to /opt/HA/hadoop-2.9.2/logs/hadoop-root-namenode-wyl02.out
[root@wyl02 hadoop]# jps
28146 Jps
27747 JournalNode
28052 NameNode

启动后我们打开web页面,查看到节点是状态时standby;
在这里插入图片描述

将nn1切换成active

[root@wyl01 hadoop]# bin/hdfs haadmin -transitionToActive nn1

在这里插入图片描述
官网还提供其他的指令检查集群的状态
在这里插入图片描述

当我们把nn1给停掉,查看nn2是否切换成active,通过下图沃恩可以看到hadoop官网直接屏蔽掉了nn2切换成active,避免了脑裂问题
在这里插入图片描述

重启nn1,然后我们再切换namenode的active状态
在这里插入图片描述

# 切换
[root@wyl01 hadoop]# bin/hdfs haadmin -transitionToActive nn2

在这里插入图片描述
结论: 在手动模式下两个namenode都存在才能做到切换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值