Назад | Перейти на главную страницу

Закрытие бездействующих сетевых подключений в Azure

Я запускаю проприетарное клиент-серверное приложение на одной виртуальной машине Windows Server 2k8R2 azure.

Клиент очень зависит от соединения с сервером. Однако, если я провожу пару минут без какой-либо активности, что-то на стороне Azure принудительно закрывает соединение (насколько я могу судить по журналам). Я не уверен, что это функция самой лазури или окон.

Если не реализовывать какую-то функцию поддержки активности (которую я не могу, потому что программное обеспечение является проприетарным), могу ли я как-нибудь продлить этот тайм-аут?

Я видел несколько ссылок на изменение времени простоя для ситуаций с балансировкой нагрузки, но это всего лишь один случай.

заранее спасибо!

Вы задействуете конструктивную функцию программного балансировщика нагрузки перед своими виртуальными машинами. По умолчанию он закрывает все незанятые соединения через 4 минуты, но вы можете настроить время ожидания в диапазоне от 4 до 30 минут:

Настраиваемый тайм-аут простоя для балансировщика нагрузки Azure

Однако хорошей практикой как со стороны инфраструктуры, так и со стороны приложения является наличие каких-либо сообщений поддержки активности. Это избавит вас от головной боли в будущем.

Отредактируйте, чтобы добавить, что теперь Azure поддерживает Сброс TCP при неактивных соединениях

Параметры TCP для виртуальных машин Azure

Виртуальные машины Azure взаимодействуют с общедоступным Интернетом с помощью NAT (преобразование сетевых адресов). Устройства NAT назначают общедоступный IP-адрес и порт виртуальной машине Azure, что позволяет этой виртуальной машине устанавливать сокет для связи с другими устройствами. Если пакеты перестают проходить через этот сокет по прошествии определенного времени, устройство NAT отменяет сопоставление, и сокет может использоваться другими виртуальными машинами.

Это обычное поведение NAT, которое может вызвать проблемы со связью в приложениях на основе TCP, которые ожидают, что сокет будет поддерживаться после периода ожидания. Для сеансов в состоянии установленного соединения необходимо учитывать два параметра тайм-аута простоя:

входящий через балансировщик нагрузки Azure. По умолчанию это время ожидания составляет 4 минуты, и его можно изменить до 30 минут. исходящий с использованием SNAT (Source NAT). Этот тайм-аут установлен на 4 минуты и не может быть изменен. Чтобы гарантировать, что соединения не будут потеряны сверх установленного лимита тайм-аута, вы должны убедиться, что ваше приложение поддерживает сеанс в активном состоянии, или вы можете настроить соответствующую операционную систему. Используемые настройки различны для систем Linux и Windows, как показано ниже.

Для Linux вам следует изменить указанные ниже переменные ядра. net.ipv4.tcp_keepalive_time = 120 net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_keepalive_probes = 8

Для Windows следует изменить значения реестра ниже. KeepAliveInterval = 30 KeepAliveTime = 120 TcpMaxDataRetransmissions = 8

Приведенные выше настройки гарантируют, что пакет проверки активности отправляется через 2 минуты (120 секунд) простоя, а затем отправляется каждые 30 секунд. И если 8 из этих пакетов терпят неудачу, сеанс сбрасывается.

Источник: https://github.com/wbuchwalter/azure-content/blob/master/includes/guidance-tcp-session-timeout-include.md