Таймаут повторной передачи TCP
Каждая пара узлов Elasticsearch общается с помощью нескольких TCP-соединений, которые остаются открытыми до тех пор, пока один из узлов не завершит работу или общение между узлами не прервётся из-за сбоя в базовой инфраструктуре.
TCP обеспечивает надёжное общение по иногда ненадежным сетям, скрывая временные сбои сети от взаимодействующих приложений. Ваша операционная система будет повторно передавать любые потерянные сообщения несколько раз, прежде чем сообщить отправителю о любой проблеме. Elasticsearch должен ожидать во время повторных передач и может реагировать только после того, как операционная система решит отказаться от попыток. Пользователи также должны ожидать завершения последовательности повторных передач.
Большинство дистрибутивов Linux по умолчанию повторно передают любые потерянные пакеты 15 раз. Повторные передачи происходят экспоненциально, поэтому для завершения этих 15 повторных передач требуется более 900 секунд. Это означает, что Linux требуется много минут для обнаружения разрыва сети или отказавшего узла с помощью этого метода. Windows по умолчанию выполняет только 5 повторных передач, что соответствует таймауту примерно 13 секунд.
Значение по умолчанию для Linux позволяет общаться в сетях, которые могут испытывать очень длительные периоды потери пакетов, но это значение избыточно и даже вредно в высококачественных сетях, используемых в большинстве установок Elasticsearch. Когда кластер обнаруживает отказ узла, он реагирует, перераспределяя потерянные фрагменты, перенаправляя запросы и, возможно, выбирая новый мастер-узел. Высокодоступные кластеры должны быть способны быстро обнаруживать отказы узлов, чего можно добиться, уменьшив разрешённое количество повторных передач. Соединения с удаленными кластерами также должны предпочесть значительно быстрее обнаруживать отказы, чем позволяет значение по умолчанию Linux. Пользователям Linux следует уменьшить максимальное количество повторных передач TCP.
Вы можете уменьшить максимальное число повторных передач TCP до 5, выполнив следующую команду в качестве root. Пять повторных передач соответствует таймауту примерно 13 секунд.
sysctl -w net.ipv4.tcp_retries2=5
Чтобы установить это значение постоянно, обновите настройку net.ipv4.tcp_retries2 в /etc/sysctl.conf. Чтобы проверить после перезагрузки, выполните sysctl net.ipv4.tcp_retries2.
Это значение применяется ко всем TCP-соединениям и повлияет на надёжность коммуникации с системами, отличными от кластеров Elasticsearch. Если ваши кластеры общаются с внешними системами по сети низкого качества, вам может потребоваться выбрать более высокое значение для net.ipv4.tcp_retries2. По этой причине Elasticsearch не настраивает это значение автоматически.
Связанные настройки
Elasticsearch также реализует собственные внутренние проверки состояния с таймаутами, которые намного короче, чем таймаут повторной передачи по умолчанию в Linux. Поскольку это проверки состояния на уровне приложения, их таймауты должны учитывать такие эффекты на уровне приложения, как паузы сбора мусора. Не следует уменьшать никакие таймауты, связанные с проверками состояния на уровне приложения.
Вы также должны убедиться, что ваша сетевая инфраструктура не мешает долгоживущим соединениям между узлами, даже если эти соединения кажутся неактивными. Устройства, которые разрывают соединения по достижении определённого возраста, являются частым источником проблем для кластеров Elasticsearch и не должны использоваться.
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/system-config-tcpretries.html