Applicazione a più livelli Windows nell'hub Azure Stack con SQL ServerWindows N-tier application on Azure Stack Hub with SQL Server

Questa architettura di riferimento illustra come distribuire macchine virtuali (VM) e una rete virtuale configurata per un'applicazione a più livelli , usando SQL Server in Windows per il livello dati.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

L'architettura include i componenti indicati di seguito.The architecture has the following components.

Il diagramma mostra una rete virtuale che comprende sei subnet: gateway applicazione, gestione, livello Web, livello aziendale, livello dati e Active Directory.

GeneraleGeneral

  • Gruppo di risorse.Resource group. I gruppi di risorse vengono usati per raggruppare le risorse di Azure in modo che possano essere gestiti in base alla durata, al proprietario o ad altri criteri.Resource groups are used to group Azure resources so they can be managed by lifetime, owner, or other criteria.

  • Set di disponibilità.Availability Set. Il set di disponibilità è una configurazione del Data Center per garantire la ridondanza e la disponibilità delle VM.Availability set is a datacenter configuration to provide VM redundancy and availability. Questa configurazione all'interno di un indicatore Hub Azure Stack garantisce che durante un evento di manutenzione pianificato o non pianificato sia disponibile almeno una macchina virtuale.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. Le macchine virtuali vengono inserite in un set di disponibilità che li distribuisce in più domini di errore (host Azure Stack Hub)VMs are placed in an availability set that spreads them across multiple fault domains (Azure Stack Hub hosts)

Rete e bilanciamento del caricoNetworking and load balancing

  • Rete virtuale e subnet.Virtual network and subnets. Ogni macchina virtuale di Azure viene distribuita in una rete virtuale che può essere segmentata in subnet.Every Azure VM is deployed into a virtual network that can be segmented into subnets. Creare una subnet separata per ogni livello.Create a separate subnet for each tier.

  • Load Balancer di livello 7.Layer 7 Load Balancer. Poiché il gateway applicazione non è ancora disponibile nell'hub Azure stack, sono disponibili alternative sul mercato dell'hub Azure stack , ad esempio: KEMP LoadMaster Load Balancer l'opzione di contenuto ADC / F5 Big-IP Virtual Edition o a10 vThunder ADCAs 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

  • Bilanciamento del carico.Load balancers. Usare Azure Load Balancer per distribuire il traffico di rete dal livello Web al livello business e dal livello business al 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.

  • Gruppi di sicurezza di rete (gruppi).Network security groups (NSGs). Usare gruppi per limitare il traffico di rete all'interno della rete virtuale.Use NSGs to restrict network traffic within the virtual network. Nell'architettura a tre livelli qui illustrata, ad esempio, il livello database non accetta traffico dal front-end Web, ma solo dal livello business e dalla subnet di gestione.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 non fornisce un servizio di hosting DNS, usare il server DNS in aggiunta.Azure Stack Hub does not provide its own DNS hosting service, so please use the DNS server in your ADDS.

Macchine virtualiVirtual machines

  • SQL Server Always on gruppo di disponibilità.SQL Server Always On Availability Group. Assicura disponibilità elevata al livello dati, abilitando la replica e il failover.Provides high availability at the data tier, by enabling replication and failover. Usa la tecnologia Windows Server Failover Cluster (WSFC) per il failover.It uses Windows Server Failover Cluster (WSFC) technology for failover.

  • Server di Active Directory Domain Services.Active Directory Domain Services (AD DS) Servers. Gli oggetti computer per il cluster di failover e i ruoli del cluster associati vengono creati in Active Directory Domain Services (AD DS).The computer objects for the failover cluster and its associated clustered roles are created in Active Directory Domain Services (AD DS). Configurare i server di servizi di dominio Active Directory nelle macchine virtuali nella stessa rete virtuale è il metodo preferito per aggiungere altre macchine virtuali a servizi di dominio Active Directory.Set up AD DS servers in VMs in the same virtual network are preferred method to join other VMs to AD DS. È anche possibile aggiungere le macchine virtuali ad Active Directory Domain Services esistente connettendosi alla rete virtuale aziendale con una connessione VPN.You can also join the VMs to existing Enterprise AD DS by connecting virtual network to Enterprise network with VPN connection. Con entrambi gli approcci, è necessario modificare il DNS della rete virtuale nel server DNS di servizi di dominio Active Directory (in rete virtuale o in una rete aziendale esistente) per risolvere l'FQDN del dominio di servizi di dominio Active Directory.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.Cloud Witness. Un cluster di failover richiede che più della metà dei nodi sia in esecuzione (quorum).A failover cluster requires more than half of its nodes to be running, which is known as having quorum. Se il cluster ha solo due nodi, una partizione di rete potrebbe indurre ogni nodo a ritenere di essere il nodo master.If the cluster has just two nodes, a network partition could cause each node to think it's the master node. In tal caso, è necessario un controllo per stabilire la prevalenza e ottenere il quorum.In that case, you need a witness to break ties and establish quorum. Un controllo è una risorsa, ad esempio un disco condiviso, che può stabilire la prevalenza per ottenere il quorum.A witness is a resource such as a shared disk that can act as a tie breaker to establish quorum. Il cloud di controllo è un tipo di controllo che usa Archiviazione BLOB di Azure.Cloud Witness is a type of witness that uses Azure Blob Storage. Per altre informazioni sul concetto di quorum, vedere Understanding cluster and pool quorum (Informazioni su cluster e quorum del pool).To learn more about the concept of quorum, see Understanding cluster and pool quorum. Per altre informazioni sul controllo cloud, vedere Distribuire un cloud di controllo per un cluster di failover.For more information about Cloud Witness, see Deploy a Cloud Witness for a Failover Cluster. Nell'hub Azure Stack l'endpoint del server di controllo del cloud è diverso da Azure globale.In Azure Stack Hub, the Cloud Witness endpoint is different from global Azure.

Potrebbe avere un aspetto simile al seguente:It may look like:

  • Per Azure globale:For global Azure:
    https://mywitness.blob.core.windows.net/

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

  • Jumpbox.Jumpbox. Detto anche bastion host.Also called a bastion host. È una macchina virtuale sicura in rete che viene usata dagli amministratori per connettersi alle altre macchine virtuali.A secure VM on the network that administrators use to connect to the other VMs. Il jumpbox ha un gruppo di sicurezza di rete che consente il traffico remoto solo da indirizzi IP pubblici inclusi in un elenco di indirizzi attendibili.The jumpbox has an NSG that allows remote traffic only from public IP addresses on a safe list. L'NSG dovrebbe consentire il traffico RDP (Remote Desktop Protocol).The NSG should permit remote desktop (RDP) traffic.

ConsigliRecommendations

I requisiti della propria organizzazione potrebbero essere diversi da quelli dell'architettura descritta in questo articolo.Your requirements might differ from the architecture described here. Usare queste indicazioni come punto di partenza.Use these recommendations as a starting point.

Macchine virtualiVirtual machines

Per consigli sulla configurazione delle macchine virtuali, vedere eseguire una macchina virtuale Windows nell'Hub Azure stack.For recommendations on configuring the VMs, see Run a Windows VM on Azure Stack Hub.

Rete virtualeVirtual network

Quando si crea la rete virtuale, determinare il numero di indirizzi IP richiesti dalle risorse in ogni subnet.When you create the virtual network, determine how many IP addresses your resources in each subnet require. Specificare una subnet mask e un intervallo di indirizzi di rete sufficientemente grande per gli indirizzi IP necessari, usando la notazione CIDR .Specify a subnet mask and a network address range large enough for the required IP addresses, using CIDR notation. Usare uno spazio indirizzi che rientri nei blocchi di indirizzi IP privati standard, ossia 10.0.0.0/8, 172.16.0.0/12 e 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.

Scegliere un intervallo di indirizzi che non si sovrappongano con la rete locale, nel caso in cui sia necessario configurare un gateway tra la rete virtuale e la rete locale in un secondo momento.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. Una volta creata la rete virtuale, non è possibile modificare l'intervallo di indirizzi.Once you create the virtual network, you can't change the address range.

Progettare le subnet tenendo presenti i requisiti di funzionamento e sicurezza.Design subnets with functionality and security requirements in mind. Tutte le macchine virtuali nello stesso livello o nello stesso ruolo dovrebbero far parte della stessa subnet, che può essere un limite di sicurezza.All VMs within the same tier or role should go into the same subnet, which can be a security boundary. Per altre informazioni sulla progettazione di reti virtuali e subnet, vedere pianificare e progettare reti virtuali di Azure.For more information about designing virtual networks and subnets, see Plan and design Azure Virtual Networks.

Servizi di bilanciamento del caricoLoad balancers

Non esporre le VM direttamente in Internet, ma assegnare invece a ogni VM un indirizzo IP privato.Don't expose the VMs directly to the Internet, but instead give each VM a private IP address. I client si connettono usando l'indirizzo IP pubblico associato al Load Balancer di livello 7.Clients connect using the public IP address associated with the Layer 7 Load Balancer.

Definire regole di bilanciamento del carico per indirizzare il traffico di rete alle macchine virtuali.Define load balancer rules to direct network traffic to the VMs. Per consentire il traffico HTTP, ad esempio, eseguire il mapping della porta 80 della configurazione front-end alla porta 80 nel pool di indirizzi back-end.For example, to enable HTTP traffic, map port 80 from the front-end configuration to port 80 on the back-end address pool. Quando un client invia una richiesta HTTP alla porta 80, il servizio di bilanciamento del carico consente di selezionare un indirizzo IP back-end usando un algoritmo di hash che include l'indirizzo IP di origine.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. Le richieste client vengono distribuite tra tutte le VM nel pool di indirizzi back-end.Client requests are distributed across all the VMs in the back-end address pool.

Gruppi di sicurezza di reteNetwork security groups

Usare le regole NSG per limitare il traffico fra livelli.Use NSG rules to restrict traffic between tiers. Nell'architettura a tre livelli illustrata sopra, il livello Web non comunica direttamente con il livello database.In the three-tier architecture shown above, the web tier does not communicate directly with the database tier. Per applicare questa regola, il livello del database deve bloccare il traffico in ingresso dalla subnet del livello Web.To enforce this rule, the database tier should block incoming traffic from the web tier subnet.

  1. Nega tutto il traffico in ingresso dalla rete virtuale.Deny all inbound traffic from the virtual network. Usare il tag VIRTUAL_NETWORK nella regola.(Use the VIRTUAL_NETWORK tag in the rule.)

  2. Consentire il traffico in ingresso dalla subnet del livello business.Allow inbound traffic from the business tier subnet.

  3. Consentire il traffico in ingresso dalla subnet del livello database.Allow inbound traffic from the database tier subnet itself. Questa regola consente la comunicazione tra le macchine virtuali del database, condizione necessaria per la replica e il failover del database.This rule allows communication between the database VMs, which is needed for database replication and failover.

  4. Consentire il traffico RDP (porta 3389) dalla subnet del jumpbox.Allow RDP traffic (port 3389) from the jumpbox subnet. Questa regola consente agli amministratori di connettersi al livello database dal jumpbox.This rule lets administrators connect to the database tier from the jumpbox.

Creare le regole 2 – 4 con una priorità più alta rispetto alla prima regola, in modo che vengano ignorate.Create rules 2 – 4 with higher priority than the first rule, so they override it.

Gruppi di disponibilità Always On di SQL ServerSQL Server Always On Availability Groups

È consigliabile usare i gruppi di disponibilità AlwaysOn per ottenere la disponibilità elevata di SQL Server.We recommend Always On Availability Groups for SQL Server high availability. Nelle versioni precedenti a Windows Server 2016 i gruppi di disponibilità AlwaysOn richiedono un controller di dominio e tutti i nodi del gruppo di disponibilità devono far parte dello stesso dominio Active Directory.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.

Per la disponibilità elevata a livello di macchina virtuale, tutte le VM SQL devono trovarsi in un set di disponibilità.For VM layer high availability, all SQL VMs should be in an Availability Set.

Altri livelli si connettono al database tramite un listener del gruppo di disponibilità.Other tiers connect to the database through an availability group listener. Il listener consente a un client SQL di connettersi senza conoscere il nome dell'istanza fisica di SQL Server.The listener enables a SQL client to connect without knowing the name of the physical instance of SQL Server. Le macchine virtuali che accedono al database devono far parte del dominio.VMs that access the database must be joined to the domain. Il client (in questo caso un altro livello) usa il DNS per risolvere il nome della rete virtuale del listener in indirizzi IP.The client (in this case, another tier) uses DNS to resolve the listener's virtual network name into IP addresses.

Configurare il gruppo di disponibilità AlwaysOn di SQL Server nel modo seguente:Configure the SQL Server Always On Availability Group as follows:

  1. Creare un cluster WSFC (Windows Server Failover Clustering), un gruppo di disponibilità AlwaysOn di SQL Server e una replica primaria.Create a Windows Server Failover Clustering (WSFC) cluster, a SQL Server Always On Availability Group, and a primary replica. Per altre informazioni, vedere Introduzione ai gruppi di disponibilità AlwaysOn (SQL Server).For more information, see Getting Started with Always On Availability Groups.

  2. Creare un servizio di bilanciamento del carico interno con un indirizzo privato statico.Create an internal load balancer with a static private IP address.

  3. Creare un listener del gruppo di disponibilità ed eseguire il mapping del nome DNS del listener all'indirizzo IP di un servizio di bilanciamento del carico interno.Create an availability group listener, and map the listener's DNS name to the IP address of an internal load balancer.

  4. Creare una regola di bilanciamento del carico per la porta di ascolto di SQL Server (porta TCP 1433 per impostazione predefinita).Create a load balancer rule for the SQL Server listening port (TCP port 1433 by default). La regola di bilanciamento del carico deve abilitare l'indirizzo IP mobile, detto anche Direct Server Return,The load balancer rule must enable floating IP, also called Direct Server Return. per fare in modo che la macchina virtuale risponda direttamente al client, permettendo una connessione diretta alla replica primaria.This causes the VM to reply directly to the client, which enables a direct connection to the primary replica.

Nota

Quando l'indirizzo IP mobile è abilitato, il numero di porta front-end deve corrispondere al numero di porta back-end nella regola di bilanciamento del carico.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.

Quando un client SQL cerca di connettersi, il servizio di bilanciamento del carico indirizza la richiesta di connessione alla replica primaria.When a SQL client tries to connect, the load balancer routes the connection request to the primary replica. In caso di failover a un'altra replica, il servizio di bilanciamento del carico indirizza automaticamente le nuove richieste a una nuova replica primaria.If there is a failover to another replica, the load balancer automatically routes new requests to a new primary replica. Per altre informazioni, vedere Configure an ILB listener for SQL Server Always On Availability Groups (Configurare un listener ILB per i gruppi di disponibilità AlwaysOn di SQL Server).For more information, see Configure an ILB listener for SQL Server Always On Availability Groups.

Durante un failover, le connessioni client esistenti vengono chiuse.During a failover, existing client connections are closed. Dopo il completamento del failover, le nuove connessioni verranno indirizzate alla nuova replica primaria.After the failover completes, new connections will be routed to the new primary replica.

Se l'applicazione esegue più letture rispetto alle Scritture, è possibile eseguire l'offload di alcune delle query di sola lettura a una replica secondaria.If your application makes more reads than writes, you can offload some of the read-only queries to a secondary replica. Vedere Utilizzo di un listener per connettersi a una replica secondaria di sola lettura (routing di sola lettura).See Using a Listener to Connect to a Read-Only Secondary Replica (Read-Only Routing).

Testare la distribuzione forzando un failover manuale del gruppo di disponibilità.Test your deployment by forcing a manual failover of the availability group.

Per l'ottimizzazione delle prestazioni di SQL, è anche possibile fare riferimento all'articolo procedure consigliate di SQL Server per ottimizzare le prestazioni nell'Hub Azure stack.For SQL performance optimization, you can also refer the article SQL server best practices to optimize performance in Azure Stack Hub.

JumpBoxJumpbox

Non consentire l'accesso RDP dalla rete Internet pubblica alle VM che eseguono il carico di lavoro dell'applicazione.Don't allow RDP access from the public Internet to the VMs that run the application workload. Al contrario, tutto l'accesso RDP a queste macchine virtuali deve passare attraverso il JumpBox.Instead, all RDP access to these VMs should go through the jumpbox. Un amministratore accede al jumpbox, quindi accede alle altre macchine virtuali dal jumpbox.An administrator logs into the jumpbox, and then logs into the other VM from the jumpbox. Il jumpbox consente il traffico RDP da Internet, ma solo da indirizzi IP conosciuti e attendibili.The jumpbox allows RDP traffic from the Internet, but only from known, safe IP addresses.

Il jumpbox ha requisiti di prestazioni minimi, quindi selezionare una macchina virtuale di piccole dimensioni.The jumpbox has minimal performance requirements, so select a small VM size. Creare un indirizzo IP pubblico per il jumpbox.Create a public IP address for the jumpbox. Posizionare il JumpBox nella stessa rete virtuale delle altre macchine virtuali, ma in una subnet di gestione separata.Place the jumpbox in the same virtual network as the other VMs, but in a separate management subnet.

Per proteggere il jumpbox aggiungere una regola del gruppo di sicurezza di rete che consenta le connessioni RDP solo da un set di indirizzi IP pubblici attendibili.To secure the jumpbox, add an NSG rule that allows RDP connections only from a safe set of public IP addresses. Configurare i gruppi di sicurezza di rete per le altre subnet per consentire il traffico RDP dalla subnet di gestione.Configure the NSGs for the other subnets to allow RDP traffic from the management subnet.

Considerazioni sulla scalabilitàScalability considerations

Set di scalabilitàScale sets

Per i livelli Web e business, provare a usare i set di scalabilità di macchine virtuali invece di distribuire macchine virtuali separate.For the web and business tiers, consider using virtual machine scale sets instead of deploying separate VMs. Un set di scalabilità semplifica la distribuzione e la gestione di un set di macchine virtuali identiche.A scale set makes it easy to deploy and manage a set of identical VMs. Prendere in considerazione i set di scalabilità se è necessario scalare rapidamente le VM.Consider scale sets if you need to quickly scale out VMs.

Esistono due modi per configurare le macchine virtuali distribuite in un set di scalabilità:There are two basic ways to configure VMs deployed in a scale set:

  • Usare le estensioni per configurare la VM dopo la distribuzione.Use extensions to configure the VM after it's deployed. Con questo approccio, le nuove istanze delle macchine virtuali possono richiedere più tempo per l'avvio di una macchina virtuale senza estensioni.With this approach, new VM instances may take longer to start up than a VM with no extensions.

  • Distribuire un disco gestito con un'immagine del disco personalizzata.Deploy a managed disk with a custom disk image. Questa opzione può risultare più veloce da distribuire.This option may be quicker to deploy. Richiede, tuttavia, che l'immagine venga mantenuta aggiornata.However, it requires you to keep the image up-to-date.

Per altre informazioni, vedere Considerazioni sulla progettazione per i set di scalabilità.For more information, see Design considerations for scale sets. Questa considerazione di progettazione è per lo più valida per Azure Stack Hub, tuttavia esistono alcune avvertenze:This design consideration is mostly true for Azure Stack Hub, however there are some caveats:

  • I set di scalabilità di macchine virtuali nell'hub Azure Stack non supportano l'overprovisioning o l'aggiornamento in sequenza.Virtual machine scale sets on Azure Stack Hub do not support overprovisioning or rolling upgrades.

  • Non è possibile ridimensionare automaticamente i set di scalabilità di macchine virtuali nell'hub Azure Stack.You cannot autoscale virtual machine scale sets on Azure Stack Hub.

  • È consigliabile usare Managed disks in Azure Stack Hub invece di dischi non gestiti per il set di scalabilità di macchine virtualiWe strongly recommend using Managed disks on Azure Stack Hub instead of unmanaged disks for virtual machine scale set

  • Attualmente è disponibile un limite di 700 VM nell'hub Azure Stack, che consente di ottenere tutte le macchine virtuali dell'infrastruttura Azure Stack Hub, le singole macchine virtuali e le istanze del set di scalabilità.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.

Limiti delle sottoscrizioniSubscription limits

Ogni sottoscrizione tenant dell'hub Azure Stack presenta limiti predefiniti, incluso un numero massimo di macchine virtuali per area configurata dall'operatore 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. Per ulteriori informazioni, vedere Panoramica di servizi hub, piani, offerte e sottoscrizioni di Azure stack.For more information, see Azure Stack Hub services, plans, offers, subscriptions overview. Vedere anche tipi di quote nell'Hub Azure stack.Also refer to Quota types in Azure Stack Hub.

Considerazioni relative alla sicurezzaSecurity considerations

Le reti virtuali sono un limite di isolamento del traffico in Azure.Virtual networks are a traffic isolation boundary in Azure. Per impostazione predefinita, le macchine virtuali in una rete virtuale non possono comunicare direttamente con le macchine virtuali in una rete virtuale diversa.By default, VMs in one virtual network can't communicate directly with VMs in a different virtual network.

Gruppi.NSGs. Usare i gruppi di sicurezza di rete (gruppi) per limitare il traffico da e verso Internet.Use network security groups (NSGs) to restrict traffic to and from the internet. Per altre informazioni, vedere Servizi cloud Microsoft e sicurezza di rete.For more information, see Microsoft cloud services and network security.

Rete perimetrale.DMZ. Valutare l'aggiunta di un'appliance virtuale di rete per creare una rete perimetrale tra la rete Internet e la rete virtuale di Azure.Consider adding a network virtual appliance (NVA) to create a DMZ between the Internet and the Azure virtual network. Un'appliance virtuale di rete esegue attività correlate alla rete, ad esempio impostazione di un firewall, ispezione di pacchetti, controllo e routing personalizzato.NVA is a generic term for a virtual appliance that can perform network-related tasks, such as firewall, packet inspection, auditing, and custom routing.

Crittografia.Encryption. Crittografare i dati sensibili inattivi e usare Key Vault nell'Hub Azure stack per gestire le chiavi di crittografia del database.Encrypt sensitive data at rest and use Key Vault in Azure Stack Hub to manage the database encryption keys. Per altre informazioni, vedere Configurare l'integrazione dell'insieme di credenziali delle chiavi di Azure per SQL Server in macchine virtuali di Azure (Resource Manager).For more information, see Configure Azure Key Vault Integration for SQL Server on Azure VMs. È anche consigliabile archiviare in Key Vault i segreti dell'applicazione, ad esempio le stringhe di connessione di database.It's also recommended to store application secrets, such as database connection strings, in Key Vault.

Passaggi successiviNext steps