当尝试在 Amazon 的 64 位 linux AMI 上运行的 Jgroups 3.1.0-FINAL 上在 EC2(大型实例)上设置 Infinispan 时,我们一直看到不一致的网络故障。一个空的缓存开始正常并且似乎可以工作一段时间,但是一旦缓存已满,一个新的服务器正在同步导致缓存锁定。
我们决定推出自己的缓存,但看到的行为大致相同。在同步期间交换了 10 兆字节,但它们没有被淹没。在应用程序级别有一个来回数据 - > ack 对话,但看起来有些消息永远不会到达远程。
在查看 UNCAST 跟踪记录时,我看到以下内容:
# my application starts a cache refresh operation
01:02:12.003 [Incoming-1,mprewCache,i-f6a9d986] DEBUG c.m.e.q.c.l.DistributedMapManager - i-f6a9d986: from i-d2e29fa2: search:REFRESH
01:02:12.003 [Incoming-1,mprewCache,i-f6a9d986] INFO c.m.e.q.c.l.DistributedMapRequest - starting REFRESH from i-d2e29fa2 for map search, map-size 62373
01:02:12.003 [Incoming-1,mprewCache,i-f6a9d986] DEBUG c.m.e.q.c.l.DistributedMapManager - i-f6a9d986: to i-d2e29fa2: search:PUT_MANY, 50 keyValues
# transmits a block of 50 values to the remote but this never seems to get there
01:02:12.004 [Incoming-1,mprewCache,i-f6a9d986] TRACE o.j.p.UNICAST - i-f6a9d986 --> DATA(i-d2e29fa2: #11, conn_id=10)
# acks another window
01:02:12.004 [Incoming-1,mprewCache,i-f6a9d986] TRACE o.j.p.UNICAST - i-f6a9d986 --> ACK(i-d2e29fa2: #4)
# these XMITs happen for over and over until 01:30:40
01:02:12.208 [Timer-2,mprewCache,i-f6a9d986] TRACE o.j.p.UNICAST - i-f6a9d986 --> XMIT(i-d2e29fa2: #6)
01:02:12.209 [Timer-2,mprewCache,i-f6a9d986] TRACE o.j.p.UNICAST - i-f6a9d986 --> XMIT(i-d2e29fa2: #7)
01:02:12.209 [Timer-2,mprewCache,i-f6a9d986] TRACE o.j.p.UNICAST - i-f6a9d986 --> XMIT(i-d2e29fa2: #8)
...
这是我们的Jgroups 堆栈。我们PING
在运行时将协议替换为我们自己的EC2_PING
版本,该版本使用 AWS 调用来查找其他集群成员候选者。这不是连接问题。
任何想法为什么某些数据包没有到达目的地?