После проблем с сетью клиенту geode не удается подключиться к серверу и локатору
В нашей системе возникает странная проблема.
например, у нас есть кластер, состоящий из 2 узлов. Geode Locator работает на главном узле, и есть один удаленный узел, на котором работает клиент Geode. При возникновении проблем с сетью на клиенте (потеря пакета) в течение некоторого времени клиенту не удается подключиться к локатору (NoAvailableLocatorException). Странно то, что даже после того, как сеть приходит в нормальное состояние, клиент все равно не может подключиться к локатору с тем же исключением, даже после перезапуска клиента. После расследования мы обнаружили, что порт локатора застрял на SYN_RECV, поэтому, когда мы перезапускаем локатор, проблема, похоже, исчезла. Можете ли вы дать какую-либо подсказку, как мы можем решить эту проблему и почему порты сервера застряли в SYN_RECV, поскольку мы не хотим перезапускать кластер или узнавать локаторы и серверы и перезапускать каждый из них.
2 ответа
Единственное, что я могу думать об этом, возможно, может помочь, насколько это касается Geode, - это установить меньшее время ожидания чтения для локатора. Значение по умолчанию составляет 60000 миллисекунд.
-Dgemfire.TcpServer.READ_TIMEOUT = 10000
Кроме того, на основе Java мало что можно сделать с удаленными SYN ACK. Я предполагаю, что вы искали в Интернете и нашли много страниц, рассказывающих об этой проблеме.
Я не уверен, что вы подразумеваете под SYS_RECV. Это не то состояние, с которым я знаком. Вы имеете в виду SYN_RECV? Состояние SYN_RECV указывает, что запрос соединения получен, и он ожидает продолжения. Много ли таких или только одного и того же, соответствующего порту, для которого был настроен локатор? Дамп потока локатора поможет показать, что он задумал.
Локатор имеет один сокет сервера для обработки сервисов определения местоположения. Сокет сервера должен находиться в состоянии LISTEN на настроенном сокете локатора, ожидающем запросов на подключение. Эти соединения передаются в пул потоков, где данные запроса считываются из сокета, и запрос обрабатывается. Эти сокеты должны быть в УСТАНОВЛЕННОМ состоянии. Тот же поток отправит ответ обратно в тот же сокет. После того, как клиент прочитает ответ, соединение с локатором прерывается, чтобы сокеты не находились в состоянии TIME-WAIT.