1 HDFS‑HA 核心组件

  1. 2 台 NameNode
  • Active NameNode:对外处理客户端读写,唯一写元数据
  • Standby NameNode:热备,不接收客户端请求,实时同步元数据,故障时升级为 Active
  1. JournalNode 集群(JN,奇数,3 台起步)
    共享存储,保存edits编辑日志。Active 把修改写入 JN 集群;Standby 持续读取 JN 的 edits,在内存回放,保持元数据同步腾讯云。

Quorum 机制:写入超过半数 JN 成功,才算写成功,容忍半数以下节点故障。

  1. ZooKeeper 集群(奇数)
    负责选主、故障检测,保存分布式锁,防止脑裂(同一时刻只允许一个 Active)。
  2. ZKFC(ZKFailoverController)
    每个 NameNode 节点上都要跑一个 ZKFC 进程,三个职责:
    ①健康检测:监控本机 NameNode 是否存活;
    ②和 ZK 交互:抢锁竞选 Active;
    ③故障隔离 (fence):旧 Active 故障卡死,SSH 远程杀死旧 NN 进程,防止脑裂。
  3. DataNode
    同时向两台 NameNode 汇报块信息,不管谁是 Active 都上报。
    在这里插入图片描述
IP主机名角色
192.168.40.141server1NameNode / DFSZKFailoverController / ResourceManager
192.168.40.142server2JournalNode / QuorumPeerMain / DataNode / NodeManager
192.168.40.143server3JournalNode / QuorumPeerMain / DataNode / NodeManager
192.168.40.144server4JournalNode / QuorumPeerMain / DataNode / NodeManager
192.168.40.145server5NameNode / DFSZKFailoverController / ResourceManager

2 部署

2.1 虚拟机准备

新开虚拟机server5

[root@server5 ~]# useradd hadoop
# 还是要保证 uid 和 gid 与其他节点相同
[root@server5 ~]# yum install -y nfs-utils
[root@server5 ~]# mount 192.168.40.141:/home/hadoop/ /home/hadoop/

2.2 ZooKeeper 集群部署

上传安装包并解压

[hadoop@server1 hadoop]$ sbin/stop-all.sh
[hadoop@server1 hadoop]$ cd
[hadoop@server1 ~]$ tar zxf apache-zookeeper-3.8.6-bin.tar.gz

集群配置

[hadoop@server2 ~]$ cd apache-zookeeper-3.8.6-bin/conf/
[hadoop@server2 conf]$ cp zoo_sample.cfg zoo.cfg
[hadoop@server2 conf]$ vim zoo.cfg

各节点配置文件相同,此处的server.1并不是指 server1,下一步需要在/tmp/zookeeper目录中创建 myid 文件,写入一个唯一的数字,取值范围在1-255。编号1/2/3对应每台节点 myid 文件里面的数字,数字和机器一一对应
在这里插入图片描述
三台机器分别生成 myid,编号 1、2、3,和zoo.cfg里面server.1 server.2 server.3一一对应,并且要删除/tmp下的文件,目的是清除旧残留数据,防止和 HA 模式自动生成的元数据、日志冲突

[hadoop@server2 conf]$ rm -rf /tmp/*
[hadoop@server2 conf]$ mkdir /tmp/zookeeper
[hadoop@server2 conf]$ echo 1 > /tmp/zookeeper/myid
[hadoop@server3 ~]$ rm -rf /tmp/*
[hadoop@server3 ~]$ mkdir /tmp/zookeeper
[hadoop@server3 ~]$ echo 2 > /tmp/zookeeper/myid
[hadoop@server4 ~]$ rm -rf /tmp/*
[hadoop@server4 ~]$ mkdir /tmp/zookeeper
[hadoop@server4 ~]$ echo 3 > /tmp/zookeeper/myid

在各节点启动服务

[hadoop@server2 conf]$ cd ..
[hadoop@server2 apache-zookeeper-3.8.6-bin]$ bin/zkServer.sh start
[hadoop@server2 apache-zookeeper-3.8.6-bin]$ bin/zkServer.sh status

server2 的角色是 follower
在这里插入图片描述

[hadoop@server3 ~]$ cd apache-zookeeper-3.8.6-bin/
[hadoop@server3 apache-zookeeper-3.8.6-bin]$ bin/zkServer.sh start
[hadoop@server3 apache-zookeeper-3.8.6-bin]$ bin/zkServer.sh status

server3 的角色是 leader
在这里插入图片描述

[hadoop@server4 ~]$ cd apache-zookeeper-3.8.6-bin/
[hadoop@server4 apache-zookeeper-3.8.6-bin]$ bin/zkServer.sh start
[hadoop@server4 apache-zookeeper-3.8.6-bin]$ bin/zkServer.sh status

server4 的角色是 follower
在这里插入图片描述
查看进程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 Hadoop 配置

[hadoop@server1 ~]$ cd hadoop/etc/hadoop/
[hadoop@server1 hadoop]$ vim core-site.xml

在这里插入图片描述

[hadoop@server1 hadoop]$ vim hdfs-site.xml

在这里插入图片描述
在这里插入图片描述
在三个DN上依次启动 journalnode

[hadoop@server2 apache-zookeeper-3.8.6-bin]$ cd
[hadoop@server2 ~]$ cd hadoop
[hadoop@server2 hadoop]$ bin/hdfs --daemon start journalnode

在这里插入图片描述

[hadoop@server3 apache-zookeeper-3.8.6-bin]$ cd
[hadoop@server3 ~]$ cd hadoop
[hadoop@server3 hadoop]$ bin/hdfs --daemon start journalnode

在这里插入图片描述

[hadoop@server4 apache-zookeeper-3.8.6-bin]$ cd
[hadoop@server4 ~]$ cd hadoop
[hadoop@server4 hadoop]$ bin/hdfs --daemon start journalnode

在这里插入图片描述
格式化 HDFS 集群,只在 server1 上执行

[hadoop@server1 hadoop]$ cd
[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ bin/hdfs namenode -format
 scp -r /tmp/hadoop-hadoop server5:/tmp

在这里插入图片描述
格式化 ZooKeeper,只在 server1 上执行

[hadoop@server1 hadoop]$ bin/hdfs zkfc -formatZK

在这里插入图片描述
启动 HDFS 集群,只在 server1 上执行

[hadoop@server1 hadoop]$ sbin/start-dfs.sh

在这里插入图片描述
查看各节点状态
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查看前端网页,server1 为 active,server5 为standby
在这里插入图片描述
在这里插入图片描述
测试
中止 server1 的NameNode 进程

[hadoop@server1 hadoop]$ kill -9 40713

server1 的前端无法访问
在这里插入图片描述
server5 变 active
在这里插入图片描述
恢复 server1

[hadoop@server1 hadoop]$ bin/hdfs --daemon start namenode

server1 变 standby
在这里插入图片描述

2.4 yarn 高可用配置

[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop
[hadoop@server1 hadoop]$ vim etc/hadoop/yarn-site.xml

在这里插入图片描述
启动 yarn 服务

[hadoop@server1 hadoop]$ sbin/start-yarn.sh

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
server1 为 standby
在这里插入图片描述
server5 为 active
在这里插入图片描述
测试
中止 server5 的 ResourceManager 进程

[hadoop@server5 hadoop]$ kill -9 28361

server1 变 active
在这里插入图片描述
恢复 server5 服务

[hadoop@server5 hadoop]$ bin/yarn --daemon start resourcemanager

server5 变 standby
在这里插入图片描述

更多推荐