Я запускаю проприетарное клиент-серверное приложение на одной виртуальной машине 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 из этих пакетов терпят неудачу, сеанс сбрасывается.