Jboss org.jgroups.protocols.pbcast.NAKACK问题

时间:2016-03-09 12:11:51

标签: jboss jgroups mod-cluster

[org.jgroups.protocols.pbcast.NAKACK](requester =,local_addr =)在以下的重传表中找不到message :: port:port:  (size = xxxx,missing = x,最高稳定性= xxxxx)]

1 个答案:

答案 0 :(得分:0)

NAKACK(或其较新的表亲NAKACK2)向群集提供可靠的消息传输。为此,每个消息都获得一个序列号(seqno),接收者以seqno顺序将消息传递给应用程序。

每个集群成员都有一个包含所有其他成员及其消息的表(概念上是一个列表)。当成员P发送消息P21,P22和P23时,接收者R首先查找R的消息列表,然后将P21-P23添加到列表中。

但是,在您的情况下,找不到R的列表。这意味着R不再是集群成员(

例如,如果我们有群集{P,Q,R,T},并且成员R离开或被排除因为它被怀疑(例如我们在一段时间内没有收到心跳),那么消息P21-23将被任何接收方丢弃。

这是因为JGroups只允许集群成员发送和接收消息。

如何排除会员?

这可能是通过故障检测协议(例如FD_ALLFD)来完成的。

另一种可能性是您的线程池被阻塞,故障检测心跳消息被丢弃,导致错误的怀疑。

此外,长时间GC暂停可能导致此问题。

修正:

  • 增加FD_ALLFD的超时时间。超时应该比最长的GC周期长。请注意,检测挂起的成员现在需要更长的时间。
  • 调整线程池的大小,例如确保最大线程数很大并且队列被禁用。

请注意,可以发生错误怀疑,但MERGE3稍后应该重新提出拆分群集。