Балансировщики нагрузки в Microsoft Azure
Обзор балансировщика нагрузки
Простейшее определение балансировщика нагрузки — это система, которая позволяет группе компьютеров выглядеть как один компьютер для обслуживания запроса пользователя. Задача балансировщика нагрузки состоит в том, чтобы принять запрос, решить, какой компьютер в группе может обработать запрос пользователя, а затем перенаправить запрос на этот компьютер. Существует несколько алгоритмов и разных типов балансировщиков нагрузки, которые обрабатывают запросы на разных уровнях стека TCP/IP.
Microsoft Azure поддерживает балансировщики нагрузки для виртуальных машин и облачных служб, чтобы обеспечить масштабирование ваших приложений, а также предотвратить сбой одной системы, который может привести к потере доступности службы. В Azure есть три балансировщика нагрузки: балансировщик нагрузки Azure, внутренний балансировщик нагрузки (ILB) и диспетчер трафика.
Балансировщик нагрузки Azure
Azure Load Balancer — это балансировщик нагрузки TCP/IP уровня 4, который использует хеш-функцию на основе 5 кортежей (исходный IP-адрес, исходный порт, целевой IP-адрес, конечный порт, тип протокола) для распределения трафика между виртуальными машинами в одном балансировщике нагрузки. установлен. Хотя вычисление хэш-функции используется для распределения нагрузки, трафик для одних и тех же 5 кортежей направляется к одной и той же конечной точке во время сеанса. Если клиент закрывает сеанс, а затем открывает новый сеанс, трафик из нового сеанса может быть направлен на другую конечную точку, чем предыдущий сеанс, но весь трафик из нового сеанса будет направлен на ту же конечную точку. Распределение хэш-функции приводит к довольно случайному выбору конечной точки и с течением времени обеспечивает довольно равномерное распределение трафика для сеансов на основе протоколов TCP и UDP.
Балансировщик нагрузки Azure также называется балансировщиком нагрузки облачной службы, поскольку он автоматически создается при создании облачной службы. Azure Load Balancer имеет общедоступный виртуальный IP-адрес (VIP) и внешнюю конечную точку, которые принимают подключения из Интернета.
По умолчанию один виртуальный IP-адрес может поддерживать несколько конечных точек ввода. Каждая входная конечная точка может быть назначена другой группе виртуальных машин в наборе с балансировкой нагрузки или облачной службе с несколькими определенными экземплярами. Однако, несмотря на то, что внешняя конечная точка одинакова (например, порт 80) для всех групп, каждая входная конечная точка в значительной степени прослушивает другой порт. Это означает, что у вас не может быть нескольких групп машин, прослушивающих порт 80. Первая группа может прослушивать порт 80, но каждая другая группа должна использовать другой порт (например, порт 8080 для группы 2, порт 8081 для группы 3 и т. д.). на).
Недавно корпорация Майкрософт выпустила поддержку нескольких виртуальных IP-адресов, что позволяет одной облачной службе иметь несколько виртуальных IP-адресов с выходом в Интернет (максимум 5 по умолчанию), и каждый VIP может поддерживать несколько конечных точек ввода. Это означает, что у вас могут быть разные группы машин с собственным виртуальным IP-адресом, и каждый виртуальный IP-адрес может прослушивать один и тот же внешний порт. Однако для каждого виртуального IP-адреса у вас по-прежнему не может быть нескольких входных конечных точек, прослушивающих один и тот же порт.
Внутренний балансировщик нагрузки
Внутренний балансировщик нагрузки (ILB) — это реализация балансировщика нагрузки Azure, которая имеет только внутренний виртуальный IP-адрес. Это означает, что вы не можете использовать ILB для балансировки нагрузки трафика из Интернета на внутренние входные конечные точки. ILB обеспечивает балансировку нагрузки только между виртуальными машинами, которые находятся во внутренней виртуальной сети Azure или облачной службе. При использовании в облачной службе все узлы с балансировкой нагрузки должны быть членами облачной службы. При использовании в виртуальной сети все узлы с балансировкой нагрузки должны быть подключены к одной и той же виртуальной сети.
Например, вы можете создать многоуровневое приложение с общедоступным веб-уровнем и частным внутренним уровнем базы данных, содержащим конфиденциальную информацию. Однако вы хотите, чтобы только веб-уровень имел доступ к уровню базы данных. Если обоим уровням требуется балансировка нагрузки, вы должны использовать Azure Load Balancer для общедоступного веб-уровня, а Internal Load Balancer — для запроса балансировки нагрузки веб-уровня на уровень внутренней базы данных, который вы не хотите предоставлять в Интернете. С помощью ILB вы можете предоставить внутреннюю конечную точку с балансировкой нагрузки, которая использует частное адресное пространство и не отображается извне. Другим распространенным сценарием является создание кластера SQL Always On Availability Group с использованием ILB в качестве прослушивателя.
Зонды балансировщика нагрузки
Azure Load Balancer поддерживает возможность проверки узлов набора с балансировкой нагрузки или экземпляров веб-роли, чтобы определить, отвечают ли узлы или экземпляры на запросы. Зонд поддерживает как HTTP, так и TCP в качестве протоколов зондирования, а HTTPS не поддерживается. Вы должны указать порт для зонда, который будет использоваться во время попыток зондирования.
Протоколом по умолчанию для зонда является TCP. Каждые 15 секунд зонд будет пытаться подключиться к экземплярам на определенном порту зонда, отправляя две попытки зондирования по TCP. Если зонд не получает TCP ACK (подтверждение) для каждой попытки зонда, он будет считать узел или экземпляр отключенным и прекратит отправку на него трафика.
Тест TCP сообщает вам, работает ли стек TCP/IP узла, но не предоставляет никакой другой информации. Для большинства ситуаций, таких как веб-сервер, просто знать, работает ли стек TCP/IP на узле, вероятно, недостаточно.
Для веб-серверов лучше всего использовать пробный протокол HTTP. Использование HTTP для зонда позволяет указать путь на веб-сервере, к которому зонд будет пытаться получить доступ. Если зонд сможет подключиться к пути, он получит ответ HTTP 200. Если он не может ответить или получает любой другой ответ, кроме HTTP 200, балансировщик нагрузки прекратит отправку трафика на этот узел. Использование этого подхода позволяет вам написать собственный код для выполнения других проверок состояния веб-сайта.
Некоторые другие характеристики, о которых вы должны знать, включают в себя:
- Система, выполняющая проверку, является внешней по отношению к балансировщику нагрузки, но находится во внутренней сети Azure, поэтому она выполняет проверку только с использованием внутренних адресов.
- Зонд продолжает проверять узел, даже если узел был выведен из балансировки трафика.
- Если узел выведен из балансировки трафика, он будет автоматически включен обратно, как только проверка будет успешной.
- Путь пробы HTTP не может не требовать аутентификации
Менеджер трафика
Диспетчер трафика — это интернет-решение для балансировки нагрузки трафика между несколькими конечными точками. Диспетчер трафика использует DNS-запросы и механизм политик для направления трафика на интернет-ресурсы. Интернет-ресурс может располагаться в одном дата-центре или по всему миру. Диспетчер трафика не похож на обычный механизм балансировки нагрузки, потому что он участвует только в начальном выборе конечной точки, а не в фактической обработке перенаправления каждого пакета.
Диспетчер трафика поддерживает три типа алгоритмов балансировки нагрузки:
- Производительность — направляет клиента к ближайшему узлу с балансировкой нагрузки в зависимости от задержки.
- Аварийное переключение — направляет клиента на основной узел, если только основной узел не отключен, а затем перенаправляет на резервный узел.
- Round Robin — направляет клиента к узлу на основе распределенного подхода с использованием весов, назначенных узлам.
Диспетчер трафика реализует алгоритм балансировки нагрузки, определенный с помощью набора интеллектуальных политик, и каждый URL-ресурс диспетчера трафика связан с набором политик.
Диспетчер трафика можно рассматривать как виртуальную запись DNS для URL-адреса, к которому вы пытаетесь подключиться. Например, чтобы использовать диспетчер трафика для балансировки нагрузки трафика на www.contoso.com, вы связываете www.contoso.com с записью CNAME, которая указывает на URL-адрес диспетчера трафика. Когда пользователь запрашивает www.contoso.com, он перенаправляется к диспетчеру трафика, и механизм политик анализирует правила для конкретного запроса. Как только механизм политики обрабатывает запрос, он использует настроенный алгоритм балансировки нагрузки, чтобы выбрать конечную точку для возврата клиенту. Клиент фактически получает запись CNAME для определенной конечной точки, а затем выполняет DNS-запрос для имени этой конечной точки и подключается к конечной точке, используя ее IP-адрес.
Как только клиент получает перенаправление на конечную точку, он будет продолжать использовать эту конечную точку, пока не истечет время жизни (TTL) кэшированной записи DNS или не будет принудительно обновлено. Если конечная точка становится недоступной, у клиента могут возникнуть задержки или невозможность подключения к сайту.
Диспетчер трафика также поддерживает возможность включать и отключать конечные точки в механизме политик без отключения конечной точки. Это дает возможность добавлять или удалять местоположения конечных точек по мере необходимости или легко выполнять обслуживание конечных точек.
Балансировщики нагрузки виртуальных устройств
Магазин галереи Microsoft Azure предлагает сторонние виртуальные устройства, обеспечивающие балансировку нагрузки от Kemp и Barracuda. На Microsoft Ignite 2015 были анонсированы новые устройства от F5, A10 и Citrix. Эти устройства могут использоваться как внутренние, так и внешние балансировщики нагрузки.
Устройства могут работать в разных режимах, а именно в режимах Single Arm и Dual Arm. Устройства с одной рукой имеют одну сетевую карту, и весь трафик поступает в балансировщик нагрузки. Затем трафик перенаправляется обратно в целевые системы через ту же сетевую карту. Обычно для этого также требуется, чтобы в системах, находящихся за балансировщиком нагрузки, был установлен клиент для управления маршрутизацией пакетов через устройство. Устройства Dual Arm имеют несколько сетевых адаптеров и обычно поддерживают маршрутизацию трафика на уровне 3 через устройства. Это гораздо более простая конфигурация, и обычно она работает лучше, чем конфигурация с одним плечом.
Вывод
Балансировщики нагрузки, изначально доступные в Microsoft Azure, и предложения сторонних устройств позволяют настроить лучшее решение в соответствии с вашими конкретными требованиями. Для многоуровневого приложения, которое должно быть глобально доступным, вы можете использовать метод балансировки нагрузки производительности диспетчера трафика для перенаправления клиентов на ближайшую конечную точку. Конечной точкой может быть виртуальный IP-адрес балансировщика нагрузки Azure, который балансирует нагрузку уровня пользовательского интерфейса между несколькими узлами. Каждый узел уровня пользовательского интерфейса может использовать внутренний балансировщик нагрузки, который распределяет нагрузку уровня промежуточного программного обеспечения между несколькими узлами. Каждый уровень ПО промежуточного слоя может подключаться к уровню данных SQL Always On Availability Group, который использует стороннее устройство для реализации прослушивателя SQL. Независимо от того, нужно ли вам сбалансировать нагрузку одноуровневой или многоуровневой облачной службы или виртуальных машин, Microsoft Azure предлагает вам гибкость, чтобы адаптировать решение, которое работает для вашей конкретной среды.