Устранение Azure Load Balancer проблем с исходящим подключением

Ознакомьтесь с руководством по устранению неполадок для исходящих подключений в Azure Load Balancer. Это включает понимание преобразования исходных сетевых адресов (SNAT) и его влияние на подключения, использование отдельных общедоступных IP-адресов на виртуальных машинах и проектирование приложений для повышения эффективности подключения, чтобы избежать нехватки портов SNAT. Большинство проблем с исходящим подключением, с которыми сталкиваются клиенты, вызваны нехваткой портов SNAT и временем ожидания подключения, приводящими к отброшенным пакетам.

Дополнительные сведения о портах SNAT см. в разделе Преобразование исходных сетевых адресов для исходящих подключений.

Общие сведения об использовании порта SNAT

Следуйте указания в разделе Диагностика подсистемы балансировки нагрузки уровня "Стандартный" с помощью метрик, оповещений и работоспособности ресурсов, чтобы отслеживать использование и выделение портов SNAT существующей подсистемы балансировки нагрузки. Выполните мониторинг для подтверждения или определения риска нехватки портов SNAT. Если у вас возникли проблемы с пониманием поведения исходящего подключения, используйте статистику стека IP (netstat) или соберите записи пакетов. Такую запись можно выполнять в гостевой ОС экземпляра или с помощью Наблюдателя за сетями. В большинстве сценариев Azure рекомендует использовать шлюз NAT для исходящего подключения, чтобы снизить риск нехватки портов SNAT. Настоятельно рекомендуется использовать шлюз NAT, если служба инициирует повторяющиеся исходящие подключения к тому же целевому объекту по протоколу TCP или UDP.

Оптимизация развертываний Azure для исходящего подключения

Важно оптимизировать развертывание Azure для исходящего подключения. Оптимизация может помочь предотвратить или решить проблемы с исходящим подключением.

Развертывание шлюза NAT для исходящего подключения к Интернету

Шлюз NAT Azure — это высокоустойчивая и масштабируемая служба Azure, которая обеспечивает исходящее подключение к Интернету из виртуальной сети. Уникальный метод использования портов SNAT шлюза NAT помогает устранить распространенные проблемы нехватки портов SNAT и ошибки подключения. Дополнительные сведения о шлюзе NAT Azure см. в статье Что такое шлюз NAT Azure?

  • Как шлюз NAT снижает риск нехватки портов SNAT?

    Azure Load Balancer выделяет фиксированное число портов SNAT для каждого экземпляра виртуальной машины во внутреннем пуле. Этот метод выделения может привести к нехватке портов SNAT, особенно если неравномерное распределение трафика приводит к тому, что определенная виртуальная машина отправляет больший объем исходящих данных. В отличие от подсистемы балансировки нагрузки шлюз NAT динамически выделяет порты SNAT для всех экземпляров виртуальных машин в подсети.

    Шлюз NAT предоставляет доступ к портам SNAT для каждого экземпляра в подсети. Это динамическое выделение позволяет экземплярам виртуальных машин использовать необходимое количество портов SNAT из доступного пула портов для новых подключений. Динамическое выделение снижает риск нехватки портов SNAT.

    Схема Azure Load Balancer и шлюза NAT Azure.

  • Выбор портов и повторное использование портов.

    Шлюз NAT выбирает порты из пула доступных портов случайным образом. Если доступных портов нет, порты SNAT используются повторно, если нет подключения к одному и тому же общедоступному IP-адресу и порту назначения. Благодаря такому принципу выбора портов и повторного использования в шлюзе NAT снижается вероятность возникновения ошибок истечения времени ожидания подключения.

    Дополнительные сведения об использовании SNAT и портов для шлюза NAT см. в разделе Основные сведения о SNAT. Существует несколько случаев, когда вы не сможете использовать шлюз NAT для исходящих подключений. Дополнительные сведения об ограничениях шлюза NAT см. в статье Ограничения шлюза NAT.

    Если вы не можете использовать шлюз NAT для исходящего подключения, см. другие варианты миграции, описанные в этой статье.

Настройка правил исходящего трафика подсистемы балансировки нагрузки для максимального увеличения числа портов SNAT на виртуальную машину

Если вы используете стандартную общедоступную подсистему балансировки нагрузки и у вас возникает проблема нехватки портов SNAT или сбои подключения, убедитесь, что вы используете правила для исходящего трафика с выделением портов вручную. В противном случае, скорее всего, будут использоваться настройки по умолчанию для исходящего доступа подсистемы балансировки нагрузки. При использовании настроек по умолчанию для исходящего доступа автоматически выделяется уменьшенное количество портов, которое зависит от числа экземпляров в серверном пуле. Не рекомендуется использовать настройки исходящего доступа по умолчанию для обеспечения исходящих подключений. При масштабировании серверного пула возможны прерывания подключений, если потребуется перераспределение портов.

Чтобы подробнее узнать о настройках исходящего доступа по умолчанию и выделении портов по умолчанию см. раздел Преобразование исходных сетевых адресов для исходящих подключений.

Чтобы увеличить количество доступных портов SNAT на виртуальную машину, настройте правила для исходящего трафика с выделением портов вручную в подсистеме балансировки нагрузки. Например, если вы знаете, что у вас есть не более 10 виртуальных машин в серверном пуле, вы можете выделить до 6400 портов SNAT для каждой виртуальной машины, а не 1024 по умолчанию. Если требуется больше портов SNAT, можно добавить несколько интерфейсных IP-адресов для исходящих подключений, чтобы увеличить количество доступных портов SNAT. Прежде чем добавлять дополнительные интерфейсные IP-адреса, убедитесь, что вы понимаете, почему возникает нехватка портов SNAT.

Подробные инструкции см. в разделе Разработка приложений для эффективного использования подключений далее в этой статье. Чтобы добавить дополнительные IP-адреса для исходящих подключений, создайте интерфейсную IP-конфигурацию для каждого нового IP-адреса. При настройке правил для исходящего трафика можно выбрать несколько интерфейсных IP-конфигураций для внутреннего пула. Рекомендуется для входящих и исходящих подключений использовать разные IP-адреса. Различные IP-адреса помогают изолировать трафик для улучшения мониторинга и устранения неполадок.

Настройка отдельного общедоступного IP-адреса на виртуальной машине

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

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

Примечание

Если необходимо подключить виртуальную сеть Azure к службам PaaS Azure, таким как служба хранилища Azure, Azure SQL, Azure Cosmos DB или другие доступные службы Azure, можно использовать Приватный канал Azure, чтобы полностью избежать SNAT. Приватный канал Azure направляет трафик из виртуальной сети в службы Azure через магистральную сеть Azure, а не через Интернет.

Приватный канал является более предпочтительным вариантом организации частного доступа к службам, размещенным в Azure по сравнению с использованием конечных служб. Дополнительные сведения о различиях между Приватным каналом и конечными точками служб см. в разделе Сравнение частных конечных точек и конечных точек служб.

Проектирование приложений с эффективным подключением

При разработке приложений следите за тем, чтобы они эффективно использовали подключения. Благодаря этому можно уменьшить или исключить проблему нехватки портов SNAT в развернутых приложениях.

Изменение приложения для повторного использования подключений

Вместо создания отдельных атомарных TCP-подключений для каждого запроса рекомендуется настроить повторное использование подключений в приложениях. Повторное использованием позволяет повысить производительность операций TCP. В частности, это относится к таким протоколам, как HTTP/1.1, в которых подключения используются повторно по умолчанию. Это повторное использование применяется к другим протоколам, где в качестве транспорта используется HTTP, например REST.

Изменение приложения для использования пулов подключений

Можно использовать в приложении схему пула подключений, в которой запросы распределяются внутри фиксированного набора подключений (каждое из которых повторно используется, если это возможно). Эта схема ограничивает количество используемых портов SNAP и делает среду более предсказуемой.

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

Возможно, пулы подключений уже существуют в платформе, которая используется вами для разработки приложения или параметров конфигурации приложения. Их можно объединить с повторным использованием подключений. В этом случае для обработки нескольких запросов можно будет использовать фиксированное, прогнозируемое число портов для одних и тех же конечных IP-адреса и порта.

Запросы выполняются быстрее благодаря повышенной эффективности транзакций TCP, уменьшаются задержки, а также ресурсы используются более эффективно. Это также позитивно отражается на транзакциях UDP. Изменение числа потоков UDP позволяет избежать нехватки портов SNAT, а также управлять их использованием.

Изменение приложения для использования менее "жесткой" логики повторных попыток

При нехватке портов SNAT или сбоях приложения простое повторное использование без дополнительной логики устаревания и перевода в пассивный режим не поможет решить проблему. Вы можете снизить потребность в портах SNAT, используя менее "жесткую" логику повторного использования.

В зависимости от настроенного тайм-аута простоя, если повторные попытки предпринимаются слишком часто, может быть недостаточно времени для закрытия подключений и освобождения портов SNAT для повторного использования.

Использование проверки активности для сброса времени ожидания простоя исходящих подключений

В правилах исходящего трафика подсистемы балансировки нагрузки по умолчанию настроен 4-минутный тайм-аут простоя. Его можно изменять и увеличивать до 100 минут. При необходимо можно также использовать проверку активности TC для обновления потока простоя и сброса этого тайм-аута простоя. Если используется проверку активности TCP, достаточно организовать ее на одной стороне подключения.

Например, проверка активности со стороны сервера будет успешно сбрасывать таймер ожидания для последовательности, избавляя от необходимости поддерживать активность TCP-соединения с обеих сторон. Этот же подход применим и для уровня приложений, в том числе в системах баз данных "клиент — сервер". Выясните, какие средства на стороне сервера позволяют поддерживать проверку активности конкретного приложения.

Дальнейшие действия

Для получения дополнительной информации о проблеме нехватки портов SNAT, параметрах исходящих подключений и настойках исходящего доступа по умолчанию см. разделы: