Hadoop教程:Hadoop HA配置以及自动主从切换(使用QJM的方法)异常处理方法

HA简介

在hadoop 2.0之前,hadoop 的集群都是单个namenode 节点,这样,一旦任意一个namenode 挂掉。都会导致该集群废掉。

硬件前提

JournalNode machines - 由于JournalNode 是很轻量级的, 所以这个程序一般和其他的程序一起运行, 例如NameNodes, JobTracker, YARN ResourceManager. 注意: 最少得有3台, 建议添加奇数个QJN,例如3,5,.).系统最多可以忍受 (N - 1) / 2 个节点挂掉,N表示总共的节点数

注意,在HA集群中。StandByNamenode 同时扮演着checkpoints namespace 的共给你。所以,你也就没有必要去开启SecondaryNamenode了。

配置全景

在这里插入图片描述

进行配置

配置所在的git 仓库地址。
https://gitee.com/blueboz/hadoopconfig

配置完成之后

1.首先需要启动journalNodehdfs --daemon start journalnode

在这里插入图片描述
使用netstat -nltp 查看端口占用,发现端口确实占用了。
在这里插入图片描述
访问界面
在这里插入图片描述

2.执行hadoop namenode -format

从随意的一个namenode 节点执行
随后将namenode 中的数据拷贝到另外的一个节点。

执行start-all.sh

3.发现两个节点都是standby ,这是因为我们还没有配置好自动切换哦,这时候,我们需要自己使用命令去切换

官方为我们提供了这个命令去切换

用法:haadmin
    [-transitionToActive <serviceId>]
    [-transitionToStandby <serviceId>]
    [-failover [--forcefence] [--forceactive] <serviceId> <serviceId>]
    [-getServiceState <serviceId>]
    [-getAllServiceState]
    [-checkHealth <serviceId>]
    [-help <command>]

执行了如下的命令之后,便可以切换成主节点。
./hdfs haadmin -ns ns1 -transitionToActive nn1

在这里插入图片描述
这时候,如果我们再次执行主从节点的切换,会失败,原因是已经有了一个节点是主节点,我们此时需要-transitionToStandby 这个命令帮我们先把主节点切换成为备用节点,之后,才能顺利的切换为主节点。
在这里插入图片描述
**更简单 的命令 **

这个命令意思是,将nn1主节点切换到nn2
./hdfs haadmin -failover nn1 nn2
注意,在使用联邦的时候由于具有不同的nameserice ,所以在执行上面的命令的 时候,还需要设置参数[-ns <nameserviceId>]
在这里插入图片描述
查看指定namenode的状态,在非联邦的情况下,可以只使用serviceId.
在这里插入图片描述
查看所有节点的状态,
在这里插入图片描述

关于负载均衡
可以尝试访问http://namenode地址:9870/isActive进行节点的状态判断的操作!结果情况如下图片
在这里插入图片描述
在这里插入图片描述

如何自动切换

从目前的现象来看,他是没有办法帮我们自动的切换主从节点的
自动切换,我们需要为hdfs添加项配置。

  1. Zookeeper Quorum
  2. ZkFailOverController(ZKFC)

失败侦测如何侦测服务是否挂掉?依赖zookeeper是个好方法,利用每一个namenode 注册到zk上,一旦服务器崩掉,注册到zk上的信息将会消失。
主namenode选举zookeeper独占锁?

ZKFC(ZKFailoverController )这是一个zookeeper客户端,监控namenode状态,每一个namenode 需要跑一个zkfc,其作用有:
健康监控通过ping 本机的namenode等监控其状态,并且可以修改节点的状态
zk session监控当本地的nn是正常运行

配置信息

<!--hdfs-site.xml -->

 <property>
   <name>dfs.ha.automatic-failover.enabled</name>
   <value>true</value>
 </property>
<!--core-site.xml-->

 <property>
   <name>ha.zookeeper.quorum</name>
   <value>zk1.example.com:2181,zk2.example.com:2181,zk3.example.com:2181</value>
 </property>

HADOOP_HOME/bin/hdfs zkfc -formatZK
HADOOP_HOME/bin/hdfs --daemon start zkfc

异常处理

java.lang.RuntimeException: Mismatched address stored in ZK for NameNode at /172.17.0.3:8020: Stored protobuf was nameserviceId: "ns1"
namenodeId: "nn2"
hostname: "0e0bf432c069"
port: 8020
zkfcPort: 8019
, address from our own configuration for this NameNode was /172.17.0.3:8020

上面的异常信息是,zk存储的hostname与我们的namenode 不一致导致的,因为zk中只存储域名,而在我们当前主机是ping不同对应的主机,故而出现此错误。解决方法是在/etc/hosts文件中添加所有主机的映射信息。

从下面的图中,虽然我们节点切换成功了,但是出现了一个意外的错误,就是sshfence错误,在于,其使用fuser命令的时候失败了。这个是其内置的命令,原因是我们并没有fuser程序的
在这里插入图片描述

发布了73 篇原创文章 · 获赞 55 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/blueboz/article/details/91346450