Устранение неполадок с исходящим подключением 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 и ошибки подключения. Дополнительные сведения о шлюзе Azure NAT см. в статье "Что такое шлюз 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 к службам Azure PaaS, таким как служба хранилища Azure, SQL Azure, 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, параметрах исходящих подключений и настойках исходящего доступа по умолчанию см. разделы: