历经磨难而不衰,千锤百炼更坚强,战胜无数艰难险阻,创造一个又一个彪炳史册的人间奇迹。——人民日报
前言
为什么会提出高可用这个概念呢?
比如说我有一个对外提供服务的集群. 我对外提供服务的集群是不能随随便便就停止的. 提出高可用的原因是,在我们的hadoop中,比如像我们hdfs,yarn中,这两个都会存在一个问题. 这个问题就是单点故障问题. 所谓的单点故障就是说, 在我们的hdfs或者yarn中, 只要其中一个节点出现故障,其实你整个hdfs或者yarn就不能正常工作了. hdfs说的是namenode, yarn说的是ResourceManager. 为什么会这样呢? 因为现在对于我的hdfs来说,我有一个namenode ,下面有许多个DataNode. 这就构成整个集群. 其实在整个集群中他都是围绕着namenode来进行工作的. 所以你发现, 当namenode出现问题的时候. 即使你DataNode还好好的,但是我们的DataNode是不能直接对外提供服务的. 因为我整个集群的核心是namenode. 所以说只要namenode节点故障了. 其实对我整个集群来讲,他就故障了. 就不能对外提供服务了. yarn也是一样 . 我们yarn的NodeManager首先得先和我们的NodeManager进行交互. 如果我们NodeManager挂了. 整个集群就停止了对外服务了.
说明单点故障不是hdfs或者yarn上面有, 而是我整个分布式里面都有. 只要你整个分布式,整个集群,如果他都要围绕着某一个节点来干活,它都存在单点故障问题.
Redis也是有. 他有主从关系. 他是如何解决单点故障呢? 是主挂掉,从上位.
HA概述
什么是HDFS HA
1)所谓HA(High Availablity),即高可用(7*24小时不中断服务)。
2)实现高可用最关键的策略是消除单点故障。HA严格来说应该分成各个组件的HA机制:HDFS的HA和YARN的HA。
3)Hadoop2.0之前,在HDFS集群中NameNode存在单点故障SPOF(单点故障)(Single Points Of Failure)。
4)NameNode主要在以下两个方面影响HDFS集群
NameNode机器发生意外,如宕机,集群将无法使用,直到管理员重启
NameNode机器需要升级,包括软件、硬件升级,此时集群也将无法使用
HDFS HA功能通过配置Active/Standby两个NameNodes实现在集群中对NameNode的热备来解决上述问题。如果出现故障,如机器崩溃或机器需要升级维护,
这时可通过此种方式将NameNode很快的切换到另外一台机器。
说白了就是搞多台主机, 其中一台挂了能迅速切换到另一台. 不影响整个集群的使用.
HDFS-HA工作机制
通过双NameNode消除单点故障.
HDFS-HA手动故障转移(不好用)
如果一台主机挂了,咱们手动让另一台主机代替挂掉的主机工作,从未不影响集群工作.
手动进行故障转移,在该模式下,即使现役NameNode已经失效,系统也不会自动从现役NameNode转移到待机NameNode
配置HDFS-HA自动故障转移(用到了zookeeper)
如果一台主机挂了,zookeeper让另一台主机代替挂掉的主机工作,从未不影响集群工作. 提前是在zookeeper上配置好.
自动故障转移为HDFS部署增加了两个新组件:ZooKeeper和ZKFailoverController(ZKFC)这是hadoop的进程,不是zookeeper的进程。ZKFC可以简单理解为zookeeper的客户端. ZooKeeper是维护少量协调数据,通知客户端这些数据的改变和监视客户端故障的高可用服务。HA的自动故障转移依赖于ZooKeeper
注意:
ZKFailoverController(ZKFC)是一个新的组件,它是一个ZooKeeper客户端,它还监视和管理NameNode的状态。运行NameNode的每台机器也运行ZKFC,他们之间是一对一的关系。
1 | 1)故障检测:集群中的每个NameNode在ZooKeeper中维护了一个持久会话,如果机器崩溃,ZooKeeper中的会话将终止,ZooKeeper通知另一个NameNode需要触发故障转移。 |
ZKFC负责那些工作
1)健康监测:ZKFC使用一个健康检查命令定期地ping与之在相同主机的NameNode,只要该NameNode及时地回复健康状态,ZKFC认 为该节点是健康的。如果该节点崩溃,冻结或进入不健康状态,健康监测器标识该节点为非健康的。
2)ZooKeeper会话管理:当本地NameNode是健康的,ZKFC保持一个在ZooKeeper中打开的会话。如果本地NameNode处于active状 态,ZKFC也保持一个特殊的znode锁,该锁使用了ZooKeeper对短暂节点的支持,如果会话终止,锁节点将自动删除。
3)基于ZooKeeper的选择:如果本地NameNode是健康的,且ZKFC发现没有其它的节点当前持有znode锁,它将为自己获取该锁。如 果成功,则它已经赢得了选择,并负责运行故障转移进程以使它的本地NameNode为Active。故障转移进程与前面描述的手动故障转 移相似,首先如果必要保护之前的现役NameNode,然后本地NameNode转换为Active状态
1.具体配置
(1) 在hdfs-site.xml中增加
1 | <property> |
(2) 在core-site.xml文件中增加
1 | <property> |
- 启动
1 | [shangbaishuyao@Hadoop102 hadoop]$ cd ~ |
以上操作完成后还是起不起来,有问题,因为他ssh过去之后他不会去加载profile,就意味着他找不到java,因为我的java环境变量是在这里面配置的,所以我需要他ssh过去之后可以加载java文件:
1 | [shangbaishuyao@Hadoop102 ~]$ cd /opt/module/zookeeper-3.4.10/ |
解决办法是在隐藏文件中
1 | [shangbaishuyao@Hadoop102 zookeeper-3.4.10]$ cd ~ |
- 本文作者: xubatian
- 本文链接: http://xubatian.cn/hadoop组成模块之HDFS-HA高可用/
- 版权声明: 本博客所有文章除特别声明外均为原创,采用 CC BY 4.0 CN协议 许可协议。转载请注明出处:https://www.xubatian.cn/