在學習過程當中,配置完HA進行驗證:手動kill主namennode進程,可是備用namenode始終是standby狀態,一直找不到緣由,非常鬱悶,還覺得是hadoop版本跟老師將的不同,進而須要不一樣的配置致使的。
今天,終於找到問題緣由了。記錄以下,但願對遇到此問題的朋友有所幫助。
解決辦法:
在備用namenode上查看 hadoop-grid-zkfc-server102.log日誌,發現異常以下
2016-10-16 00:09:32,465 WARN org.apache.hadoop.ha.SshFenceByTcpPort: PATH=$PATH:/sbin:/usr/sbin fuser -v -k -n tcp 53310 via ssh: bash: fuser: command not found
2016-10-16 00:09:32,465 WARN org.apache.hadoop.ha.NodeFencer: Fencing method org.apache.hadoop.ha.SshFenceByTcpPort(null) was unsuccessful.
2016-10-16 00:09:32,465 WARN org.apache.hadoop.ha.ActiveStandbyElector: Exception handling the winning of election
2016-10-16 00:09:34,552 WARN org.apache.hadoop.ha.FailoverController: Unable to gracefully make NameNode at server101.hadoop.com/192.168.1.101:53310 standby (unable to connect)
2016-10-16 00:09:34,592 WARN org.apache.hadoop.ha.SshFenceByTcpPort.jsch: Permanently added 'server101.hadoop.com' (RSA) to the list of known hosts.
由上面的警告可知:fuser: command not found,在作主備切換時執行fuser命令失敗了。
查看hdfs-site.xml配置文件,
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
hdfs-site.xml經過參數dfs.ha.fencing.methods來實現,在出現故障時經過哪一種方式登陸到另外一個namenode上進行接管工做。
====》》》dfs.ha.fencing.methods參數解釋
系統在任什麼時候候只有一個namenode節點處於active狀態。
在主備切換的時候,standby namenode會變成active狀態,原來的active namenode就不能再處於active狀態了,
不然兩個namenode同時處於active狀態會有問題。
因此在failover的時候要設置防止2個namenode都處於active狀態的方法,能夠是Java類或者腳本。
fencing的方法目前有兩種,sshfence和shell
sshfence方法是指經過ssh登錄到active namenode節點殺掉namenode進程,因此你須要設置ssh無密碼登錄,還要保證有殺掉namenode進程的權限。
如下是具體解決步驟:
# 查找fuser
[root@server101 ~]# yum provides "*/fuser"
Loaded plugins: fastestmirror
Determining fastest mirrors
* epel: mirrors.tuna.tsinghua.edu.cn
psmisc-22.20-9.el7.x86_64 : Utilities for managing processes on your system
Repo : base
Matched from:
Filename : /usr/sbin/fuser
# 在namenode主、備節點上安裝fuser(datanode節點不用安裝)
[root@server101 ~]# yum -y install psmisc
[root@server102 ~]# yum -y install psmisc
安裝完成後,再次測試,namenode自動切換成功!!!html