当前位置:   article > 正文

Hadoop生态圈-高可用集群_hadoop高可用集群是如何实现自动故障转移的?

hadoop高可用集群是如何实现自动故障转移的?

Hadoop生态圈-高可用集群


Hadoop生态圈即全部组件 

高可用集群自动故障转移工作 机制

1) 故障检测:

故障检测:集群中的每个 NameNode 在 ZooKeeper 中维护了一个持久会话,如果

机器崩溃,ZooKeeper 中的会话将终止,ZooKeeper 通知另一个 NameNode 需要触发故障转

移。

2)现役 NameNode 选择:

现役 NameNode 选择:ZooKeeper 提供了一个简单的机制用于唯一的选择一个节点

为 active 状态。如果目前现役 NameNode 崩溃,另一个节点可能从 ZooKeeper 获得特殊的

排外锁以表明它应该成为现役 NameNode。

ZKFC 是自动故障转移中的另一个新组件,是 ZooKeeper 的客户端,也监视和管理

NameNode 的状态。每个运行 NameNode 的主机也运行了一个 ZKFC 进程,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. 修改 IP

2. 修改主机名及主机名和 IP 地址的映射

3. 关闭防火墙

4. ssh 免密登录

5. 安装 JDK,配置环境变量等

规划

表 3-1

master1

slave1

slave2

NameNodeNameNode

JournalNode

JournalNode

JournalNode

DataNode

DataNode

DataNode

ZK

ZK

ZK

ResourceManager

NodeManager

NodeManager

NodeManager

查看/修改hadoop配置文件:

  1. [hadoop@master1 module]$ vim /opt/module/hadoop-2.6.0/etc/hadoop/core-site.xml
  2. [hadoop@master1 module]$ vim /opt/module/hadoop-2.6.0/etc/hadoop/hdfs-site.xml
  3. [hadoop@master1 module]$ vim /opt/module/hadoop-2.6.0/etc/hadoop/yarn-site.xml
  4. [hadoop@master1 module]$ vim /opt/module/hadoop-2.6.0/etc/hadoop/mapred-site.xml

配置HDFS-HA集群

1. 官方地址:

http://hadoop.apache.org/

2. 创建 ha 文件夹

[hadoop@master1 module]$ mkdir ha 

3. 将的 hadoop-2.6.0 拷贝到/ha/ 目录下

[hadoop@master1 module]$ cp -r hadoop-2.6.0/ ha/

4. 重新配置hdfs-site.xml

[hadoop@master1 module]$ vim ha/hadoop-2.6.0/etc/hadoop/hdfs-site.xml

全替换为如下内容:

指定了两个NameNode,和它的rpa的通信地址,以及它的HTTP 50070 web访问地址

  1. <configuration>
  2. <property>
  3. <name>dfs.replication</name>
  4. <value>1</value>
  5. <description>副本</description>
  6. </property>
  7. <property>
  8. <name> dfs.nameservices </name>
  9. <value> 总服务 </value>
  10. </property>
  11. <property>
  12. <name> dfs.ha.namenodes.mycluster </name>
  13. <value> nn1,nn2 </value>
  14. <description>NameNode</description>
  15. </property>
  16. <property>
  17. <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  18. <value>master1:8020</value>
  19. </property>
  20. <property>
  21. <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  22. <value>slave1:8020</value>
  23. </property>
  24. <property>
  25. <name>dfs.namenode.http-address.mycluster.nn1</name>
  26. <value>master1:50070</value>
  27. </property>
  28. <property>
  29. <name>dfs.namenode.http-address.mycluster.nn2</name>
  30. <value>slave1:50070</value>
  31. </property>
  32. <property>
  33. <name>dfs.namenode.shared.edits.dir</name>
  34. <value>协议://master1:8485;slave1:8485;slave2:8485/总服务名字</value>
  35. <description>协议</description>
  36. </property>
  37. <property>
  38. <name>dfs.client.failover.proxy.provider.mycluster</name>
  39. <value>代理类/value>
  40. </property>
  41. <property>
  42. <name>dfs.permissions.enable</name>
  43. <value>false</value>
  44. </property>
  45. <property>
  46. <name>dfs.ha.fencing.methods</name>
  47. <value>隔离机制</value>
  48. </property>
  49. <property>
  50. <name>dfs.ha.fencing.ssh.private-key-files</name>
  51. <value>ssh</value>
  52. <description>ssh</description>
  53. </property>
  54. </configuration>

5、配置文件系统core-site.xml

[hadoop@master1 module]$ vim ha/hadoop-2.6.0/etc/hadoop/core-site.xml

全替换为如下内容:

  1. <configuration>
  2. <property>
  3. <name>fs.defaultFS</name>
  4. <value>hdfs://前面的总服务名字</value>
  5. <description></description>
  6. </property>
  7. <!-- 指定节点上本地的hadoop运行时产生的临时文件存储目录 -->
  8. <property>
  9. <name>hadoop.tmp.dir</name>
  10. <value>节点上本地的hadoop临时文件夹(前面自己自定义的目录)</value>
  11. </property>
  12. <property>
  13. <name>dfs.journalnode.edits.dir</name>
  14. <value>自定义jn的data数据存储目录</value>
  15. <description></description>
  16. </property>
  17. </configuration>

5、删除data/和logs/目录

因为是新的集群、需要重新格式化NameNode

[hadoop@master1 hadoop-2.6.0]$ rm -rf data/ logs/

6、分发 ha/ 到从机

[hadoop@master1 module]$ xsync ha/

启动 HDFS-HA 高可用集群

1. 在各个 JournalNode 节点上,输入以下命令启动 journalnode 服务

  1. [hadoop@master1 hadoop-2.6.0]$ sbin/hadoop-daemon.sh start journalnode
  2. [hadoop@master1 hadoop-2.6.0]$ sbin/hadoop-daemon.sh start journalnode
  3. [hadoop@master1 hadoop-2.6.0]$ sbin/hadoop-daemon.sh start journalnode
  4. [hadoop@master1 hadoop-2.6.0]$ jps
  5. 8176 Jps
  6. 8129 JournalNode

image.png

2. 查看此时目录下新生成的 logs/

都是 journalnode 启动后的日志文件

  1. [hadoop@master1 hadoop-2.6.0]$ ll logs
  2. total 44
  3. -rw-rw-r-- 1 hadoop hadoop 33103 Nov 26 01:40 hadoop-hadoop-journalnode-master1.log
  4. -rw-rw-r-- 1 hadoop hadoop 716 Nov 26 01:40 hadoop-hadoop-journalnode-master1.out
  5. -rw-rw-r-- 1 hadoop hadoop 2805 Nov 26 01:38 hadoop-hadoop-journalnode-master1.out.1
  6. -rw-rw-r-- 1 hadoop hadoop 0 Nov 26 01:38 SecurityAuth-hadoop.audit

3. 在[nn1]上,对其进行格式化,并启动

  1. [hadoop@master1 hadoop-2.6.0]$ bin/hdfs namenode -format
  2. [hadoop@master1 hadoop-2.6.0]$ sbin/hadoop-daemon.sh start namenode
  3. [hadoop@master1 hadoop-2.6.0]$ jps
  4. 6305 JournalNode
  5. 6625 Jps
  6. 6547 NameNode

4. 在[nn2]上,同步 nn1 的元数据信息

[hadoop@slave1 hadoop-2.6.0]$ bin/hdfs namenode -bootstrapStandby

出现如下反馈信息,则OK!

image.png

5. 启动[nn2]的NameNode

  1. [hadoop@slave1 hadoop-2.6.0]$ sbin/hadoop-daemon.sh start namenode
  2. [hadoop@slave1 hadoop-2.6.0]$ jps
  3. 8900 Jps
  4. 8550 JournalNode
  5. 8830 NameNode

6. 查看 web 页面显示,如图所示

访问web网页查看:

master1(nn1):http://192.168.65.161:50070/

slave1(nn2):http://192.168.65.162:50070/

image.png

image.png

7. 在[nn1]上,启动所有 datanode

关系:start 调 hadoop-daemons的群起脚本 ,daemons去调用遍历slaves.sh 调用它们 daemon 命令。

群起(daemons)、单启(daemon)都可以

[hadoop@master1 hadoop-2.6.0]$ sbin/hadoop-daemons.sh start datanode

image.png

datanode虽然启动了,但是现在只能看,不能用

image.png

8. 将[nn1]切换为 Active

[hadoop@master1 hadoop-2.6.0]$ bin/hdfs haadmin -transitionToActive nn1

激活了nn1

image.png

9. 查看是否 Active

[hadoop@master1 hadoop-2.6.0]$ bin/hdfs haadmin -getServiceState nn1

image.png

配置 HDFS-HA 自动故障转移机制

1. 具体配置

  • (1)在 hdfs-site.xml 中增加
  1. <property>
  2. <name>dfs.ha.automatic-failover.enabled</name>
  3. <value>true</value>
  4. </property>
  • (2)在 core-site.xml 文件中增加
  1. <property>
  2. <name>ha.zookeeper.quorum</name>
  3. <value>master1:2181,slave1:2181,slave2:2181</value>
  4. </property>
  • (3)分发
[hadoop@master1 hadoop-2.6.0]$ xsync etc/hadoop

2. 启动

  • (1)关闭所有 HDFS 服务:
[hadoop@master1 hadoop-2.6.0]$ sbin/stop-dfs.sh

  • (2)群起 Zookeeper 集群:
[hadoop@master1 hadoop-2.6.0]$ zk.sh start
  • (3)初始化 HA 在 Zookeeper 中状态:
[hadoop@master1 hadoop-2.6.0]$ bin/hdfs zkfc -formatZK

此时在Zk客户端 可以查看到初始化了什么内容(创建了HA节点)

  1. [hadoop@master1 zookeeper-3.4.5]$ bin/zkCli.sh
  2. .........
  3. [zk: localhost:2181(CONNECTED) 2] ls /
  4. [cluster, ...., zookeeper, hadoop-ha, ....,hbase]
  5. [zk: localhost:2181(CONNECTED) 3] ls /hadoop-ha
  6. [mycluster]
  7. [zk: localhost:2181(CONNECTED) 4] ls /hadoop-ha/mycluster
  8. []

  • (4)启动 HDFS 服务:
[hadoop@master1 hadoop-2.6.0]$ sbin/start-dfs.sh

查看启动的进程

image.png

  • (5)在各个 NameNode 节点上启动 DFSZK Failover Controller,先在哪台机器启动,哪

个机器的 NameNode 就是 Active NameNode

[hadoop@master1 hadoop-2.6.0]$ sbin/hadoop-daemin.sh start zkfc

3. 验证

  • (1)将 Active NameNode 进程 kill
  1. kill -9 namenode 的进程 id
  2. [hadoop@master1 hadoop-2.6.0]$ jps
  3. 10535 Jps
  4. 10008 DataNode
  5. 10201 JournalNode
  6. 9514 QuorumPeerMain
  7. 10381 DFSZKFailoverController
  8. 9902 NameNode
  9. [hadoop@master1 hadoop-2.6.0]$ kill -9 9902

PS:此时web端可以看到,master1的页面已经死掉了。而slave1的页面 standby 由变成了 active

image.png

image.png

此时在启动master1的nodename,那么他就是 standby 因为 slacve1 的锁没掉

hadoop@master1 hadoop-2.6.0]$ sbin/hadoop-daemon.sh start namenode

  • (2)将 Active NameNode 机器断开网络(没测试)
service network stop
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/428059
推荐阅读
相关标签
  

闽ICP备14008679号