描述下现象:
节点角色:
node1: Active NN
node2: Standby NN
node3: Observer NN
node4: Observer NN
测试过程:
客户端读数据,能够直接找到node3这个Observer NN去读,接着我们把node3的namenode给kill掉,理论上讲客户端读数据的请求应该会failover到node4这个Observer NN上,但是测试中,发现node4的NN的rpcQueueTimeOps激增,说明rpc请求确实被failover到node4上了,但是只是入队了,并没有处理请求,审计日志也没有任何信息(证明确实没处理读请求)。
因此我们需要弄清楚这个问题的原因,并解决它。
解决过程:
对node4上的Observer NN抓火焰图:
发现了requeueCall *** 作比较多。因此看下requeueCall方法什么时机被调用,搜到源码中,是在Server#Handler#run方法中调用,问题的关键就在于if条件里面的与 *** 作都是真,才会进入到if条件语句里执行requeue *** 作。在我的场景下,前两个条
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)