Использование n-уровневого приложения с SQL Server в Azure Stack HubWindows N-tier application on Azure Stack Hub with SQL Server

На примере этой эталонной архитектуры показано, как развернуть виртуальные машины и виртуальную сеть, настроенные для n-уровневого приложения, с использованием SQL Server на платформе Windows для уровня данных.This reference architecture shows how to deploy virtual machines (VMs) and a virtual network configured for an N-tier application, using SQL Server on Windows for the data tier.

ArchitectureArchitecture

Архитектура состоит из следующих компонентов.The architecture has the following components.

На схеме показана виртуальная сеть, состоящая из шести подсетей: шлюз приложений, управление, веб-уровень, Бизнес-уровень, уровень данных и Active Directory.

Общие сведенияGeneral

  • Группа ресурсов.Resource group. Группы ресурсов используются для группирования ресурсов Azure по времени существования, владельцу и другим критериям для управления.Resource groups are used to group Azure resources so they can be managed by lifetime, owner, or other criteria.

  • Группа доступности.Availability Set. Группа доступности — это конфигурация центра обработки данных, обеспечивающая избыточность и доступность виртуальных машин.Availability set is a datacenter configuration to provide VM redundancy and availability. Эта конфигурация в метке Azure Stack Hub обеспечит доступность не менее одной виртуальной машины при событиях как запланированного, так и незапланированного обслуживания.This configuration within an Azure Stack Hub stamp ensures that during either a planned or unplanned maintenance event, at least one virtual machine is available. Виртуальные машины помещаются в группу доступности, которая распределяет их между несколькими доменами сбоя (узлами Azure Stack Hub).VMs are placed in an availability set that spreads them across multiple fault domains (Azure Stack Hub hosts)

Сети и балансировка нагрузкиNetworking and load balancing

  • Виртуальная сеть и подсети.Virtual network and subnets. Каждая виртуальная машина Azure развертывается в виртуальной сети, которую можно разделить на подсети.Every Azure VM is deployed into a virtual network that can be segmented into subnets. Создайте отдельные подсети для каждого уровня.Create a separate subnet for each tier.

  • Подсистема балансировки нагрузки уровня 7.Layer 7 Load Balancer. Так как шлюз приложений пока недоступен в концентраторе Azure Stack, доступны альтернативные варианты на рынке центра Azure Stack , такие как: KEMP LoadMaster Load Balancer ключ содержимого ADC / F5 крупный-IP Virtual Edition или A10 всундер ADC .As Application Gateway is not yet available on Azure Stack Hub, there are alternatives available on Azure Stack Hub Market place such as: KEMP LoadMaster Load Balancer ADC Content Switch/ f5 Big-IP Virtual Edition or A10 vThunder ADC

  • Подсистемы балансировки нагрузки.Load balancers. Azure Load Balancer позволяет распределять трафик с уровня Web на уровень Business, а также с уровня Business к SQL Server.Use Azure Load Balancer to distribute network traffic from the web tier to the business tier, and from the business tier to SQL Server.

  • Группы безопасности сети (группы безопасности сети).Network security groups (NSGs). NSG позволяют ограничить трафик в виртуальной сети.Use NSGs to restrict network traffic within the virtual network. Например, в приведенной здесь трехуровневой архитектуре уровень базы данных не принимает трафик из веб-интерфейса, а только с бизнес-уровня и из подсети управления.For example, in the three-tier architecture shown here, the database tier does not accept traffic from the web front end, only from the business tier and the management subnet.

  • DNS.DNS. Azure Stack Hub не предоставляет собственную службу размещения DNS, поэтому используйте DNS-сервер в ADDS.Azure Stack Hub does not provide its own DNS hosting service, so please use the DNS server in your ADDS.

Виртуальные машиныVirtual machines

  • SQL Server Always on группы доступности.SQL Server Always On Availability Group. Обеспечивает высокий уровень доступности на уровне данных, включив репликацию и отработку отказа.Provides high availability at the data tier, by enabling replication and failover. Для отработки отказа используется технология отказоустойчивого кластера Windows Server (WSFC).It uses Windows Server Failover Cluster (WSFC) technology for failover.

  • Серверы доменных служб Active Directory (AD DS).Active Directory Domain Services (AD DS) Servers. Объекты-компьютеры для отказоустойчивого кластера и связанные с ним кластерные роли создаются в доменных службах Active Directory (AD DS).The computer objects for the failover cluster and its associated clustered roles are created in Active Directory Domain Services (AD DS). Предпочтительным способом присоединения других виртуальных машин к AD DS является настройка серверов AD DS на виртуальных машинах в одной виртуальной сети.Set up AD DS servers in VMs in the same virtual network are preferred method to join other VMs to AD DS. Вы также можете присоединить виртуальные машины к имеющимся корпоративным AD DS, подключив виртуальную сеть к корпоративной сети с помощью VPN-подключения.You can also join the VMs to existing Enterprise AD DS by connecting virtual network to Enterprise network with VPN connection. При использовании обоих подходов необходимо изменить DNS виртуальной сети на DNS-сервер AD DS (в виртуальной сети или имеющейся корпоративной сети), чтобы разрешить полное доменное имя домена AD DS.With both approaches, you need to change the virtual network DNS to your AD DS DNS server (in virtual network or existing Enterprise network) to resolve the AD DS domain FQDN.

  • Облачный следящий сервер.Cloud Witness. На отказоустойчивом кластере должны работать больше половины узлов. Это называется кворумом.A failover cluster requires more than half of its nodes to be running, which is known as having quorum. Если в кластере только два узла, разделение сети может привести к тому, что каждый из узлов будет считаться главным.If the cluster has just two nodes, a network partition could cause each node to think it's the master node. В этом случае требуется ресурс-свидетель, чтобы разорвать связи и создать кворум.In that case, you need a witness to break ties and establish quorum. Свидетель — это ресурс, например общий диск, который может использоваться в качестве средства разбиения связей для установления кворума.A witness is a resource such as a shared disk that can act as a tie breaker to establish quorum. Облачный ресурс-свидетель — тип ресурса-свидетеля, в котором используется хранилище BLOB-объектов Azure.Cloud Witness is a type of witness that uses Azure Blob Storage. Дополнительные сведения о концепции кворума см. в статье, посвященной кворуму кластера и кворуму пула.To learn more about the concept of quorum, see Understanding cluster and pool quorum. Дополнительные сведения об облачном ресурсе-свидетеле см. в статье, посвященной развертыванию облачного ресурса-свидетеля для отказоустойчивого кластера.For more information about Cloud Witness, see Deploy a Cloud Witness for a Failover Cluster. В Azure Stack Hub конечная точка облака-свидетеля отличается от глобальной службы Azure.In Azure Stack Hub, the Cloud Witness endpoint is different from global Azure.

Она может выглядеть следующим образом:It may look like:

  • Глобальная среда Azure:For global Azure:
    https://mywitness.blob.core.windows.net/

  • Azure Stack Hub:For Azure Stack Hub:
    https://mywitness.blob.<region>.<FQDN>

  • Jumpbox.Jumpbox. Он также называется узлом-бастионом.Also called a bastion host. Безопасная виртуальная машина в сети, которую администраторы используют для подключения к другим виртуальным машинам.A secure VM on the network that administrators use to connect to the other VMs. В jumpbox есть группа безопасности сети, обеспечивающая удаленный трафик только из общедоступных IP-адресов из списка надежных отправителей.The jumpbox has an NSG that allows remote traffic only from public IP addresses on a safe list. NSG должна пропускать трафик с удаленного рабочего стола (RDP).The NSG should permit remote desktop (RDP) traffic.

РекомендацииRecommendations

Описанная здесь архитектура может не соответствовать вашим требованиям.Your requirements might differ from the architecture described here. Воспользуйтесь этими рекомендациями в качестве отправной точки.Use these recommendations as a starting point.

Виртуальные машиныVirtual machines

Рекомендации по настройке виртуальных машин см. в статье о запуске виртуальной машины Windows в Azure Stack Hub.For recommendations on configuring the VMs, see Run a Windows VM on Azure Stack Hub.

Виртуальная сетьVirtual network

При создании виртуальной сети определите, сколько IP-адресов требуется для ресурсов в каждой подсети.When you create the virtual network, determine how many IP addresses your resources in each subnet require. Укажите маску подсети и достаточно большой диапазон адресов сети для требуемых IP-адресов с помощью нотации CIDR.Specify a subnet mask and a network address range large enough for the required IP addresses, using CIDR notation. Используйте адресное пространство, которое входит в диапазон стандартных блоков частных IP-адресов, например 10.0.0.0/8, 172.16.0.0/12 и 192.168.0.0/16.Use an address space that falls within the standard private IP address blocks, which are 10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16.

Выберите диапазон адресов, который не перекрывает локальную сеть, если вам нужно позже настроить шлюз между виртуальной сетью и локальной сетью.Choose an address range that does not overlap with your on-premises network, in case you need to set up a gateway between the virtual network and your on-premises network later. После создания виртуальной сети невозможно изменить диапазон адресов.Once you create the virtual network, you can't change the address range.

Проектируйте подсети с учетом требований к функциональности и безопасности.Design subnets with functionality and security requirements in mind. Все виртуальные машины в пределах одного уровня или одной роли должны входить в одну и ту же подсеть, которая может быть надежным периметром безопасности.All VMs within the same tier or role should go into the same subnet, which can be a security boundary. Дополнительные сведения о проектировании виртуальных сетей и подсетей см. в статье Plan virtual networks (Планирование виртуальных сетей Azure).For more information about designing virtual networks and subnets, see Plan and design Azure Virtual Networks.

Подсистемы балансировки нагрузкиLoad balancers

Не подключайте виртуальные машины напрямую к Интернету. Вместо этого предоставьте каждой из них частный IP-адрес.Don't expose the VMs directly to the Internet, but instead give each VM a private IP address. Клиент подключается через общедоступный IP-адрес, связанный с Load Balancer уровня 7.Clients connect using the public IP address associated with the Layer 7 Load Balancer.

Определите правила подсистемы балансировки нагрузки для направления трафика к виртуальным машинам.Define load balancer rules to direct network traffic to the VMs. Например, чтобы включить трафик HTTP, сопоставьте порт 80 интерфейсной конфигурации с портом 80 серверного пула адресов.For example, to enable HTTP traffic, map port 80 from the front-end configuration to port 80 on the back-end address pool. Когда клиент отправляет HTTP-запрос на порт 80, подсистема балансировки нагрузки выбирает IP-адрес серверной части с помощью хэш-алгоритма, который содержит исходный IP-адрес.When a client sends an HTTP request to port 80, the load balancer selects a back-end IP address by using a hashing algorithm that includes the source IP address. Клиентские запросы распределяются между всеми виртуальными машинами в серверном пуле адресов.Client requests are distributed across all the VMs in the back-end address pool.

Группы безопасности сетиNetwork security groups

С помощью правил NSG можно ограничить трафик между уровнями.Use NSG rules to restrict traffic between tiers. В показанной выше трехуровневой архитектуре веб-уровень не взаимодействует напрямую с уровнем базы данных.In the three-tier architecture shown above, the web tier does not communicate directly with the database tier. Чтобы это правило соблюдалось, уровень базы данных должен блокировать входящий трафик из подсети веб-уровня.To enforce this rule, the database tier should block incoming traffic from the web tier subnet.

  1. Запретите весь входящий трафик от виртуальной сети.Deny all inbound traffic from the virtual network. (Используйте тег VIRTUAL_NETWORK в правиле.)(Use the VIRTUAL_NETWORK tag in the rule.)

  2. Разрешите входящий трафик из подсети бизнес-уровня.Allow inbound traffic from the business tier subnet.

  3. Разрешите входящий трафик из самой подсети уровня базы данных.Allow inbound traffic from the database tier subnet itself. Это правило обеспечивает взаимодействие между виртуальными машинами баз данных, которое необходимо для репликации и отработки отказа базы данных.This rule allows communication between the database VMs, which is needed for database replication and failover.

  4. Разрешите трафик RDP (порт 3389) из подсети jumpbox.Allow RDP traffic (port 3389) from the jumpbox subnet. Это правило позволяет администраторам подключаться к уровню базы данных из jumpbox.This rule lets administrators connect to the database tier from the jumpbox.

Создайте правила 2–4 с более высоким приоритетом, чем у правила 1, чтобы они переопределяли его.Create rules 2 – 4 with higher priority than the first rule, so they override it.

Группы доступности AlwaysOn SQL ServerSQL Server Always On Availability Groups

Мы рекомендуем использовать группы доступности AlwaysOn для обеспечения высокого уровня доступности SQL Server.We recommend Always On Availability Groups for SQL Server high availability. До Windows Server 2016 для групп доступности Always On требовался контроллер домена, а все узлы в группе доступности должны были находиться в одном домене AD.Prior to Windows Server 2016, Always On Availability Groups require a domain controller, and all nodes in the availability group must be in the same AD domain.

Для обеспечения высокой доступности уровня виртуальной машины все виртуальные машины SQL должны находиться в группе доступности.For VM layer high availability, all SQL VMs should be in an Availability Set.

Другие уровни подключаются к базе данных с помощью прослушивателя групп доступности.Other tiers connect to the database through an availability group listener. Прослушиватель позволяет клиенту SQL подключаться, не зная имени физического экземпляра SQL Server.The listener enables a SQL client to connect without knowing the name of the physical instance of SQL Server. Виртуальные машины, которые обращаются к базе данных, должны быть присоединены к домену.VMs that access the database must be joined to the domain. Клиент (в этом случае другой уровень) использует DNS для разрешения имени виртуальной сети прослушивателя в IP-адресах.The client (in this case, another tier) uses DNS to resolve the listener's virtual network name into IP addresses.

Настройте группы доступности AlwaysOn SQL Server следующим образом:Configure the SQL Server Always On Availability Group as follows:

  1. Создайте кластер отказоустойчивой кластеризации Windows Server, группу доступности AlwaysOn SQL Server и первичную реплику.Create a Windows Server Failover Clustering (WSFC) cluster, a SQL Server Always On Availability Group, and a primary replica. Дополнительные сведения см. в статье Начало работы с группами доступности AlwaysOn.For more information, see Getting Started with Always On Availability Groups.

  2. Создайте внутреннюю подсистему балансировки нагрузки со статическим частным IP-адресом.Create an internal load balancer with a static private IP address.

  3. Создайте прослушиватель группы доступности и сопоставьте его DNS-имя с IP-адресом внутренней подсистемы балансировки нагрузки.Create an availability group listener, and map the listener's DNS name to the IP address of an internal load balancer.

  4. Создайте правило подсистемы балансировки нагрузки для порта прослушивания SQL Server (по умолчанию используется TCP-порт 1433).Create a load balancer rule for the SQL Server listening port (TCP port 1433 by default). Правило подсистемы балансировки нагрузки должно включать плавающий IP-адрес, также называемый прямым ответом от сервера.The load balancer rule must enable floating IP, also called Direct Server Return. В результате виртуальная машина будет отправлять ответ клиенту напрямую, что позволяет использовать прямое соединение с первичной репликой.This causes the VM to reply directly to the client, which enables a direct connection to the primary replica.

Примечание

Если плавающий IP-адрес включен, номер внешнего порта должен совпадать с номером внутреннего порта в правиле подсистемы балансировки нагрузки.When floating IP is enabled, the front-end port number must be the same as the back-end port number in the load balancer rule.

Если клиент SQL пытается выполнить подключение, подсистема балансировки нагрузки направляет запрос на подключение в первичную реплику.When a SQL client tries to connect, the load balancer routes the connection request to the primary replica. Если происходит отработка отказа с переходом на другую реплику, подсистема балансировки нагрузки автоматически направляет новые запросы в новую первичную реплику.If there is a failover to another replica, the load balancer automatically routes new requests to a new primary replica. Дополнительные сведения см. в статье Configure a load balancer for an Always On availability group in Azure (Настройка подсистемы балансировки нагрузки для группы доступности AlwaysOn в Azure).For more information, see Configure an ILB listener for SQL Server Always On Availability Groups.

Во время отработки отказа имеющиеся клиентские подключения закрыты.During a failover, existing client connections are closed. После отработки отказа новые соединения направляются в новую первичную реплику.After the failover completes, new connections will be routed to the new primary replica.

Если приложение выполняет больше операций чтения, чем записи, вы можете разгрузить некоторые запросы только для чтения во вторичную реплику.If your application makes more reads than writes, you can offload some of the read-only queries to a secondary replica. Ознакомьтесь с разделом Соединение с помощью прослушивателя со вторичной репликой только для чтения (маршрутизация только для чтения).See Using a Listener to Connect to a Read-Only Secondary Replica (Read-Only Routing).

Протестируйте развертывание, принудительно выполнив отработку отказа группы доступности вручную.Test your deployment by forcing a manual failover of the availability group.

Рекомендации по оптимизации производительности SQL Server в Azure Stack Hub см. в этой статье.For SQL performance optimization, you can also refer the article SQL server best practices to optimize performance in Azure Stack Hub.

JumpboxJumpbox

Запретите доступ по протоколу RDP из общедоступного Интернета к виртуальным машинам, которые выполняют рабочую нагрузку приложения.Don't allow RDP access from the public Internet to the VMs that run the application workload. Вместо этого все доступы по протоколу RDP к этим виртуальным машинам должны проходить через jumpbox.Instead, all RDP access to these VMs should go through the jumpbox. Администратор выполняет вход в jumpbox, а затем вход в другую виртуальную машину из jumpbox.An administrator logs into the jumpbox, and then logs into the other VM from the jumpbox. jumpbox разрешает RDP трафик из Интернета, однако только из известных и безопасных IP-адресов.The jumpbox allows RDP traffic from the Internet, but only from known, safe IP addresses.

Jumpbox имеет минимальные требования к производительности, поэтому выберите небольшой размер виртуальной машины.The jumpbox has minimal performance requirements, so select a small VM size. Создайте общедоступный IP-адрес для jumpbox.Create a public IP address for the jumpbox. Поместите jumpbox в виртуальную сеть вместе с другими виртуальными машинами, однако в отдельную подсеть управления.Place the jumpbox in the same virtual network as the other VMs, but in a separate management subnet.

Чтобы защитить jumpbox, добавьте правило NSG, разрешающее подключения по протоколу RDP только из безопасного набора общедоступных IP-адресов.To secure the jumpbox, add an NSG rule that allows RDP connections only from a safe set of public IP addresses. Настройте NSG для других подсетей, чтобы разрешить трафик RDP из подсети управления.Configure the NSGs for the other subnets to allow RDP traffic from the management subnet.

Вопросы масштабируемостиScalability considerations

Масштабируемые наборыScale sets

Рассмотрите возможность использования масштабируемых наборов виртуальных машин для уровня Web и Business вместо развертывания отдельных виртуальных машин.For the web and business tiers, consider using virtual machine scale sets instead of deploying separate VMs. Масштабируемый набор позволяет развернуть и администрировать набор идентичных виртуальных машин.A scale set makes it easy to deploy and manage a set of identical VMs. Подумайте об использовании масштабируемых наборов, если необходимо быстро развернуть виртуальные машины.Consider scale sets if you need to quickly scale out VMs.

Настройку виртуальных машин, развернутых в масштабируемый набор, можно выполнить двумя основными способами:There are two basic ways to configure VMs deployed in a scale set:

  • Используйте расширения для настройки виртуальной машины после ее развертывания.Use extensions to configure the VM after it's deployed. В этом случае новые экземпляры виртуальной машины могут дольше запускаться, чем виртуальные машины без расширений.With this approach, new VM instances may take longer to start up than a VM with no extensions.

  • Развернуть управляемый диск с помощью пользовательского образа диска.Deploy a managed disk with a custom disk image. При этом развертывание выполняется быстрее.This option may be quicker to deploy. Но образ необходимо обновлять.However, it requires you to keep the image up-to-date.

Дополнительные сведения см. в статье Рекомендации по проектированию масштабируемых наборов.For more information, see Design considerations for scale sets. В основном эти рекомендации по проектированию относятся к Azure Stack Hub, но есть некоторые предостережения:This design consideration is mostly true for Azure Stack Hub, however there are some caveats:

  • Масштабируемые наборы виртуальных машин в Azure Stack Hub не поддерживают избыточную подготовку или последовательные обновления.Virtual machine scale sets on Azure Stack Hub do not support overprovisioning or rolling upgrades.

  • В Azure Stack Hub нельзя автоматически масштабировать масштабируемые наборы виртуальных машин.You cannot autoscale virtual machine scale sets on Azure Stack Hub.

  • Мы настоятельно рекомендуем использовать в Azure Stack Hub вместо неуправляемых управляемые диски для масштабируемого набора виртуальных машинWe strongly recommend using Managed disks on Azure Stack Hub instead of unmanaged disks for virtual machine scale set

  • Сейчас в Azure Stack Hub действует ограничение в 700 виртуальных машин, к которым относятся все виртуальные машины инфраструктуры Azure Stack Hub, отдельные виртуальные машины и экземпляры масштабируемых наборов.Currently, there is a 700 VM limit on Azure Stack Hub, which accounts for all Azure Stack Hub infrastructure VMs, individual VMs, and scale set instances.

Ограничения подпискиSubscription limits

В каждой подписке клиента Azure Stack Hub настроены ограничения по умолчанию, включая максимальное количество виртуальных машин в каждом регионе, настроенное оператором Azure Stack Hub.Each Azure Stack Hub tenant subscription has default limits in place, including a maximum number of VMs per region configured by the Azure Stack Hub operator. См. обзор служб, планов, предложений и подписок в Azure Stack Hub.For more information, see Azure Stack Hub services, plans, offers, subscriptions overview. Ознакомьтесь также со статьей о типах квот в Azure Stack Hub.Also refer to Quota types in Azure Stack Hub.

Вопросы безопасностиSecurity considerations

Виртуальные сети являются границей, изолирующей трафик в Azure.Virtual networks are a traffic isolation boundary in Azure. По умолчанию виртуальные машины в одной виртуальной сети не могут напрямую обращаться к виртуальным машинам в другой виртуальной сети.By default, VMs in one virtual network can't communicate directly with VMs in a different virtual network.

Группы безопасности сети.NSGs. NSG позволяют ограничить трафик, поступающий из Интернета и обратно.Use network security groups (NSGs) to restrict traffic to and from the internet. Дополнительные сведения см. в статье Virtual datacenters: A network perspective (Виртуальные центры обработки данных: перспектива сети).For more information, see Microsoft cloud services and network security.

Демилитаризованная зона.DMZ. Попробуйте добавить сетевой виртуальный модуль (NVA), чтобы создать сеть периметра между Интернетом и виртуальною сетью Azure.Consider adding a network virtual appliance (NVA) to create a DMZ between the Internet and the Azure virtual network. Сетевой виртуальный модуль — это универсальный термин для виртуального модуля, который может выполнять сетевые задачи, например брандмауэра, проверки пакетов, аудита и пользовательской маршрутизации.NVA is a generic term for a virtual appliance that can perform network-related tasks, such as firewall, packet inspection, auditing, and custom routing.

Шифрование.Encryption. Выполните шифрование конфиденциальных неактивных данных и используйте Key Vault в Azure Stack Hub для управления ключами шифрования базы данных.Encrypt sensitive data at rest and use Key Vault in Azure Stack Hub to manage the database encryption keys. Дополнительные сведения см. в статье Настройка интеграции хранилища ключей Azure для SQL Server на виртуальных машинах Azure (Resource Manager).For more information, see Configure Azure Key Vault Integration for SQL Server on Azure VMs. В Key Vault также рекомендуется хранить секреты приложения, например строки подключения к базе данных.It's also recommended to store application secrets, such as database connection strings, in Key Vault.

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