首页 > Web开发 > 详细

zookeeper-network partition

时间:2016-03-01 02:10:00      阅读:637      评论:0      收藏:0      [点我收藏+]

env:

hbase,94.26

zookeeper,3.4.3

---------------

1.downed node

? this morning we found a regionserver(host-34) downed in our monitor.so we dived into the logs of hbase and found that in this host:

?

2016-02-29 00:50:36,799 INFO [regionserver60020-SendThread(host-04:2181)] ClientCnxn.java:1083 Client session timed out, have not heard from server in 60030ms for sessionid 0x4511b9

? ?that means during this period,the read timeout has been touched.

?

? this timeout is settled by this:

?

  readtimeout=negotiatedtimeout(client[18000 by default in hbase],server[60000,90000]) * 2/3 

? ?so it‘s set to 60 secs.(negotiatedtimeout=90 secs)

?

? and conn timeout:

?

conn timeout=negotiatedtimeout / host provider 

? ?we have five nodes of a quorum,so it‘s set to 90/5=18 secs.

?

?

? after a few retries,(note:the start time of this connection was at 00:49:36)

?

host-34,hbase:
2016-02-29 00:50:36,799 INFO [regionserver60020-SendThread(host-04:2181)] ClientCnxn.java:1083 Client session timed out, have not heard from server in 60030ms for sessionid 0x4511b9

duration==
2016-02-29 00:50:44,540 INFO [regionserver60020-SendThread(host-07:2181)] ClientCnxn.java:966 Opening socket connection to server host-07/192.168.100.117:2181. Will not attempt to a
uthenticate using SASL (Unable to locate a login configuration)
…
2016-02-29 00:51:02,559 INFO [regionserver60020-SendThread(host-07:2181)] ClientCnxn.java:1083 Client session timed out, have not heard from server in **18790ms** for sessionid 0x4511b9
3876c000b, closing socket connection and attempting reconnect

? ?(the period time 18 secs is computed by above connectedtimeout.)

?

?

? a network paritition was shown here:

?

2016-02-29 00:50:40,499 WARN [regionserver60020-SendThread(host-05:2181)] ClientCnxn.java:1089 Session 0x4511b93876c000b for server null, unexpected error, closing socket connection
 and attempting reconnect
java.net.NoRouteToHostException: No route to host
	at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
	at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567)
	at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:350)
	at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1068)

?

?

? so then we dived into the last zk‘s log from the last request from hbase SendThread:

?

host-04,zookeeper:
2016-02-29 00:51:25,764 [myid:2] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@213] - Accepted socket connection from /192.168.100.147:58100
2016-02-29 00:51:25,765 [myid:2] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:ZooKeeperServer@831] - Client attempting to renew session 0x4511b93876c000b at /192.168.100.147:5
8100
2016-02-29 00:51:25,765 [myid:2] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:Learner@107] - Revalidating client: 0x4511b93876c000b
2016-02-29 00:51:25,766 [myid:2] - INFO  [QuorumPeer[myid=2]/0:0:0:0:0:0:0:0:2181:ZooKeeperServer@597] - Invalid session 0x4511b93876c000b for client /192.168.100.147:58100, probabl
y expired
2016-02-29 00:51:25,766 [myid:2] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1000] - Closed socket connection for client /192.168.100.147:58100 which had session
nid 0x4511b93876c000b

? ?untill here,the time period is for :51:25-49:36 ~ 110 secs >> 90 secs(timeout set above),so this session timeout was settled to expired.

?

? that means this session should be timeouted at this timestamp:

?

session touch time + negotiatedtimeout = expired timestamp
 = 49:36 + 90 secs ~ 51:06

? ?for sure,we found that in this zookeeper one line at this timestamp was present in front of us:

?

?

host-05,zookeeper:
2016-02-29 00:51:08,000 [myid:3] - INFO  [SessionTracker:ZooKeeperServer@334] - Expiring session 0x4511b93876c000b, timeout of 90000ms exceeded

?

?

2.another node which reconnected successfully to zk during this timeout.

?

host-33,hbase:(so this hbase keep on running )
2016-02-29 00:50:55,864 INFO [regionserver60020-SendThread(host-03:2181)] ClientCnxn.java:1207 Session establishment complete on server host-03/192.168.100.113:2181, sessionid = 0x4
0x4511b93876c000b

? ?it‘s printed at 50:55 << 51:06,so it keeps on running with happy.

?

?

3.conclusion

a.set the connect timeout the :one / hostproviderTH for all reconnect to all nodes in this quorum

b.as of case a,so the whole connected timeout + readtimeout will longer than the negotiatedtimeout:

?

 read time-out =negotiaedtimeout * 2/ 3
 read timeout + (negotiatedtimeout / host provider ) * Nr > negotiatedtimeout
 Nr = retried times

?so in for one extreme cases:

?

? if all nodes in zk‘s quorum are disconnectable,that will cause double time of negotiaredtimeout.

c.so based on b,why set the this mechanism ?

? if zk switch this solution:(this means the whole read and connect timeout are equals to negotiatedtimeout)

connecttimeout= (negotiateedtimeout- readtimeout) /hostprovider

? ?ie.

----------negotiatedtimeout------------------|

------connecttieout-------| retry1|retry2....|

? ?if some cases similar to here,u will lost chance to know what‘s wrong with hbase/zk,instead of showing :

retry connecting but timeout ,retry connecting but timeout....than the rs was shutdowned forcely ,that is it.

?

?

ref:

zookeeper-negotiated session timeout

zookeeper-network partition

原文:http://leibnitz.iteye.com/blog/2279522

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!