七、检验集群✨
7.1 jps检查
使用jpsall脚本分别查看四个节点上的jps进程信息,是否和集群规划相符,集群规划图再放一遍:
jpsall
和集群规划完全一致!
7.2 网页检查
分别访问NameNode1和NameNode2的两个Web页面,网址是http://hadoop102:9870,http://hadoop103:9870,结果如下:
网站访问中hadoop102的NameNode是active状态,hadoop103中的NameNode是standby状态。
7.3 自动故障转移检查
使用如下命令kill掉hadoop102上的NameNode进程:
这里,我们遇到了将NameNode-1的进程kill掉之后,另外一个NameNode没有变成active状态的问题,也就是说并没有实现自动故障转转移!
让我们一起来解决吧!
7.4 解决NameNode无法自动故障转移问题
这里引入一个 “脑裂”
的概念。
active namenode工作不正常后,zkfc在zookeeper中写入一些数据,表明异常,这时standby namenode中的zkfc读到异常信息,并将standby节点置为active。
但是,如果之前的active namenode并没有真的死掉,出现了假死(死了一会儿后又正常了),这样,就有两台namenode同时工作了。这种现象称为 脑裂 。
这里提供两种解决方案:
- 法一:改变kill方式——安装psmisc插件
上述中,我们使用kill掉NameNode进程的方法是:
kill -9 进程号
但是这种方式不一定能够完全 kill 掉NameNode的状态,可能就会出现残余从而出现“脑裂”现象,所以我们采用 psmisc插件
的方式来彻底结束进程。
更加神奇的是,这个插件安装好了,并不需要我们手动使用,而是系统自己调用的!
在hadoop102、hadoop103上按照psmisc插件:
sudo yum install -y psmisc
- 感受psmisc插件的威力
这里,我们先手动将hadoop102的NameNode启动起来,它目前是standby状态:
hdfs --daemon start namenode
Kill掉Hadoop103的NameNode进程:
成功完成了NameNode的自动故障转移!
原理 :在备机准备上位的时候,它不管现在的主节点是不是真的挂机了,他都会使用远程登录技术ssh登录到主机上, 使用 killall namenode (这个killall就是psmisc插件的命令) 杀死它的namenode进程确保它真的结束了,有效的防止了出现“脑裂”的问题。
法二:修改hdfs-site.xml文件
ZFKC的机制中,HealthMonitor定期去检查namenode的健康状态,如果我们杀掉namenode的服务,该namenode及其端口都关闭了。
推测因为无法正常通信所以保守确定namenode是否真的失效的等等时间大大延长。
那么如何解决这个问题呢?
就是在hdfs-site.xml文件配置隔离机制的地方加上一行shell(/bin/true),改为:
<property> <name>dfs.ha.fencing.methods</name> <value> sshfence shell(/bin/true) </value> </property>
这里不再演示效果,大家可以自行尝试哦!
八、日后HA启动方式🐮
之后即可使用 myHA 脚本进行启停了!
九、结语🔑
以上就是本期要跟大家分享的全部内容了!
初心对于Hadoop HA的理解就是这些了,希望能帮助到大家!
如果你有更好的、更快速的方法,希望各位大佬不吝赐教哦。
十、投票调查🍉
你的Hadoop HA高可用搭建好了吗?
欢迎投票反馈哦!遇到任何问题,记得私信,给我留言~~
😍😍😍
最后,小伙伴们的点赞就是给初心最大的支持,能不能给初心来一个一键三连呢?谢谢支持。