Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Distribuisci istanze di cluster di failover di SQL Server su Amazon e EC2 Amazon FSx utilizzando Terraform
Creato da Mark Hudson (AWS) e Matt Burgess (AWS)
Riepilogo
Questo modello utilizza Terraform per distribuire istanze di cluster di failover di SQL Server (FCIs) su nodi Windows Server Failover Cluster (WSFC) su Amazon Elastic Compute Cloud (Amazon). EC2 Inoltre, il modello utilizza lo storage FSx condiviso di Amazon per dati e file di registro.
Quando si esegue la migrazione dei database SQL Server AWS, la prima scelta è Amazon RDS for SQL Server. Tuttavia, a volte Amazon RDS for SQL Server non è adatto e SQL Server deve essere distribuito su EC2 Amazon in un'architettura ad alta disponibilità. In questa soluzione, SQL Server viene installato su FCIs nodi WSFC.
Il modulo Terraform incluso in questo modello fornisce fino a due istanze di Amazon EC2 SQL Server. Un file system Amazon FSx for Windows File Server funge da testimone del quorum e archivia dati e file di registro condivisi. Indipendentemente dal numero di istanze configurate, i nodi di istanze di SQL Server creeranno e si uniranno sempre a un cluster FCI per garantire la parità ambientale. (In genere, un'istanza è configurata per lo sviluppo e due istanze per gli ambienti di produzione). Per le configurazioni che utilizzano due nodi per l'elevata disponibilità, viene fornito un Network Load Balancer interno. Il Network Load Balancer utilizza una sonda di salute configurata sul cluster FCI per identificare quale nodo è il principale.
Prerequisiti e limitazioni
Prerequisiti
Un attivo. Account AWS
Amazon Virtual Private Cloud (Amazon VPC) con due sottoreti in zone di disponibilità separate.
Set di opzioni DHCP Amazon VPC. Configura il nome di dominio in modo che si risolva nel nome di dominio Active Directory e i server dei nomi di dominio e NetBIOS in modo che puntino ai controller di dominio Active Directory. Per ulteriori informazioni, consulta Configurazione VPC in Informazioni aggiuntive.
AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD).
Amazon Machine Image (AMI) personalizzata. Per maggiori dettagli, consulta Configurazione AMI in Informazioni aggiuntive.
Bucket Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) contenente l'immagine ISO di SQL Server. Questo prerequisito è richiesto solo se si utilizza EC2 Image Builder con il file
component.yaml
fornito per creare l'AMI personalizzata.AWS Key Management Service (AWS KMS) chiave di crittografia.
Per impostazione predefinita, SQL Server viene installato utilizzando un codice prodotto della Developer Edition. I sistemi di produzione dovrebbero utilizzare un codice prodotto valido passato al modulo dalla variabile pertinente.
Limitazioni
Questa soluzione richiede AWS Managed Microsoft AD. Tuttavia, se preferisci, puoi invece utilizzare un'implementazione di Active Directory autogestita. A tale scopo, modifica il modulo Amazon FSx Terraform incluso per rimuovere l'
active_directory_id
attributo. Quindi, aggiungi i quattro attributi necessari per l'autogestione di Active Directory, come mostrato nella documentazione di Terraform. SQL Server è configurato per utilizzare l'autenticazione in modalità mista. Se preferisci, puoi utilizzare l'autenticazione solo per Windows. A tale scopo, nello script di dati utente fornito, rimuovete i
/SAPWD
parametri/SECURITYMODE
and forniti alsetup.exe
comando. È possibile rimuovere ilsql_accounts.tf
file e modificare ilinstances.tf
file per rimuovere lasql_sa_password
voce.Quando si elimina un cluster distribuito, è necessario rimuovere i corrispondenti oggetti del computer virtuale e i singoli oggetti del computer in Active Directory. Per rimuovere gli oggetti, utilizzare gli strumenti di amministrazione di Active Directory.
Alcuni Servizi AWS non sono disponibili in tutti Regioni AWS. Per la disponibilità regionale, vedi AWS Servizi per regione
. Per endpoint specifici, consulta Endpoints and quotas del servizio e scegli il link relativo al servizio.
Versioni del prodotto
Questa soluzione è stata testata con le seguenti versioni:
Windows Server 2019
SQL Server 2019
Architettura
Stack tecnologico di origine
SQL Server
Stack tecnologico di destinazione
SQL Server FCI su nodi WSFC con Amazon EC2
File server Amazon FSx per Windows
Bucket Amazon S3
AWS Secrets Manager
AWS Managed Microsoft AD
AWS KMS
AWS Identity and Access Management (IAM)
Architettura Target
Il diagramma seguente mostra l'architettura di questa soluzione.

Il diagramma mostra:
Un ruolo IAM che fornisce alle EC2 istanze l'accesso a AWS KMS Secrets Manager
Due nodi SQL Server distribuiti su EC2 istanze Amazon in sottoreti private su due zone di disponibilità
Un Network Load Balancer per facilitare le connessioni all'istanza attiva di SQL Server (non distribuito durante la configurazione di un cluster a nodo singolo)
File system Amazon FSx per Windows File Server distribuito in entrambe le sottoreti private per lo storage condiviso dai nodi di SQL Server
Secrets Manager per l'archiviazione delle credenziali e della configurazione di Active Directory e SQL Server
Bucket Amazon S3 per l'archiviazione dell'immagine di installazione di SQL Server
AWS Managed Microsoft AD per l'autenticazione di Windows
AWS KMS per creare la chiave di crittografia
Automazione e scalabilità
È possibile automatizzare l'implementazione dell'architettura di destinazione utilizzando i moduli Terraform presenti nel GitHub repository.terraform.tfvars
file per includere valori variabili specifici del proprio ambiente. Il bucket Amazon S3, AWS Managed Microsoft AD i componenti, la chiave di AWS KMS crittografia e alcuni segreti sono prerequisiti per questa distribuzione e non sono inclusi nel codice Terraform.
Strumenti
Servizi AWS
AWS Directory Service for Microsoft Active Directoryconsente ai carichi di lavoro e alle risorse compatibili con le directory di AWS utilizzare Microsoft Active Directory in. Cloud AWS In questo modello, AWS Managed Microsoft AD viene utilizzato per l'autenticazione di Windows Server e SQL Server e per il DNS.
Amazon Elastic Compute Cloud (Amazon EC2) fornisce capacità di elaborazione scalabile in. Cloud AWS Puoi avviare tutti i server virtuali di cui hai bisogno e dimensionarli rapidamente. In questo modello, le istanze del cluster di failover di SQL Server vengono installate sulle istanze Amazon EC2 .
EC2 Image Builder consente di automatizzare la creazione, la gestione e l'implementazione di immagini server personalizzate.
Amazon FSx for Windows File Server fornisce storage condiviso completamente gestito su Windows Server. In questo modello, FSx per Windows File Server fornisce lo storage condiviso per i dati e i file di registro di SQL Server e il quorum witness.
AWS Identity and Access Management (IAM) consente di gestire in modo sicuro l'accesso alle AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.
AWS Key Management Service (AWS KMS) ti aiuta a creare e controllare chiavi crittografiche per proteggere i tuoi dati. In questo modello, viene utilizzato per crittografare i segreti di Secrets Manager, lo storage SQL Server sui volumi Amazon Elastic Block Store (Amazon EBS) e il file system FSx per Windows File Server.
Con AWS Secrets Manager puoi sostituire le credenziali nel codice,incluse le password, con una chiamata API a Secrets Manager in modo da recuperare il segreto a livello di codice. In questo modello, le credenziali di Active Directory per l'installazione e l'esecuzione di SQL Server, le credenziali
sa
utente e le informazioni di connessione al database vengono archiviate in Secrets Manager.Amazon Simple Storage Service (Amazon S3) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati. Questo modello utilizza un bucket Amazon S3 per archiviare l'immagine di installazione di SQL Server.
Amazon Virtual Private Cloud (Amazon VPC) ti aiuta a lanciare AWS risorse in una rete virtuale che hai definito. Questa rete virtuale è simile a una comune rete da gestire all'interno del proprio data center, ma con i vantaggi dell'infrastruttura scalabile di AWS.
Altri strumenti
Microsoft SQL Server FCIs
vengono installati nei nodi del cluster di Windows Server. Inoltre, possono essere installati su più sottoreti. In questo modello, le istanze FCI di SQL Server vengono installate tra i nodi WSFC. Terraform
è uno strumento Infrastructure as Code (IaC) che consente di utilizzare il codice per fornire e gestire l'infrastruttura e le risorse cloud. In questo modello, Terraform viene utilizzato per creare le risorse e configurare le istanze FCI di SQL Server. Windows Server Failover Clustering
offre funzionalità di infrastruttura che supportano l'elevata disponibilità di applicazioni server ospitate come SQL Server. In questo modello, i nodi FCI utilizzano la funzionalità WSFC per fornire un'elevata disponibilità locale attraverso la ridondanza a livello di istanza.
Archivio di codici
Il codice per questo pattern è disponibile nel repository GitHub cluster-amazon-elastic-compute- cloud-amazon-fsx-microsoft -sql-server
Un
README.md
file che fornisce una panoramica della soluzione e informazioni aggiuntive sull'installazione e l'utilizzoUn set base di file di configurazione Terraform e un modulo FSx specifico di Amazon per fornire i componenti per questo modello
Uno script di configurazione dell'istanza che viene eseguito come script di dati EC2 utente Amazon
Un file
component.yam
l che Image Builder può utilizzare per creare un'AMI personalizzata
Best practice
Sicurezza e applicazione di patch
Le installazioni e le configurazioni dei prerequisiti AMI sono i requisiti minimi per distribuire i cluster FCI di SQL Server. Potrebbero essere necessari software e configurazioni aggiuntivi per conformarsi agli standard e ai requisiti di sicurezza dell'organizzazione.
Dopo la distribuzione, applica patch a Windows su base continuativa. Puoi applicare direttamente le patch alle istanze in esecuzione o creare una nuova AMI con le ultime patch di Windows e sostituire le istanze (una alla volta) utilizzando la nuova AMI. AWS rilascia AMIs ogni mese nuovi Windows contenenti le patch, i driver e gli agenti di lancio più recenti del sistema operativo. Ti consigliamo di verificare la disponibilità dell'AMI più recente quando avvii nuove istanze o quando crei immagini personalizzate.
Le EC2 istanze Amazon sono configurate per consentire tutto il traffico in uscita. Se distribuito in un ambiente di produzione, è necessario stabilire regole in uscita nel gruppo di sicurezza per limitare questo traffico alle destinazioni richieste.
Il file system FSx per Windows File Server può registrare automaticamente i registri di controllo per la condivisione di file e l'accesso a file e cartelle e inviarli alla destinazione desiderata, se questo è un requisito dell'ambiente.
Ruota i segreti di Secrets Manager automaticamente a intervalli regolari. Per la coppia di chiavi di EC2 istanze Amazon, prendi in considerazione una soluzione di rotazione automatizzata come descritto in Come usare AWS Secrets Manager per archiviare e ruotare in modo sicuro le coppie di chiavi SSH
. Per le credenziali di Active Directory e le sa
credenziali segrete di SQL Server, configura la rotazione automatica in base alle tue politiche di gestione delle password.
Gestione di Active Directory
Come parte del cluster FCI, Windows genera un Computer Name Object (CNO) in Active Directory. Il CNO risponde alle richieste DNS e inoltra il traffico al nodo SQL attivo. Non è consigliabile utilizzare questo DNS fornito da Active Directory. Il TTL è troppo alto per consentire un tempo di failover ragionevole e spesso impiega fino a 5 minuti per riflettere il nuovo indirizzo IP primario. Al contrario, per le installazioni ad alta disponibilità, il Network Load Balancer interno è configurato per il failover entro 30 secondi.
Per creare il cluster è necessario un amministratore di dominio Active Directory. Questo requisito è dovuto alle autorizzazioni elevate richieste per creare gli oggetti del cluster e modificare le autorizzazioni in Active Directory. Tuttavia, i servizi SQL Server non devono essere eseguiti come amministratore di dominio. Pertanto, si consiglia di creare un secondo utente Active Directory per questo scopo. Tuttavia, è possibile eliminare questo utente se i servizi verranno eseguiti come utente amministratore di dominio. In tal caso, l'utente amministratore di dominio deve essere aggiunto al gruppo di amministratori di Active Directory creato come parte di questo modello.
Epiche
Attività | Descrizione | Competenze richieste |
---|---|---|
Creare gruppi Active Directory. | In AWS Managed Microsoft AD, crea i seguenti gruppi:
Per maggiori dettagli, consulta Creazione di un AWS Managed Microsoft AD gruppo nella AWS documentazione. | Amministratore AD |
Crea utenti Active Directory. | In AWS Managed Microsoft AD, crea i seguenti utenti
Per maggiori dettagli, consulta Creazione di un AWS Managed Microsoft AD utente nella AWS documentazione. | Amministratore AD |
Aggiungi le credenziali di Active Directory ai segreti. | Usa Secrets Manager per creare quattro segreti per archiviare le seguenti informazioni:
Per maggiori dettagli, consulta Creare un AWS Secrets Manager segreto nella AWS documentazione. | Amministratore AWS |
Attività | Descrizione | Competenze richieste |
---|---|---|
Crea l'AMI di Windows. | Crea un'AMI Windows personalizzata che includa il software e le configurazioni prerequisiti. Per ulteriori dettagli, vedere Informazioni aggiuntive. | Amministratore AWS, AWS DevOps |
Installa Terraform. | Per installare Terraform, segui le istruzioni sul sito Web Terraform | AWS DevOps |
Clonare il repository. | Clona il repository | AWS DevOps |
Attività | Descrizione | Competenze richieste |
---|---|---|
Modifica le variabili Terraform. | Aggiorna il Ad esempio, aggiorna le | AWS DevOps |
Inizializza Terraform. | Per vedere la distribuzione proposta, vai alla radice del repository. Usa l'interfaccia a riga di comando (CLI) Terraform per | AWS DevOps |
Distribuisci risorse. | Per distribuire il cluster SQL e le risorse associate, utilizza la CLI Terraform per l'esecuzione. | AWS DevOps, amministratore AWS |
Convalida la distribuzione. | Per convalidare la distribuzione, attenersi alla seguente procedura:
| Amministratore di sistema DBA, AWS |
Risoluzione dei problemi
Problema | Soluzione |
---|---|
Il provisioning di Terraform è stato completato ma Windows Failover Cluster Manager non mostra che è stato creato un cluster o che il cluster è in uno stato non utilizzabile. | L'intera installazione delle risorse e la configurazione dei cluster possono richiedere 45-60 minuti. Una volta completato Terraform, lo script dei dati utente deve essere eseguito fino al completamento, il che richiede più riavvii. Per monitorare l'avanzamento, è possibile utilizzare la |
Dopo aver effettuato il provisioning di un cluster funzionante, l'utilizzo di Terraform per eliminare e ricreare il cluster non ha esito positivo. Terraform viene completato, ma il cluster non è configurato correttamente. | Parte del processo di provisioning prevede la registrazione di macchine e oggetti virtuali su Active Directory e Active Directory DNS. Se esistono nomi di computer per i nodi del EC2 cluster Amazon e il nodo del cluster, FCI non può inizializzarsi correttamente e il provisioning fallirà. Per risolvere questo problema, procedi nel seguente modo:
|
Risorse correlate
AWS documentazione
Informazioni aggiuntive
Informazioni sul modulo Terraform
Questo modulo utilizza una combinazione di configurazione AMI e configurazione dei dati utente per ottenere un buon mix di tempi di provisioning e stabilità. Durante il provisioning, Windows richiede più riavvii e attese. È stato implementato un metodo di controllo per proteggere dai loop infiniti durante il riavvio dei dati utente persistenti. I dati utente sono configurati per essere persistenti. Pertanto, gli script di configurazione dei dati utente devono e devono continuare a essere sviluppati per essere idempotenti. Idempotency semplifica il processo di aggiornamento, consentendo la sostituzione delle istanze durante un ciclo di aggiornamento senza la configurazione manuale per ricongiungersi o ricreare i cluster FCI.
Stringhe di connessione e clustering di failover di SQL Server
Il modulo pubblicherà un segreto contenente l'indirizzo dell'endpoint da utilizzare nelle stringhe di connessione per questo database. Il nome segreto segue il formato. {environment_name}/sqlserver/{cluster_name}/endpoint
Per le installazioni in cui viene utilizzato un solo nodo, puoi aspettarti che questo sia l'indirizzo IP dell'interfaccia SQL Server dell' EC2 istanza Amazon. Per le installazioni ad alta disponibilità (due istanze), puoi aspettarti che questo sia il nome DNS del Network Load Balancer interno.
Il clustering virtuale di failover IPs non è supportato in questo modulo. Un IP virtuale deve rimanere nella stessa sottorete per funzionare. Nel AWS, una singola sottorete non può estendersi su più zone di disponibilità. Pertanto, l'uso del virtuale IPs eliminerebbe la possibilità per questo modulo di essere considerato altamente disponibile.
A ogni EC2 istanza Amazon vengono assegnati tre indirizzi IP privati. Il loro utilizzo è il seguente:
IP primario per il traffico di rete: l'IP di origine per il traffico in uscita.
Comunicazioni FCI: utilizzate per mantenere lo stato e la sincronizzazione del cluster di failover.
SQL Server (porta TCP 1433): ascolta e ascolta anche il traffico heartbeat per determinare quale istanza è principale.
Configurazione VPC
I prerequisiti elencano un set di opzioni DHCP configurato per utilizzare Active Directory per la risoluzione DNS. Tuttavia, questo prerequisito non è un requisito rigido. Il requisito fondamentale è che le EC2 istanze devono essere in grado di risolvere il nome di dominio Active Directory. È possibile soddisfare questo requisito in altri modi, ad esempio utilizzando Amazon Route 53 Resolver gli endpoint. Per ulteriori informazioni, consulta Integrazione della risoluzione DNS del servizio di directory con Amazon Route 53 Resolvers
Configurazione AMI
L'AMI utilizzata in questo modello deve contenere il software e le configurazioni prerequisiti seguenti:
Scarica ed espandi i file di installazione di SQL Server 2019 in.
C:\SQL_Install_media
Installa le seguenti funzionalità di Windows:
Install-WindowsFeature Failover-Clustering
Install-WindowsFeature RSAT-AD-PowerShell
Install-WindowsFeature RSAT-AD-Tools
Install-WindowsFeature RSAT-Clustering-Mgmt
Install-WindowsFeature RSAT-Clustering-PowerShell
Install-WindowsFeature RSAT-Clustering-CmdInterface
Disattiva il firewall di Windows come segue:
Get-NetFirewallProfile | Set-NetFirewallProfile -Enabled False
Abilita il metodo di autenticazione CredSSP (
<domain>
sostituiscilo con il nome di dominio Windows dell'organizzazione) come segue:Enable-WSManCredSSP -Role "Server" -Force
Enable-WSManCredSSP -Role "Client" -DelegateComputer *.<domain>.com -Force
Imposta le seguenti chiavi di registro:
Consenti le credenziali di autenticazione NTLM:
HKLM:\Software\Policies\Microsoft\Windows\CredentialsDelegation
Valore:
AllowFreshCredentialsWhenNTLMOnly
Valore: 1
Tipo:
REG_DWORD
Consenti ai computer del dominio locale di utilizzare NTLM da PowerShell:
Percorso:
HKLM:\Software\Policies\Microsoft\Windows\CredentialsDelegation\AllowFreshCredentialsWhenNTLMOnly
Valore:
1
Valore:
wsman/*.<domain>.com
Tipo:
REG_SZ
Configura la PowerShell Galleria
come segue: [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
Installa i seguenti PowerShell moduli Windows
*
:Install-Module -Name ComputerManagementDsc
Install-Module -Name FailOverClusterDsc
Install-Module -Name PSDscResources
Install-Module -Name xSmbShare
Install-Module -Name xActiveDirectory
Install-Module -Name SqlServer
Per utilizzare Image Builder per creare l'AMI, segui le istruzioni in Creare una pipeline di immagini utilizzando la procedura guidata della console di Image Builder nella documentazione di EC2 Image Builder. Per creare il componente della ricetta con i prerequisiti precedenti, procedi nel seguente modo:
Scarica il file component.yaml
dalla cartella del ami
repository. GitHubCopiate il contenuto in un nuovo componente Image Builder.
Aggiorna i seguenti segnaposto con le tue informazioni:
<domain>
— Il tuo nome di dominio Active Directory<bucket_name>
— Nome del bucket Amazon S3 che contiene l'immagine SQL Server