• Hadoop HA 高可用集群详解


    在这里插入图片描述

    文章目录

    img

    一、HA概述

    HAHigh Available)即高可用(7*24小时不中断服务),实现高可用最关键的策略就是消除单点故障。 HA严格地来说应该分成各个组件的 HA机制, HDFSHAYARNHA

    Hadoop2.0之前,在 HDFS集群中 NameNode存在单点故障( SPOF)。 NameNode主要在以下两个方面影响 HDFS集群:

    1. NameNode机器发生意外,如宕机,集群将无法使用,直到管理员重启
    2. NameNode机器需要升级,包括软件、硬件升级,此时集群也将无法使用

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

    二、HDFS-HA工作机制

    通过双 NameNode消除单点故障

    2.1 HDFS-HA工作要点

    1. 元数据管理方式需要改变
      内存中各自保存一份元数据, Edit日志只有 Active状态的 NameNode节点才可以做写操作,两个 NameNode都可以读取 Edits。共享的 Edits放在一个共享存储中管理( qjournalNFS两个主流实现)
    2. 需要一个状态管理功能模块
      实现了一个 zkfailover常驻在每一个 NameNode所在的节点,每一个 zkfailover负责监控自己所在 NameNode节点,利用 ZooKeeper进行状态标识,当需要进行状态切换时,由 zkfailover来负责切换,切换时需要防止 brain split现象的发生。
    3. 必须保证两个 NameNode 之间能够 ssh 无密码登录
    4. 隔离( Fence ),即同一时刻仅仅有一个 NameNode 对外提供服务

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

    使用命令 hdfs haadmin failover手动进行故障转移,在该模式下,即使现役 NameNode已经失效,系统也不会自动从现役 NameNode转移到待机 NameNode,下面学习如何配置部署 HA自动进行故障转移。

    自动故障转移为 HDFS部署增加了两个新组件: ZooKeeperZKFailoverControllerZKFC)进程。

    如图所示: ZooKeeper是维护少量协调数据,通知客户端这些数据的改变和监视客户端故障的高可用服务。 HA的自动故障转移依赖于 ZooKeeper的以下功能:

    ①故障检测 :集群中的每个 NameNodeZooKeeper中维护了一个持久会话,如果机器崩溃, ZooKeeper中的会话将终止, ZooKeeper通知另一个 DataNode需要触发故障转移。

    ②现役 NameNode 选择ZooKeeper提供了一个简单的机制用于唯一的选择一个节点为 active状态。如果目前现役 NameNode崩溃,另一个节点可能从 ZooKeeper获得特殊的排外锁以表明它应该称为现役 NameNode

    ZKFC是自动故障转移的另一个新组件,是 ZooKeeper的客户端,也监视和管理 NameNode的状态。每个运行 NameNode的主机也运行一个 ZKFC进程, ZKFC负责:

    ①健康监测: ZKFC使用一个健康检查命令定期地 ping与之在相同主机的 NameNode,只要该 NameNode及时地回复健康状态, ZKFC认为该节点是健康的。如果该节点崩溃,冻结或进入不健康状态,健康监测器标识该节点为非健康的。

    ②ZooKeeper会话管理: 当本地 NameNode是健康的, ZKFC保持一个在 ZooKeeper中打开的会话。如果本地 NameNode处于 active状态, ZKFC也保持一个特殊的 znode锁,该锁使用了 ZooKeeper对短暂节点的支持,如果会话终止,锁节点将自动删除。

    ③基于ZooKeeper的选择: 如果本地 NameNode是健康的,且 ZKFC发现没有其它的节点当前持有 znode锁,它将为自己获取该锁。如果成功,则它已经赢得了选择,并负责运行故障转移进程以使它的本地 NameNodeActive。故障转移进程与前面描述的手动故障转移相似,首先如果必要保护之前的现役 NameNode,然后本地 NameNode转换为 Active状态。

    三、HDFS-HA集群配置

    3.1 环境基础

    ZooKeeper集群和完全分布运行模式 Hadoop集群的搭建。

    3.2 集群规划

    JournalNode:两个 NameNode为了数据同步,会通过一组称作 JournalNodes的独立进程进行相互通信。

    hadoop100hadoop101hadoop1042NameNodeNameNodeJournalNodeJournalNodeJournalNodeDataNodeDataNodeDataNodeZooKeeperZKZKResourceManagerResourceManagerSecondaryNameNodeNodeManagerNodeManagerNodeManager

    3.3 配置HDFS-HA集群

    ①拷贝之前的 Hadoop 文件到 HA 文件夹

    [root@hadoop100 hadoop-2.7.2]
    
    • 1

    ②配置 core-site.xml

    
    	fs.defaultFSname>
    	hdfs://myclustervalue>
    property>
    
    
    	hadoop.tmp.dirname>
    	/opt/module/HA/hadoop-2.7.2/data/tmpvalue>
    property>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    ③配置 hdfs-site.xml

    
    	dfs.nameservicesname>
    	myclustervalue>
    property>
    
    
    	dfs.ha.namenodes.myclustername>
    	nn1,nn2value>
    property>
    
    
    	dfs.namenode.rpc-address.mycluster.nn1name>
    	hadoop100:9000value>
    property>
    
    
    	dfs.namenode.rpc-address.mycluster.nn2name>
    	hadoop101:9000value>
    property>
    
    
    	dfs.namenode.http-address.mycluster.nn1name>
    	hadoop100:50070value>
    property>
    
    
    	dfs.namenode.http-address.mycluster.nn2name>
    	hadoop101:50070value>
    property>
    
    
    	dfs.namenode.shared.edits.dirname>
    qjournal://hadoop100:8485;hadoop101:8485;hadoop102:8485/myclustervalue>
    property>
    
    
    	dfs.ha.fencing.methodsname>
    	sshfencevalue>
    property>
    
    
    	dfs.ha.fencing.ssh.private-key-filesname>
    	/root/.ssh/id_rsavalue>
    property>
    
    
    	dfs.journalnode.edits.dirname>
    	/opt/module/HA/hadoop-2.7.2/data/jnvalue>
    property>
    
    
    	dfs.permissions.enablename>
    	falsevalue>
    property>
    
    
     		dfs.client.failover.proxy.provider.myclustername>
    org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvidervalue>
    property>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    ④分发HA

    [root@hadoop100 HA]
    
    • 1

    3.4 启动HDFS-HA集群

    ①在各个节点上启动 JournalNode 服务

    [root@hadoop100 hadoop-2.7.2]
    
    • 1

    ②在 nn1 上,对其进行格式化并启动

    [root@hadoop100 hadoop-2.7.2]
    [root@hadoop100 hadoop-2.7.2]
    
    • 1
    • 2

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

    [root@hadoop101 hadoop-2.7.2]
    
    • 1

    ④启动 nn2

    [root@hadoop101 hadoop-2.7.2]
    
    • 1

    ⑤将 nn1 切换为 Active

    [root@hadoop100 hadoop-2.7.2]
    
    • 1

    ⑥查看是否 Active

    [root@hadoop100 hadoop-2.7.2]
    
    • 1


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

    ①具体配置
    hdfs-site.xml

    
    	dfs.ha.automatic-failover.enabledname>
    	truevalue>
    property>
    
    • 1
    • 2
    • 3
    • 4

    core-site.xml

    
    	ha.zookeeper.quorumname>
    	hadoop102:2181,hadoop103:2181,hadoop104:2181value>
    property>
    
    • 1
    • 2
    • 3
    • 4

    ②关闭所有 HDFS 服务

    [root@hadoop100 hadoop-2.7.2]
    
    • 1

    ③启动 ZooKeeper 集群

    [root@hadoop100 hadoop-2.7.2]
    [root@hadoop100 hadoop-2.7.2]
    
    if (($
    then
        exit 1;
    fi
    for i in hadoop100 hadoop101 hadoop102
    do
        echo Starting zk in $i
        ssh $i "source /etc/profile && /opt/module/zookeeper-3.4.10/bin/zkServer.sh $1" > /dev/null
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    ④初始化 HAZookeeper 中状态

    [root@hadoop100 hadoop-2.7.2]
    
    • 1

    ⑤启动 HDFS 服务

    [root@hadoop100 hadoop-2.7.2]
    
    • 1

    ⑥验证:杀死 NameNode 进程

    [root@hadoop100 hadoop-2.7.2]
    
    • 1

    杀死 nn1后,此时 NamaNode已经切换为 nn2

    3.6 故障转移失败

    通过查看 zkfc的日志,可以发现没有 fuser命令,安装 fuser命令后重启 HDFS后即能完成故障转移

    四、YARN-HA配置

    4.1YARN-HA工作机制

    4.2配置YARN-HA集群

    规划集群

    hadoop100hadoop101hadoop1042NameNodeNameNodeJournalNodeJournalNodeJournalNodeDataNodeDataNodeDataNodeZooKeeperZKZKResourceManagerResourceManagerSecondaryNameNodeNodeManagerNodeManagerNodeManager

    具体配置:

    ①配置【 yarn-site.xml

    
    	yarn.nodemanager.aux-servicesname>
    	mapreduce_shufflevalue>
    property>
    
    
        yarn.resourcemanager.ha.enabledname>
        truevalue>
    property>
    
    
        yarn.resourcemanager.cluster-idname>
        cluster-yarn1value>
    property>
    
    
        yarn.resourcemanager.ha.rm-idsname>
        rm1,rm2value>
    property>
    
    
        yarn.resourcemanager.hostname.rm1name>
        hadoop100value>
    property>
    
    
        yarn.resourcemanager.hostname.rm2name>
        hadoop101value>
    property>
    
    
        yarn.resourcemanager.zk-addressname>
        hadoop100:2181,hadoop101:2181,hadoop102:2181value>
    property>
    
    
        yarn.resourcemanager.recovery.enabledname>
        truevalue>
    property>
    
    
        yarn.resourcemanager.store.classname>
    	org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStorevalue>
    property>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    ②同步更新其他节点的配置信息

    ③启动YARN

    [root@hadoop100 hadoop-2.7.2]
    [root@hadoop101 hadoop-2.7.2]
    [root@hadoop101 hadoop-2.7.2]
    active
    [root@hadoop101 hadoop-2.7.2]
    standby
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    【SpringBoot2】开发实用篇-配置高级
    【毕业设计】60-基于ZigBee无线智能消防\烟雾报警逃生系统设计(原理图工程、源代码、低重复率参考文档、实物图)
    【Apache Shiro】超详细笔记-1:功能、架构、集成Spring、认证
    Maven依赖解决
    SparkSQL常用聚合函数
    伦敦金区间操作容易碰到的问题
    NewStar CTF Week3Misc 4-5Web
    非华为机型如何体验HarmonyOS鸿蒙系统 刷写HarmonyOS鸿蒙GSI系统以及一些初步的bug修复
    java 数组转list
    【HTML】<input>限制字符输入
  • 原文地址:https://blog.csdn.net/m0_67392182/article/details/126364966