Я установил шлюз служб удаленных рабочих столов за AWS ALB.
AWS ALB выполняет разгрузку SSL и общается с сервером шлюза RDS через HTTP (порт 80).
Конфигурация работает, и я могу RDP к экземплярам за шлюзом RDS, но очень часто (каждые 15-20 минут я бы сказал в среднем) сеанс RDP тратит несколько секунд (5-10) на повторное подключение.
Есть ли у ALB проблемы с очень длинными соединениями, продолжающимися несколько минут? Каковы возможные основные причины таких частых переподключений?
** ОБНОВЛЕНИЕ БОЛЕЕ ПОДРОБНОЙ ИНФОРМАЦИИ **
Тайм-аут простоя ALB установлен на 4000 секунд.
Кажется, что настройка работает нормально для клиентов Windows RD (в этом случае повторного подключения нет).
тем не мение, с клиентом Microsoft RD для Mac 10.3.9 (1767), работающим на Catalina 10.15.3, мы часто сталкиваемся с переподключениями (каждые 5–20 минут) и случайными зависаниями.
Журнал клиента Microsoft RD для Mac по адресу /var/log/systemd.log не сообщает ничего особенного при повторном подключении.
Журнал IIS на машине со шлюзом RDS также не сообщает ничего особенного (похоже, он не регистрирует RDG_IN_DATA и RDG_OUT_DATA). Он регистрирует только проверку статуса ELB и случайные несанкционированные посещения ALB.
Журнал AWS ALB, отправленный на S3, действительно сообщает о последовательности RDG_OUT_DATA и RDG_IN_DATA во время повторного подключения. Первый - это RDG_OUT_DATA с кодом состояния 200 и значительным количеством полученных байтов, за ним следуют два RDG_OUT_DATA с кодом состояния 401, затем два RDG_IN_DATA с кодом состояния 401 и, наконец, RDG_IN_DATA с кодом состояния 200 до следующего повторного подключения.
Если клиент Mac используется непосредственно со шлюзом RDS без AWS между ними, он работает нормально (без повторных подключений / зависаний каждые 5-20 минут).
Для каждого запроса, который клиент делает через балансировщик нагрузки, балансировщик нагрузки поддерживает два соединения. Внешнее соединение - между клиентом и балансировщиком нагрузки, а внутреннее соединение - между балансировщиком нагрузки и целью. Подсистема балансировки нагрузки управляет таймаутом простоя, который запускается, когда данные не отправляются через интерфейсное соединение в течение указанного периода времени. Если к моменту истечения периода ожидания простоя данные не были отправлены или получены, балансировщик нагрузки закрывает соединение.
По умолчанию Elastic Load Balancing устанавливает значение тайм-аута простоя равным 60 секундам. Следовательно, если цель не отправляет некоторые данные хотя бы каждые 60 секунд во время выполнения запроса, балансировщик нагрузки может закрыть интерфейсное соединение. Чтобы гарантировать, что длительные операции, такие как загрузка файлов, успевают завершиться, отправляйте по крайней мере 1 байт данных до истечения каждого периода ожидания простоя и при необходимости увеличивайте продолжительность периода ожидания.
Для внутренних соединений мы рекомендуем вам включить опцию проверки активности HTTP для ваших экземпляров EC2. Вы можете включить HTTP keep-alive в настройках веб-сервера для ваших экземпляров EC2. Если вы включите HTTP keep-alive, балансировщик нагрузки может повторно использовать серверные соединения до истечения тайм-аута проверки активности. Мы также рекомендуем настроить время ожидания простоя вашего приложения так, чтобы оно превышало время ожидания простоя, настроенное для балансировщика нагрузки.
Для получения дополнительной информации обратитесь к этой статье Балансировщики нагрузки приложений