文章目录
参考文档: https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html
1. 缺少命令
目前已知的是hdfs-site.xml
文件中的dfs.ha.fencing.methods
参数,值如果是sshfence
的话是需要这条命令的,这个参数共有两个值即sshfence
或者shell()
同时值得注意的是,如果值为sshfence
的话,他的主备切换过程是:
这个过程中产生了两个可能影响到主备切换的原因:
- A节点无法连接. 如果A节点无法连接那么B节点会一直尝试连接,提示
no route to hosts from xxx
.解决方案见下面问题1解决方案 - A节点可以连接,但是没有
fuser
命令,也就没法kill进程.解决方案为安装对应的包.
yum install -y psmisc
- A节点存活但是无法直接连接上去.这个现象是ssh免秘钥配置的问题,切换的时候B节点要可以不用密码直接连接到A节点上,可以直接在B节点到A节点之间做免秘钥或者在
hdfs-site.xml
文件中通过参数dfs.ha.fencing.ssh.private-key-files
指定密钥位置.
示例:
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_dsa</value>
</property>
问题1解决方案
sshfence如果是节点宕机是没办法切换主备的,所以改为shell方式.
修改hdfs-site.xml
文件,或者参考:Hadoop HA高可用部署
<property>
<name>dfs.ha.fencing.methods</name>
<value>shell(/bin/true)</value>
</property>
2. JournalNode 数量问题
JournalNode 为了防止出现脑裂现象,也采用了半数机制,即只有节点数量大于或者等于集群总节点数量的一半以上的节点时集群才能正常运行.
所以如果JournalNode 的节点数是两个也是没办法切换的,所以最少应该是三个节点(一个主节点两个备用节点).计算方法为(n - 1) / 2.