HDFS HA 高可用集群搭建

本文详细介绍HDFSHA高可用集群的搭建步骤,包括Zookeeper集群的安装配置、HDFS和Hadoop公共属性的设置、集群启动及NameNodeHA自动切换测试。针对常见问题提供解决方案。

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

HDFS HA 高可用集群搭建

1.安装并配置Zookeeper集群

参考:https://blog.youkuaiyun.com/amingo_ss/article/details/104326593

2.配置HDFS(hdfs-site.xml)

== 注意要将修改后的hdfs-site.xml分发到集群各个机器。==

rsync -rvl /usr/local/hadoop/etc/hadoop/* hadoop@hadoop103:/usr/local/hadoop/etc/hadoop
rsync -rvl /usr/local/hadoop/etc/hadoop/* hadoop@hadoop104:/usr/local/hadoop/etc/hadoop
<configuration>
<property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop/data/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop/data/dfs/data</value>
</property>
  <!-- 指定NameService的名称 -->  
  <property> 
    <name>dfs.nameservices</name>  
    <value>mycluster</value> 
  </property>  
  <!-- 指定NameService下两个NameNode的名称 -->  
  <property> 
    <name>dfs.ha.namenodes.mycluster</name>  
    <value>nn1,nn2</value> 
  </property>  
  <!-- 分别指定NameNode的RPC通讯地址 -->  
  <property> 
    <name>dfs.namenode.rpc-address.mycluster.nn1</name>  
    <value>192.168.1.80:8020</value> 
  </property>  
  <property> 
    <name>dfs.namenode.rpc-address.mycluster.nn2</name>  
    <value>192.168.1.81:8020</value> 
  </property>  
  <!-- 分别指定NameNode的Web监控页面地址 -->  
  <property> 
    <name>dfs.namenode.http-address.mycluster.nn1</name>  
    <value>192.168.1.80:50070</value> 
  </property>  
  <property> 
    <name>dfs.namenode.http-address.mycluster.nn2</name>  
    <value>192.168.1.81:50070</value> 
  </property>  
  <!-- 指定NameNode编辑日志存储在JournalNode集群中的目录-->  
  <property> 
    <name>dfs.namenode.shared.edits.dir</name>     <value>qjournal://192.168.1.80:8485;192.168.1.81:8485;192.168.1.82:8485/mycluster</value> 
  </property>
  <!-- 指定JournalNode集群存放日志的目录-->  
  <property> 
    <name>dfs.journalnode.edits.dir</name>  
    <value>/usr/local/hadoop/journalnode</value> 
  </property>  
  <!-- 配置NameNode失败自动切换的方式-->  
  <property> 
    <name>dfs.client.failover.proxy.provider.mycluster</name>  
 <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</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/hadoop/.ssh/id_rsa</value> 
  </property>  
  <!-- 开启失败故障自动转移-->  
  <property> 
    <name>dfs.ha.automatic-failover.enabled</name>  
    <value>true</value> 
  </property>  
  <!-- 配置Zookeeper地址-->  
  <property> 
    <name>ha.zookeeper.quorum</name>  
    <value>192.168.1.80:2181,192.168.1.81:2181,192.168.1.82:2181</value> 
  </property>  
  <!-- 文件在HDFS中的备份数(小于等于NameNode) -->  
  <property> 
    <name>dfs.replication</name>  
    <value>3</value> 
  </property>  
  <!-- 关闭HDFS的访问权限 -->  
  <property> 
    <name>dfs.permissions.enabled</name>  
    <value>false</value> 
  </property>  
 </configuration>

*指定NameNode的RPC通讯地址是为了接收FailoverControllerActive和FailoverControllerStandBy以及DataNode发送的心跳。

3.配置Hadoop公共属性(core-site.xml)

== 注意要将修改后的hdfs-site.xml分发到集群各个机器。==

<configuration> 
  <!-- Hadoop工作目录,用于存放Hadoop运行时NameNode、DataNode产生的数据 -->  
  <property> 
    <name>hadoop.tmp.dir</name>  
    <value>/usr/local/hadoop/data</value> 
  </property>  
  <!-- 默认NameNode,使用NameService的名称 -->  
  <property> 
    <name>fs.defaultFS</name>  
    <value>hdfs://mycluster</value> 
  </property>  
  <!-- 开启Hadoop的回收站机制,当删除HDFS中的文件时,文件将会被移动到回收站(/usr/<username>/.Trash),在指定的时间过后再对其进行删除,此机制可以防止文件被误删除 -->  
  <property> 
    <name>fs.trash.interval</name>  
    <!-- 单位是分钟 -->  
    <value>1440</value> 
  </property> </configuration>

*在HDFS HA集群中,StandBy的NameNode会对namespace进行checkpoint操作,因此就不需要在HA集群中运行Secondary NameNode。

4.启动HDFS HA高可用集群

1.分别启动JournalNode
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.格式化第一个NameNode并启动
在这里插入图片描述
在这里插入图片描述
3.第二个NameNode同步第一个NameNode的信息
在这里插入图片描述
4.启动第二个NameNode
在这里插入图片描述
5.启动Zookeeper集群
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6.格式化Zookeeper
在这里插入图片描述
*当格式化ZK后,ZK中将会多了hadoop-ha节点。

7.重启HDFS集群
在这里插入图片描述
在这里插入图片描述
查看启动进程:
Namenode1
在这里插入图片描述
Namenode2:
在这里插入图片描述

当HDFS HA集群启动完毕后,可以分别访问NameNode管理页面查看当前NameNode的状态,http://192.168.1.80:50070、http://192.168.1.81:50070。
在这里插入图片描述
在这里插入图片描述
*可以查看到主机名为hadoop1的NamNode其状态为StandBy,而主机名为hadoop2的NameNode其状态为Active。

5.测试NameNode HA自动切换

1.手动杀死activity状态的namenode
在这里插入图片描述
此时访问NameNode管理页面,可见主机名为hadoop1的NameNode其状态从原本的StandBy切换成Active。
在这里插入图片描述

6.常见问题

1.namnode启动失败
Incompatible namespaceID for journal Storage Directory /home/hadoop/journalnode/mycluster: NameNode has nsId 563678262 but storage has nsId 1931684053

原因:namenode的namespaceid和journalnode的namespaceid不一致导致。

解决办法:
将hadoop/data下的数据清掉,重新格式化namenode。然后启动journalnode,再重新格式化namenode。确保namenode 里面的namespaceID和clusterID与journalnode中的一致。
Namenode:
在这里插入图片描述
Journalnode:
在这里插入图片描述
2.当activity状态的nameNode被杀死后,standby状态的namenode不会自动切换为activity状态。
查看zkfc的日志,报如下信息:
com.jcraft.jsch.JSchException: Algorithm negotiation fail
分析原因:服务器的openssh版本与hadoop的jsch jar版本不匹配。
解决办法:下载最新的jsch jar包替换hadoop下面几个文件夹中的jsch jar包。
hadoop的jsch jar包在share/hadoop文件下的:common,httpfs,kms,tools 文件夹中,路径如下:
hadoop/share/hadoop/common/lib
hadoop/share/hadoop/httpfs/tomcat/webapps/webhdfs/WEB-INF/lib
hadoop/share/hadoop/kms/tomcat/webapps/kms/WEB-INF/lib
hadoop/share/hadoop/tools/lib
在这里插入图片描述
查看当前系统的openssh版本信息:
openssh version

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值