网络问题后,geode客户端无法连接到服务器和定位器

时间:2017-04-08 19:12:45

标签: apache networking tcp gemfire geode

我们的系统中出现了一个奇怪的问题。

e.g。我们有一个由2个节点组成的集群。 Geode Locator在主节点上运行一个运行Geode客户端的远程节点。 当客户端出现网络问题(数据包丢失)一段时间后,客户端无法连接到Locator(NoAvailableLocatorException)。奇怪的是,即使在网络到达之后,即使在重新启动客户端之后,正常状态客户端仍然无法以相同的异常连接到定位器。经过调查,我们发现Locator的端口卡在SYN_RECV上,所以当我们重新启动Locator时,问题似乎就消失了。您能否提供任何线索我们如何解决此问题以及为什么服务器端口卡在SYN_RECV上,因为我们不想重新启动集群或查找定位器和服务器并重新启动它们。

2 个答案:

答案 0 :(得分:0)

我不确定你的意思是SYS_RECV。它不是我熟悉的状态。你的意思是SYN_RECV? SYN_RECV状态表示已收到连接请求,并且它正在等待后续操作。是否有很多这些或只有一个匹配定位器配置使用的端口?定位器的线程转储将有助于显示它的内容。

定位器有一个用于位置服务处理的服务器套接字。服务器套接字应在配置的定位器套接字上处于LISTEN状态,等待连接请求。这些连接被切换到一个线程池,在那里从套接字读取请求数据并处理请求。这些套接字应该处于ESTABLISHED状态。同一个线程将在同一个套接字上发回响应。客户端读取响应后,中止与定位器的连接,以避免套接字处于TIME-WAIT状态。

答案 1 :(得分:0)

就Geode而言,我能想到的唯一可能有用的是在定位器上设置较低的读取超时。默认值为60000毫秒。

-Dgemfire.TcpServer.READ_TIMEOUT = 10000

除此之外,基于Java的服务器几乎无法对丢弃的SYN ACK做些什么。我假设你已经在网上搜索过,发现很多网页都在谈论这个问题。