Distribuisci istanze di cluster di failover di SQL Server su Amazon e EC2 Amazon FSx utilizzando Terraform - Prontuario AWS

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_idattributo. 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 al setup.exe comando. È possibile rimuovere il sql_accounts.tf file e modificare il instances.tf file per rimuovere la sql_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:

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.

Architettura per distribuire istanze di cluster di failover di SQL Server tra i nodi del cluster di failover di Windows Server su Amazon. EC2

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. È necessario modificare il 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. Nel repository sono disponibili le seguenti risorse:

  • Un README.md file che fornisce una panoramica della soluzione e informazioni aggiuntive sull'installazione e l'utilizzo

  • Un 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àDescrizioneCompetenze richieste

Creare gruppi Active Directory.

In AWS Managed Microsoft AD, crea i seguenti gruppi:

  • Gruppo di amministratori del cluster: questo gruppo verrà aggiunto al gruppo Administrators locale su ogni nodo del cluster.

  • Gruppo di desktop remoto del cluster: questo gruppo verrà aggiunto al gruppo locale Remote Desktop Users su ogni nodo del cluster.

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

  • Utente amministratore di dominio: utilizza questo account per creare il cluster.

  • Utente di dominio: i servizi di SQL Server utilizzeranno questo account per l'esecuzione. Aggiungi questo utente al gruppo di amministratori del cluster creato nell'attività precedente.

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:

  • Nome utente dell'amministratore di dominio

  • Password dell'utente dell'amministratore di dominio

  • Nome utente dell'utente del dominio

  • Password dell'utente del dominio

Per maggiori dettagli, consulta Creare un AWS Secrets Manager segreto nella AWS documentazione.

Amministratore AWS
AttivitàDescrizioneCompetenze 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 di questo pattern. Per maggiori dettagli, consulta Clonazione di un repository sul sito web. GitHub

AWS DevOps
AttivitàDescrizioneCompetenze richieste

Modifica le variabili Terraform.

Aggiorna il terraform.tfvars file fornito per impostare tutte le variabili sui valori appropriati per il tuo ambiente.

Ad esempio, aggiorna le domain_group_rdp_users variabili domain_group_administrators and per utilizzare il nome di dominio Active Directory e il nome dei gruppi Active Directory creati in precedenza.

AWS DevOps

Inizializza Terraform.

Per vedere la distribuzione proposta, vai alla radice del repository. Usa l'interfaccia a riga di comando (CLI) Terraform per terraform init eseguire e poi eseguire. terraform plan

AWS DevOps

Distribuisci risorse.

Per distribuire il cluster SQL e le risorse associate, utilizza la CLI Terraform per l'esecuzione. terraform apply

AWS DevOps, amministratore AWS

Convalida la distribuzione.

Per convalidare la distribuzione, attenersi alla seguente procedura:

  1. Connect a una delle EC2 istanze Windows Amazon distribuite utilizzando Remote Desktop.

  2. Per ulteriori dettagli, vedi Connect alla tua istanza di Windows usando RDP nella AWS documentazione.

  3. Apri Windows Failover Cluster Manager. Verifica che il cluster sia stato creato e che il ruolo di SQL Server sia stato creato e sia in esecuzione.

  4. Per testare la connettività e l'autenticazione con SQL Server, utilizza uno strumento di database come SQL Server Management Studio per connetterti all'endpoint SQL Server. (Il valore dell'endpoint è memorizzato in Secrets Manager.) Per maggiori dettagli, consulta Connect to Microsoft SQL Server on Amazon EC2 nella AWS documentazione.

Amministratore di sistema DBA, AWS

Risoluzione dei problemi

ProblemaSoluzione

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 Checkpoints directory nell'C:\unità e accedere all'installazione di SQL Server. C:\Program Data\Microsoft SQL Server\150\Log Al termine, il messaggio Installazione completata è disponibile nel C:\ProgramData\Amazon\EC2-Windows\Launch\Log\UserdataExecution.log file.

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:

  1. Elimina i EC2 nodi Amazon, il computer virtuale del cluster e l'ID del cluster negli utenti e nei computer di Active Directory.

  2. Elimina la voce DNS per il computer virtuale del cluster in Active Directory DNS.

  3. Esegui il seguente comando per eliminare la risorsa Terraform, stringa casuale, id del cluster. terragrunt destroy -target=random_string.cluster_id Questa azione eliminerà le EC2 istanze Amazon esistenti.

  4. Esegui terraform apply e aspettati le seguenti tre nuove risorse: due EC2 istanze Amazon FCI e 1 ID cluster di stringhe casuali.

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 (post di blog).AWS

Configurazione AMI

L'AMI utilizzata in questo modello deve contenere il software e le configurazioni prerequisiti seguenti:

  1. Scarica ed espandi i file di installazione di SQL Server 2019 in. C:\SQL_Install_media

  2. 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

  3. Disattiva il firewall di Windows come segue:

    • Get-NetFirewallProfile | Set-NetFirewallProfile -Enabled False

  4. 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

  5. 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

  6. 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

  7. 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:

  1. Scarica il file component.yaml dalla cartella del ami repository. GitHub

  2. Copiate il contenuto in un nuovo componente Image Builder.

  3. 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