Поделиться через


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

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

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

Понимание использования порта SNAT

Следуйте разделу стандартная диагностика балансировщика нагрузки с использованием метрик, оповещений и работоспособности ресурсов, чтобы отслеживать использование и выделение SNAT-портов существующей подсистемы балансировки нагрузки. Следите за рисками исчерпания SNAT для их подтверждения или определения. Если у вас возникли проблемы с пониманием поведения исходящего подключения, используйте статистику стека IP (netstat) или соберите записи пакетов. Вы можете выполнять захват пакетов в гостевой ОС вашего экземпляра или использовать Network Watcher для захвата пакетов. В большинстве сценариев 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-адресу и порту назначения. Чтобы порт SNAT был повторно использован для подключения к той же конечной точке назначения, шлюз NAT помещает на порт таймер охлаждения для повторного использования порта SNAT после закрытия предыдущего подключения. Таймер повторного использования порта SNAT помогает предотвратить выбор портов слишком быстро для подключения к одному и тому же назначению. Это полезно повторное использование таймера охлаждения в сценариях, когда конечные точки имеют брандмауэры или другие службы, настроенные для размещения таймера охлаждения на исходных портах. Вследствие такого выбора портов и повторного использования в шлюзе NAT уменьшается вероятность возникновения тайм-аутов подключения.

    Дополнительные сведения о выборе и повторном использовании портов SNAT для шлюза NAT см. в статье SNAT с шлюзом NAT. Существует несколько условий, в которых невозможно использовать шлюз 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 для повторного использования.

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

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

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

Следующие шаги

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