IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> HA(1) -> 正文阅读

[大数据]HA(1)

HA(一)

1.HA的概述

(1)所谓 HA(High Availablity),即高可用(7*24 小时不中断服务)。

(2)实现高可用最关键的策略是消除单点故障。HA 严格来说应该分成各个组件的 HA 机制:HDFS 的 HA 和 YARN 的 HA。

(3)NameNode 主要在以下两个方面影响 HDFS 集群

? NameNode 机器发生意外,如宕机,集群将无法使用,直到管理员重启

? NameNode 机器需要升级,包括软件、硬件升级,此时集群也将无法使用

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

2.HDFS-HA的集群搭建

1.规划

HA 的主要目的是消除 namenode 的单点故障,需要将 hdfs 集群规划成以下模样

hadoop100hadoop101hadoop102
NameNodeNameNodeNameNode
JournalNodeJournalNodeJournalNode
DataNodeDataNodeDataNode

2.配置

在opt下面创建ha目录

mkdir ha

将/opt/module/下的 hadoop-3.1.3 拷贝到/opt/ha 目录下(记得删除 data 和 log 目录)

cp -r /opt/module/hadoop-3.1.3 /opt/ha/

配置我们的core-site.xml

<configuration>
<!-- 把多个 NameNode 的地址组装成一个集群 mycluster -->
 <property>
 <name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
 </property>
<!-- 指定 hadoop 运行时产生文件的存储目录 -->
 <property>
 <name>hadoop.tmp.dir</name>
 <value>/opt/ha/hadoop-3.1.3/data</value>
 </property>
</configuration>

配置 hdfs-site.xml

<configuration>
<!-- NameNode 数据存储目录 -->
 <property>
 <name>dfs.namenode.name.dir</name>
 <value>file://${hadoop.tmp.dir}/name</value>
 </property>
<!-- DataNode 数据存储目录 -->
 <property>
 <name>dfs.datanode.data.dir</name>
 <value>file://${hadoop.tmp.dir}/data</value>
 </property>
<!-- JournalNode 数据存储目录 -->
 <property>
 <name>dfs.journalnode.edits.dir</name>
 <value>${hadoop.tmp.dir}/jn</value>
 </property>
<!-- 完全分布式集群名称 -->
 <property>
 <name>dfs.nameservices</name>
 <value>mycluster</value>
 </property>
<!-- 集群中 NameNode 节点都有哪些 -->
 <property>
 <name>dfs.ha.namenodes.mycluster</name>
 <value>nn1,nn2,nn3</value>
 </property>
<!-- NameNode 的 RPC 通信地址 -->
 <property>
 <name>dfs.namenode.rpc-address.mycluster.nn1</name>
 <value>hadoop100:8020</value>
 </property>
 <property>
 <name>dfs.namenode.rpc-address.mycluster.nn2</name>
 <value>hadoop101:8020</value>
 </property>
<property>
 <name>dfs.namenode.rpc-address.mycluster.nn3</name>
 <value>hadoop102:8020</value>
 </property>
<!-- NameNode 的 http 通信地址 -->
 <property>
 <name>dfs.namenode.http-address.mycluster.nn1</name>
 <value>hadoop100:9870</value>
 </property>
 <property>
 <name>dfs.namenode.http-address.mycluster.nn2</name>
 <value>hadoop101:9870</value>
 </property>
 <property>
 <name>dfs.namenode.http-address.mycluster.nn3</name>
 <value>hadoop102:9870</value>
 </property>
<!-- 指定 NameNode 元数据在 JournalNode 上的存放位置 -->
 <property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop100:8485;hadoop101:8485;hadoop102:8485/myclus
ter</value>
 </property>
<!-- 访问代理类:client 用于确定哪个 NameNode 为 Active -->
 <property>
 <name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyP
rovider</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/atguigu/.ssh/id_rsa</value>
 </property>
</configuration>

在分发这两个配置到其他服务器

启动HDFS-HA

记得将环境变量改变到当前ha目录

然后source环境变量

再去每个节点上启动journalnode

hdfs --daemon start journalnode

对nn1进行初始化并且启动

hdfs namenode -format
hdfs --daemon start namenode

在nn2和nn3同步并启动

hdfs namenode -bootstrapStandby
hdfs --daemon start namenode

我们去到web看一下

发现三个NameNode均处于standby

所以我们选择nn1转为active并且查看nn1状态是否为active

hdfs haadmin -transitionToActive nn1
hdfs haadmin -getServiceState nn

3 HDFS-HA 自动模式

1.HDFS-HA 自动故障转移工作机制

? 自动故障转移为 HDFS 部署增加了两个新组件:ZooKeeper 和 ZKFailoverController (ZKFC)进程,如图所示。ZooKeeper 是维护少量协调数据,通知客户端这些数据的改变 和监视客户端故障的高可用服务
在这里插入图片描述

2. HDFS-HA 自动故障转移的集群规划

hadoop100hadoop101hadoop102
NameNodeNameNodeNameNode
JournalNodeJournalNodeJournalNode
DataNodeDataNodeDataNode
ZookeeperZookeeperZookeeper
ZKFCZKFCZKFC

3 配置 HDFS-HA 自动故障转移

在 hdfs-site.xml 中增加

<!-- 启用 nn 故障自动转移 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>

在 core-site.xml 文件中增加

<!-- 指定 zkfc 要连接的 zkServer 地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop100:2181,hadoop101:2181,hadoop102:2181</value>
</property>

分发配置文件

停止HDFS服务

stop start-dfs.sh

启动 Zookeeper 集群

zkServer.sh start

启动 Zookeeper 以后,然后再初始化 HA 在 Zookeeper 中状态

hdfs zkfc -formatZK

在启动HDFS服务

start-dfs.sh

我们可以去 zkCli.sh 客户端查看 Namenode 选举锁节点内容

get -s /hadoop-ha/mycluster/ActiveStandbyElectorLock

我们可以验证一下kill掉一个NameNode其他节点的状态

kill -9 namenode 的进程 id

如果发现kill掉了之后其他NameNode仍然是standby,那么在hdfs-site可以做一下设置

<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence
shell(/bin/true)
</value>
</property>
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:12:48  更:2022-08-19 19:16:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 19:21:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码