分享

hadoop 2.7.1 HA failover 时间很长

各位好,请教一个问题,这两天部署了一套Hadoop 2.7.1的HA集群,今天在测试failover时出了些问题。

测试使用三台服务器,各台服务器的服务分配如下:
node1zookeeper:QuorumPeerMain
hdfs:NameNode、DataNode、JournalNode、DFSZKFailoverController
yarn:ResourceManager、NodeManager
node2zookeeper:QuorumPeerMain
hdfs:NameNode、DataNode、JournalNode、DFSZKFailoverController

yarn:ResourceManager、NodeManager
node3zookeeper:QuorumPeerMain
hdfs:DataNode、JournalNode
yarn:NodeManager


一开始的测试还蛮顺利,当node1上的nn1处于active、node2上的nn2处于standby状态时,直接kill -9 nn1的pid,此时node2上的nn2可以顺利接管服务变为active状态。

但是重启集群,再次测试,尝试模拟掉电,停掉node1的网络(systemctl stop network)后,node2上的nn2却无法顺利接管,此时nn2的日志显示为:

2018-01-26 16:54:56,616 INFO org.apache.hadoop.hdfs.server.namenode.ha.StandbyCheckpointer: Starting standby checkpoint thread...
Checkpointing active NN at http://node1:50070
Serving checkpoints at http://node2:50070
2018-01-26 16:56:16,672 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: node1/192.168.10.187:8485. Already tried 0 time(s); maxRetries=45
2018-01-26 16:56:24,137 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Stopping services started for standby state
2018-01-26 16:56:24,138 WARN org.apache.hadoop.hdfs.server.namenode.ha.EditLogTailer: Edit log tailer interrupted
java.lang.InterruptedException: sleep interrupted
        at java.lang.Thread.sleep(Native Method)
        at org.apache.hadoop.hdfs.server.namenode.ha.EditLogTailer$EditLogTailerThread.doWork(EditLogTailer.java:347)
        at org.apache.hadoop.hdfs.server.namenode.ha.EditLogTailer$EditLogTailerThread.access$200(EditLogTailer.java:284)
        at org.apache.hadoop.hdfs.server.namenode.ha.EditLogTailer$EditLogTailerThread$1.run(EditLogTailer.java:301)
        at org.apache.hadoop.security.SecurityUtil.doAsLoginUserOrFatal(SecurityUtil.java:415)
        at org.apache.hadoop.hdfs.server.namenode.ha.EditLogTailer$EditLogTailerThread.run(EditLogTailer.java:297)
2018-01-26 16:56:36,693 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: node1/192.168.10.187:8485. Already tried 1 time(s); maxRetries=45
2018-01-26 16:56:56,715 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: node1/192.168.10.187:8485. Already tried 2 time(s); maxRetries=45
2018-01-26 16:57:16,733 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: node1/192.168.10.187:8485. Already tried 3 time(s); maxRetries=45


nn2一直在去尝试连接node1上的JournalNode....经过45次连接失败后,才继续failover过程,接管服务变为active状态,但是此时已经过去15分钟了.....

为了确认是不是JournalNode的问题,再次恢复集群,kill掉active namenode节点的JournalNode和NameNode服务,但是standby状态的Namenode可以成功failover.....再次模拟掉电却依然需要15分钟....请问这是什么原因呢?

已有(4)人评论

跳转到指定楼层
einhep 发表于 2018-1-26 17:47:04
楼主下面参数是如何配置的,例子如下:
<!-- 配置sshfence隔离机制超时时间-->  
        <property>  
               <name>dfs.ha.fencing.ssh.connect-timeout</name>  
               <value>30000</value>  
        </property>  

回复

使用道具 举报

blackmoon 发表于 2018-1-26 17:52:24
einhep 发表于 2018-1-26 17:47
楼主下面参数是如何配置的,例子如下:
  
         

超时时间我没有配置,使用的是默认的,不过我sshfence配置如下:

   <property>
     <name>dfs.ha.fencing.methods</name>
      <value>
        sshfence
        shell(/bin/true)
      </value>
   </property>
   <property>
      <name>dfs.ha.fencing.ssh.private-key-files</name>
      <value>/root/.ssh/id_rsa</value>
   </property>


因为是模拟掉电,所以不管超时时间是多少,ssh肯定是连接不到被“掉电”的服务器了,sshfence失败后执行/bin/true,后面zkfc就开始尝试把standby的节点转为active了,日志里面已经打出:

2018-01-26 16:56:24,117 INFO org.apache.hadoop.ha.NodeFencer: ====== Fencing successful by method org.apache.hadoop.ha.ShellCommandFencer(/bin/true) ======
2018-01-26 16:56:24,117 INFO org.apache.hadoop.ha.ActiveStandbyElector: Writing znode /hadoop-ha/myhdfs/ActiveBreadCrumb to indicate that the local node is the most recent active...
2018-01-26 16:56:24,130 INFO org.apache.hadoop.ha.ZKFailoverController: Trying to make NameNode at node2/192.168.10.188:9000 active...   



所以我感觉应该不是sshfence时有问题了
回复

使用道具 举报

einhep 发表于 2018-1-26 18:07:05
blackmoon 发表于 2018-1-26 17:52
超时时间我没有配置,使用的是默认的,不过我sshfence配置如下:

   

可以设置下,最起码能排除这个可能性
回复

使用道具 举报

blackmoon 发表于 2018-1-29 10:06:37
einhep 发表于 2018-1-26 18:07
可以设置下,最起码能排除这个可能性

我今天测试增加了这个参数,然后再次模拟宕机发现ok,成功failover,保险起见我又把参数去掉又测试了一次,也成功failover了......完全没改动其他任何参数,什么鬼......有什么其他的可能性吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条