Implante instâncias de cluster de failover do SQL Server na Amazon EC2 e na Amazon FSx usando o Terraform - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Implante instâncias de cluster de failover do SQL Server na Amazon EC2 e na Amazon FSx usando o Terraform

Criado por Mark Hudson (AWS) e Matt Burgess (AWS)

Resumo

Esse padrão usa o Terraform para implantar instâncias de cluster de failover do SQL Server (FCIs) em nós do Windows Server Failover Cluster (WSFC) no Amazon Elastic Compute Cloud (Amazon). EC2 Além disso, o padrão usa o armazenamento FSx compartilhado da Amazon para dados e arquivos de log.

Quando os bancos de dados do SQL Server são migrados para AWS, a primeira opção é o Amazon RDS for SQL Server. No entanto, às vezes o Amazon RDS for SQL Server não é adequado e o SQL Server deve ser implantado na EC2 Amazon em uma arquitetura altamente disponível. Nessa solução, o SQL Server FCIs é instalado nos nós do WSFC.

O módulo Terraform incluído nesse padrão provisiona até duas instâncias EC2 do Amazon SQL Server. Um sistema de arquivos Amazon FSx para Windows File Server atua como testemunha do quórum e armazena dados compartilhados e arquivos de log. Independentemente do número de instâncias configuradas, os nós da instância do SQL Server sempre criarão e ingressarão em um cluster FCI para garantir a paridade ambiental. (Normalmente, uma instância é configurada para desenvolvimento e duas instâncias para ambientes de produção.) Para configurações que usam dois nós para alta disponibilidade, um Network Load Balancer interno é provisionado. O Network Load Balancer usa uma sonda de integridade configurada no cluster FCI para identificar qual nó é o principal.

Pré-requisitos e limitações

Pré-requisitos

  • Um ativo Conta da AWS.

  • Amazon Virtual Private Cloud (Amazon VPC) com duas sub-redes em zonas de disponibilidade separadas.

  • Conjunto de opções DHCP do Amazon VPC. Configure o nome de domínio para resolver seu nome de domínio do Active Directory e o domínio e os servidores de nomes NetBIOS para apontar para seus controladores de domínio do Active Directory. Para obter mais informações, consulte Configuração de VPC em Informações adicionais.

  • AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD).

  • Imagem de máquina personalizada da Amazon (AMI). Para obter mais detalhes, consulte Configuração da AMI em Informações adicionais.

  • Bucket do Amazon Simple Storage Service (Amazon S3) contendo a imagem ISO do SQL Server. Esse pré-requisito só é necessário se você estiver usando o EC2 Image Builder com o component.yaml arquivo fornecido para criar a AMI personalizada.

  • AWS Key Management Service (AWS KMS) chave de criptografia.

  • Por padrão, o SQL Server é instalado usando uma chave do produto Developer Edition. Espera-se que os sistemas de produção usem uma chave de produto válida passada para o módulo pela variável relevante.

Limitações

  • Essa solução requer AWS Managed Microsoft AD. No entanto, se preferir, você pode usar uma implementação autogerenciada do Active Directory em vez disso. Para fazer isso, modifique o módulo Amazon FSx Terraform incluído para remover o active_directory_id atributo. Em seguida, adicione os quatro atributos necessários para o Active Directory autogerenciado, conforme mostrado na documentação do Terraform.

  • O SQL Server está configurado para usar a autenticação de modo misto. Se preferir, você pode usar a autenticação somente para Windows. Para fazer isso, no script de dados do usuário fornecido, remova os /SAPWD parâmetros /SECURITYMODE e fornecidos ao setup.exe comando. Você pode remover o sql_accounts.tf arquivo e modificá-lo para remover a sql_sa_password entrada. instances.tf

  • Ao excluir um cluster implantado, você deve remover os objetos correspondentes do computador virtual e os objetos individuais do computador no Active Directory. Para remover os objetos, use as ferramentas administrativas do Active Directory.

  • Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para saber a disponibilidade da região, consulte AWS Serviços por região. Para endpoints específicos, consulte Endpoints e cotas de serviço e escolha o link para o serviço.

Versões do produto

Essa solução foi testada com as seguintes versões:

Arquitetura

Pilha de tecnologia de origem

  • SQL Server

Pilha de tecnologias de destino

  • SQL Server FCI em nós WSFC usando a Amazon EC2

  • Servidor FSx de arquivos Amazon para Windows

  • Bucket do Amazon S3

  • AWS Secrets Manager

  • AWS Managed Microsoft AD

  • AWS KMS

  • AWS Identity and Access Management (IAM)

Arquitetura de destino

O diagrama a seguir mostra a arquitetura dessa solução.

Arquitetura para implantar instâncias de cluster de failover do SQL Server em nós de cluster de failover do Windows Server na Amazon. EC2

O diagrama mostra o seguinte:

  • Uma função do IAM que fornece às EC2 instâncias acesso ao Secrets Manager AWS KMS e ao Secrets Manager

  • Dois nós do SQL Server implantados em EC2 instâncias da Amazon em sub-redes privadas em duas zonas de disponibilidade

  • Um Network Load Balancer para facilitar as conexões com a instância ativa do SQL Server (não implantado ao configurar um cluster de nó único)

  • Sistema de arquivos Amazon FSx para Windows File Server implantado em ambas as sub-redes privadas para armazenamento compartilhado pelos nós do SQL Server

  • Secrets Manager para armazenar credenciais e configurações do Active Directory e do SQL Server

  • Bucket Amazon S3 para armazenar a imagem de instalação do SQL Server

  • AWS Managed Microsoft AD para autenticação do Windows

  • AWS KMS para criar a chave de criptografia

Automação e escala

Você pode automatizar a implantação da arquitetura de destino usando os módulos do Terraform que estão no GitHub repositório. Você deve modificar o terraform.tfvars arquivo para incluir valores de variáveis específicos do seu ambiente. O bucket, os AWS Managed Microsoft AD componentes, a chave de AWS KMS criptografia e alguns segredos do Amazon S3 são pré-requisitos para essa implantação e não estão incluídos no código do Terraform.

Ferramentas

Serviços da AWS

  • AWS Directory Service for Microsoft Active Directorypermite que suas cargas de trabalho e AWS recursos com reconhecimento de diretório usem o Microsoft Active Directory no. Nuvem AWS Nesse padrão, AWS Managed Microsoft AD é usado para autenticação do Windows Server e SQL Server e para DNS.

  • O Amazon Elastic Compute Cloud (Amazon EC2) fornece capacidade de computação escalável no. Nuvem AWS Você poderá iniciar quantos servidores virtuais precisar e escalá-los na vertical rapidamente. Nesse padrão, as instâncias do cluster de failover do SQL Server são instaladas nas EC2 instâncias da Amazon.

  • EC2 O Image Builder ajuda você a automatizar a criação, o gerenciamento e a implantação de imagens personalizadas do servidor.

  • O Amazon FSx para Windows File Server fornece armazenamento compartilhado totalmente gerenciado no Windows Server. Nesse padrão, FSx para Windows, o File Server fornece armazenamento compartilhado para dados e arquivos de log do SQL Server e para a testemunha do quórum.

  • AWS Identity and Access Management (IAM) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.

  • AWS Key Management Service (AWS KMS) ajuda você a criar e controlar chaves criptográficas para ajudar a proteger seus dados. Nesse padrão, ele é usado para criptografar segredos do Secrets Manager, o armazenamento do SQL Server nos volumes do Amazon Elastic Block Store (Amazon EBS) e o sistema de arquivos do FSx Windows File Server.

  • O AWS Secrets Manager ajuda a substituir credenciais codificadas, incluindo senhas, por uma chamada de API ao Secrets Manager para recuperar o segredo por programação. Nesse padrão, as credenciais do Active Directory para instalar e executar o SQL Server, as credenciais do sa usuário e as informações de conexão do banco de dados são armazenadas no Secrets Manager.

  • O Amazon Simple Storage Service (Amazon S3) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados. Esse padrão usa um bucket do Amazon S3 para armazenar a imagem de instalação do SQL Server.

  • A Amazon Virtual Private Cloud (Amazon VPC) ajuda você a lançar AWS recursos em uma rede virtual que você definiu. Essa rede virtual é semelhante a uma rede tradicional que você operaria no próprio datacenter, com os benefícios de usar a infraestrutura escalável da AWS.

Outras ferramentas

  • O Microsoft SQL Server FCIs é instalado nos nós de cluster do Windows Server. Além disso, eles podem ser instalados em várias sub-redes. Nesse padrão, as instâncias FCI do SQL Server são instaladas nos nós do WSFC.

  • O Terraform é uma ferramenta de infraestrutura como código (IaC) que ajuda você a usar o código para provisionar e gerenciar a infraestrutura e os recursos da nuvem. Nesse padrão, o Terraform é usado para criar os recursos e configurar as instâncias FCI do SQL Server.

  • O Clustering de Failover do Windows Server fornece recursos de infraestrutura que oferecem suporte à alta disponibilidade de aplicativos de servidor hospedados, como o SQL Server. Nesse padrão, os nós FCI usam a funcionalidade do WSFC para fornecer alta disponibilidade local por meio de redundância no nível da instância.

Repositório de código

O código desse padrão está disponível no repositório GitHub cluster-amazon-elastic-compute- cloud-amazon-fsx-microsoft -sql-server. Os seguintes recursos estão disponíveis no repositório:

  • Um README.md arquivo que fornece uma visão geral da solução e informações adicionais de instalação e uso

  • Um conjunto básico de arquivos de configuração do Terraform e um módulo FSx específico da Amazon para provisionar os componentes desse padrão

  • Um script de configuração de instância que é executado como um script de dados EC2 do usuário da Amazon

  • Um arquivo component.yam l que o Image Builder pode usar para criar uma AMI personalizada

Práticas recomendadas

Segurança e aplicação de patches

  • As instalações e configurações pré-requisitos da AMI são os requisitos mínimos para implantar clusters FCI do SQL Server. Software e configurações adicionais podem ser necessários para cumprir os padrões e os requisitos de segurança da sua organização.

  • Após a implantação, corrija o Windows continuamente. Corrija diretamente as instâncias em execução ou crie uma nova AMI com os patches mais recentes do Windows e substitua as instâncias (uma por vez) usando a nova AMI. AWS lança AMIs mensalmente o novo Windows que contém os patches, drivers e agentes de lançamento mais recentes do sistema operacional. Recomendamos que você verifique a AMI mais recente ao executar novas instâncias ou ao criar suas próprias imagens personalizadas.

  • As EC2 instâncias da Amazon são configuradas para permitir todo o tráfego de saída. Quando implantado em um ambiente de produção, as regras de saída no grupo de segurança devem ser implementadas para restringir esse tráfego aos destinos necessários.

  • O sistema FSx de arquivos do Windows File Server pode registrar automaticamente os registros de auditoria para compartilhamento de arquivos e acesso a arquivos e pastas e enviá-los para o destino desejado, se isso for um requisito em seu ambiente.

  • Alterne os segredos do Secrets Manager automaticamente e regularmente. Para o par de chaves de EC2 instância da Amazon, considere uma solução de rotação automatizada, conforme descrito em Como usar o AWS Secrets Manager para armazenar e alternar pares de chaves SSH com segurança. Para as credenciais do Active Directory e os segredos das sa credenciais do SQL Server, configure a rotação automática de acordo com suas políticas de gerenciamento de senhas.

Gerenciamento do Active Directory

  • Como parte do cluster FCI, o Windows gera um objeto de nome de computador (CNO) no Active Directory. O CNO responde às solicitações de DNS e encaminha o tráfego para o nó SQL ativo. Não recomendamos o uso desse DNS fornecido pelo Active Directory. O TTL é muito alto para fornecer um tempo razoável de failover e geralmente leva mais de 5 minutos para refletir o novo endereço IP primário. Por outro lado, para instalações de alta disponibilidade, o Network Load Balancer interno é configurado para failover em 30 segundos.

  • É necessário um administrador de domínio do Active Directory para criar o cluster. Esse requisito se deve às permissões elevadas necessárias para criar os objetos de cluster e modificar as permissões no Active Directory. No entanto, os serviços do SQL Server não precisam ser executados como administrador de domínio. Portanto, recomendamos que você crie um segundo usuário do Active Directory para essa finalidade. No entanto, você pode eliminar esse usuário se os serviços forem executados como usuário administrador do domínio. Nesse caso, o usuário administrador do domínio deve ser adicionado ao grupo de administradores do Active Directory criado como parte desse padrão.

Épicos

TarefaDescriçãoHabilidades necessárias

Crie grupos do Active Directory.

Em AWS Managed Microsoft AD, crie os seguintes grupos:

  • Grupo de administradores de cluster — Esse grupo será adicionado ao grupo local de administradores em cada nó do cluster.

  • Grupo de área de trabalho remota em cluster — Esse grupo será adicionado ao grupo local de usuários de área de trabalho remota em cada nó do cluster.

Para obter mais detalhes, consulte Criação de um AWS Managed Microsoft AD grupo na AWS documentação.

Administrador do AD

Crie usuários do Active Directory.

Em AWS Managed Microsoft AD, crie os seguintes usuários

  • Usuário administrador do domínio — Use essa conta para criar o cluster.

  • Usuário do domínio — Os serviços do SQL Server usarão essa conta para execução. Adicione esse usuário ao grupo de administradores de cluster que você criou na tarefa anterior.

Para obter mais detalhes, consulte Criação de um AWS Managed Microsoft AD usuário na AWS documentação.

Administrador do AD

Adicione credenciais do Active Directory aos segredos.

Use o Secrets Manager para criar quatro segredos para armazenar as seguintes informações:

  • Nome de usuário do usuário administrador do domínio

  • Senha do usuário administrador do domínio

  • Nome de usuário do usuário do domínio

  • Senha do usuário do domínio

Para obter mais detalhes, consulte Criar um AWS Secrets Manager segredo na AWS documentação.

Administrador da AWS
TarefaDescriçãoHabilidades necessárias

Crie a AMI do Windows.

Crie uma AMI personalizada do Windows que inclua o software e as configurações pré-requisitos. Para obter mais detalhes, consulte Informações adicionais.

Administrador da AWS, AWS DevOps

Instale o Terraform.

Para instalar o Terraform, siga as instruções no site do Terraform.

AWS DevOps

Clonar o repositório.

Clone o repositório desse padrão. Para obter mais detalhes, consulte Clonar um repositório no GitHub site.

AWS DevOps
TarefaDescriçãoHabilidades necessárias

Modifique as variáveis do Terraform.

Atualize o terraform.tfvars arquivo fornecido para definir todas as variáveis com valores apropriados para seu ambiente.

Por exemplo, domain_group_administrators atualize domain_group_rdp_users as variáveis e para usar seu nome de domínio do Active Directory e o nome dos grupos do Active Directory criados anteriormente.

AWS DevOps

Inicializar o Terraform.

Para ver a implantação proposta, navegue até a raiz do repositório. Use a interface de linha de comando (CLI) do Terraform para terraform init executar e depois executar. terraform plan

AWS DevOps

Implante recursos.

Para implantar o cluster SQL e os recursos associados, use a CLI do Terraform para executar. terraform apply

AWS DevOps, administrador da AWS

Valide a implantação.

Para validar a implantação, use as seguintes etapas:

  1. Conecte-se a uma das EC2 instâncias implantadas do Windows Amazon usando o Remote Desktop.

  2. Para obter mais detalhes, consulte Conecte-se à sua instância do Windows usando RDP na AWS documentação.

  3. Abra o Gerenciador de Cluster de Failover do Windows. Valide se o cluster foi criado e se a função do SQL Server foi criada e está em execução.

  4. Para testar a conectividade e a autenticação com o SQL Server, use uma ferramenta de banco de dados, como o SQL Server Management Studio, para se conectar ao endpoint do SQL Server. (O valor do endpoint é armazenado no Secrets Manager.) Para obter mais detalhes, consulte Connect to Microsoft SQL Server EC2 na Amazon na AWS documentação.

DBA, administrador de sistemas da AWS

Solução de problemas

ProblemaSolução

O provisionamento do Terraform foi concluído, mas o Gerenciador de Cluster de Failover do Windows não mostra que um cluster foi criado ou que o cluster está em um estado inoperável.

Toda a instalação dos recursos e a configuração dos clusters podem levar de 45 a 60 minutos. Após a conclusão do Terraform, o script de dados do usuário deve ser executado até a conclusão, o que requer várias reinicializações. Para monitorar o progresso, você pode usar o Checkpoints diretório na C:\ unidade e os logins de instalação do SQL ServerC:\Program Data\Microsoft SQL Server\150\Log. Ao terminar, a mensagem Instalação concluída estará disponível no C:\ProgramData\Amazon\EC2-Windows\Launch\Log\UserdataExecution.log arquivo.

Depois de provisionar um cluster em funcionamento, o uso do Terraform para excluir e recriar o cluster não é bem-sucedido. O Terraform é concluído, mas o cluster não está configurado corretamente.

Parte do processo de provisionamento envolve o registro de máquinas e objetos virtuais no Active Directory e no DNS do Active Directory. Quando existem nomes de computador para os nós do EC2 cluster da Amazon e para o nó do cluster, o FCI não pode inicializar corretamente e falhará no provisionamento.

Para corrigir esse problema, execute as seguintes etapas:

  1. Exclua os EC2 nós da Amazon, o computador virtual do cluster e o ID do cluster nos usuários e computadores do Active Directory.

  2. Exclua a entrada DNS do computador virtual do cluster no DNS do Active Directory.

  3. Execute o comando a seguir para excluir o recurso terragrunt destroy -target=random_string.cluster_id Terraform, string aleatória, id do cluster. Essa ação excluirá as EC2 instâncias existentes da Amazon.

  4. Execute terraform apply e espere os três novos recursos a seguir: duas EC2 instâncias FCI da Amazon e 1 ID de cluster de string aleatória.

Recursos relacionados

AWS documentação

Mais informações

Informações do módulo Terraform

Este módulo usa uma combinação de configuração de AMI e configuração de dados do usuário para obter uma boa combinação de tempo de provisionamento e estabilidade. Durante o provisionamento, o Windows exige várias reinicializações e esperas. Um método de checkpoints foi implementado para proteger contra loops infinitos durante a reinicialização dos dados persistentes do usuário. Os dados do usuário estão configurados para serem persistentes. Portanto, os scripts de configuração de dados do usuário devem, e devem continuar, sendo desenvolvidos para serem idempotentes. A idempotência simplifica o processo de atualização, permitindo que as instâncias sejam trocadas durante um ciclo de atualização sem configuração manual para reingressar ou recriar clusters FCI.

Cadeias de conexão e cluster de failover do SQL Server

O módulo publicará um segredo contendo o endereço do endpoint que deve ser usado nas cadeias de conexão desse banco de dados. O nome secreto segue o formato{environment_name}/sqlserver/{cluster_name}/endpoint. Para instalações em que apenas um nó é usado, você pode esperar que esse seja o endereço IP da interface do SQL Server da EC2 instância Amazon. Para instalações de alta disponibilidade (duas instâncias), você pode esperar que esse seja o nome DNS do Network Load Balancer interno.

O agrupamento virtual de failover IPs não é suportado neste módulo. Um IP virtual deve permanecer na mesma sub-rede para funcionar. Em AWS, uma única sub-rede não pode abranger várias zonas de disponibilidade. Portanto, o uso do virtual IPs eliminaria a capacidade desse módulo ser considerado altamente disponível.

Cada EC2 instância da Amazon recebe três endereços IP privados. Seu uso é o seguinte:

  • IP primário para tráfego de rede — O IP de origem para tráfego de saída.

  • Comunicações FCI — usadas para manter o estado e a sincronização do cluster de failover.

  • SQL Server (porta TCP 1433) — Ouve e também escuta o tráfego de pulsação para determinar qual instância é primária.

Configuração de VPC

Os pré-requisitos listam um conjunto de opções de DHCP configurado para usar o Active Directory para resolução de DNS. No entanto, esse pré-requisito não é um requisito difícil. O requisito básico é que as EC2 instâncias sejam capazes de resolver seu nome de domínio do Active Directory. Atender a esse requisito pode ser feito de outras formas, como usando Amazon Route 53 Resolver endpoints. Para obter mais informações, consulte Integrando a resolução de DNS do seu serviço de diretório com os resolvedores do Amazon Route 53 (AWS postagem no blog).

Configuração da AMI

A AMI usada nesse padrão deve conter os seguintes pré-requisitos de software e configurações:

  1. Baixe e expanda os arquivos de instalação do SQL Server 2019 para C:\SQL_Install_media o.

  2. Instale os seguintes recursos do 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. Desative o firewall do Windows da seguinte forma:

    • Get-NetFirewallProfile | Set-NetFirewallProfile -Enabled False

  4. Ative o método de autenticação CredSSP (<domain>substitua pelo nome de domínio Windows da sua organização) da seguinte forma:

    • Enable-WSManCredSSP -Role "Server" -Force

    • Enable-WSManCredSSP -Role "Client" -DelegateComputer *.<domain>.com -Force

  5. Defina as seguintes chaves de registro:

    • Permitir credenciais de autenticação NTLM:

      • HKLM:\Software\Policies\Microsoft\Windows\CredentialsDelegation

        • Nome: AllowFreshCredentialsWhenNTLMOnly

        • Valor: 1

        • Tipo: REG_DWORD

    • Permita que computadores de domínio local usem o NTLM a partir de: PowerShell

      • Caminho: HKLM:\Software\Policies\Microsoft\Windows\CredentialsDelegation\AllowFreshCredentialsWhenNTLMOnly

        • Nome: 1

        • Valor: wsman/*.<domain>.com

        • Tipo: REG_SZ

  6. Configure a PowerShell Galeria da seguinte forma:

    • [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

    • Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force

    • Set-PSRepository -Name PSGallery -InstallationPolicy Trusted

  7. Instale os seguintes PowerShell módulos do 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

Para usar o Image Builder para criar a AMI, siga as instruções em Criar um pipeline de imagem usando o assistente de console do EC2 Image Builder na documentação do Image Builder. Para criar o componente da receita com os pré-requisitos anteriores, use as seguintes etapas:

  1. Baixe o arquivo component.yaml da ami pasta do repositório. GitHub

  2. Copie o conteúdo em um novo componente do Image Builder.

  3. Atualize os seguintes espaços reservados com suas informações:

    • <domain>— Seu nome de domínio do Active Directory

    • <bucket_name>— Nome do bucket Amazon S3 que contém a imagem do SQL Server