RegionServer异常超时检测

来源:互联网 发布:大学生网络党校官网 编辑:程序博客网 时间:2024/05/11 17:19

现象

将主机网线拔掉后,RegionServer过一段时间会shutdown掉,RegionServer的异常超时检测机制是由哪个参数控制的呢?

Regionsever异常shutdown日志:

2017-08-03 21:17:42,762 WARN  [main-SendThread(OCSCloud07:9501)]zookeeper.ClientCnxn: Session 0x25ce22897746d12 for serverOCSCloud07/134.32.62.7:9501, unexpecte     d error, closing socket connection and attempting reconnect

 java.io.IOException: No route to host

        at sun.nio.ch.FileDispatcherImpl.read0(Native Method)

        at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)

        at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)

        at sun.nio.ch.IOUtil.read(IOUtil.java:192)

        at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:384)

        atorg.apache.zookeeper.ClientCnxnSocketNIO.doIO(ClientCnxnSocketNIO.java:68)

        at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:355)

        at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1081)

 2017-08-03 21:17:43,122 INFO  [LeaseRenewer:e3base@drmcluster]retry.RetryInvocationHandler: Exception while invoking renewLease of classClientNamenodeProtocolTr      anslatorPBover OCSCloud04/134.32.62.4:8020. Trying to fail over immediately.

 java.net.NoRouteToHostException: No Route toHost from  OCSCloud11/134.32.62.11 toOCSCloud04:8020 failed on socket timeout exception: java.net.NoRouteToHostExcep      tion: No route to host; For more detailssee: http://wiki.apache.org/hadoop/NoRouteToHost

        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

问题解决

在hbase中设置超时时间是没用的,必须修改zookeeper自身的maxSessionTimeout为1200000,才能真正起到加长zookeeper的session超时时间的作用

        

         在RegionServer启动时,会在Zookeeper集群中创建自己的ZNode临时节点并获得该节点的独占锁,这个节点位于Zookeeper集群中的/hbase/rs目录下。

 

  RegionServer会通过Socket连接向Zookeeper集群发起Session会话,会话建立后在Zookeeper集群中创建属于自己的临时节点ZNode。这个节点的状态是由Zookeeper集群依据Session的状态来维护的。

 

  RegionServer作为客户端,向Zookeeper集群的Server端发起Session会话请求。Session建立后,会以唯一的SessionID作为标示。Client会定期向Server端发送Ping消息来表达该Session的存活状态;而Server端收到Ping消息时会更新当前Session的超时时间。如此,对于Client而言,只要Ping信息可达则表明该Session激活;对于Server而言,只要Session未超时则表明该Session激活。

 

  在Server端,Zookeeper会启动专门的SessionTrackerImpl线程来处理Session的相关状态迁移问题,该线程每隔tickTime(Zookeeper配置文件中指定,默认为2 s)时间遍历一次Session列表,如果超时则立即关闭此Session,同时删除与该Session关联的临时节点,并将该事件通知给注册了该节点事件的组件。在HBase集群中,这就意味着如果RegionServer崩溃,则Zookeeper需要在Session超时后才能通知Master,后者才能启动故障恢复。

 

  而Session的超时时间是这样确定的:HBase默认的Timeout为180 s,在创建Session时会将该参数传递给Server端。最终协商确定的Session的超时时间由Zookeeper的配置参数决定,处于Zookeeper集群minSessionTimeout和maxSessionTimeout之间。默认的minSessionTimeout=2×tickTime(默认2 s)=4 s,maxSessionTimeout=20×tickTime=40 s。不管Client传递的Timeout多大,最终协商确定的Session的Timeout时间都在4~40 s之间,实现代码如下。如果一切按照默认配置,则Session的Timeout为40 s。

 

  int sessionTimeout=connReq.getTimeOut();

  int minSessionTimeout=getMinSessionTimeout();

  if(sessionTimeout<minSessionTimeout){

  sessionTimeout=minSessionTimeout;

  }

  int maxSessionTimeout=getMaxSessionTimeout();

  if(sessionTimeout>maxSessionTimeout){

  sessionTimeout=maxSessionTimeout;

  }

  cnxn.setSessionTimeout(sessionTimeout);

  经以上分析,可以得出以下结论:Session存活意味着RegionServer存活;Session超时意味着RegionServer启动时创建的ZNode节点被删除,也就表明该RegionServer异常

 

参考资料

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 4岁宝宝不爱写字怎么办 孩子调皮老师不让上学了怎么办 小学生写字握笔握出剪子来怎么办 儿子6岁不会写字怎么办 宝宝在幼儿园不说话怎么办 孩子上幼儿园不说话怎么办 幼儿写数字不写怎么办 小孩不吃饭怎么办 十个月 十个月小孩不爱吃饭怎么办 十个月的小孩不吃饭怎么办 家长要调幼儿园监控怎么办 自己带孩子婆婆生气怎么办 婆婆老是觉得我奶水不够怎么办 1岁小儿特别懒怎么办 17的孩子很懒怎么办 上大班的孩子不愿写字怎么办 快上中班的小朋友不爱学习怎么办 小学生两边肩膀不平应该怎么办 写字右肩膀疼是怎么办 开车久了肩膀疼怎么办 3岁宝宝撕书怎么办 孩子上幼儿园不爱写字怎么办 一年级小孩不爱做作业怎么办 小孩不愿多做作业怎么办 小孩一年级不自觉做作业怎么办 小孩会读不会写怎么办 好多字都不会写怎么办 写作业怎么办才能写快 五周宝宝爱玩不写字怎么办 爱玩手机的小孩怎么办? 一年级学生记不住生字怎么办 一年级小孩记不住生字怎么办 配镜度数高了怎么办 宝宝两岁半不肯坐马桶拉臭臭怎么办 儿子字写得不好 怎么办 小孩不听话不爱读书和写字怎么办 两岁宝宝不愿意穿衣服怎么办 做题粗心不认真怎么办 5岁宝宝不会写字怎么办 四岁宝宝不会写字怎么办 4岁宝宝不写字怎么办