双Observer NameNode不能正常failover的问题

双Observer NameNode不能正常failover的问题,第1张

双Observer NameNode不能正常failover的问题

描述下现象:

节点角色:
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 *** 作。在我的场景下,前两个条

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5705643.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存