Exportar (0) Imprimir
Expandir Tudo

Tutorial: espelhamento de banco de dados para a recuperação de desastres no Azure

Atualizado: abril de 2014

Este tutorial mostra como implementar o espelhamento de banco de dados do SQL Server para recuperação de desastres de ponta a ponta usando as máquinas virtuais do Azure em dois datacenters diferentes do Azure. Ao implementar o espelhamento de banco de dados em dois datacenters do Azure, você deverá usar certificados de servidor. Os servidores de espelhamento de banco de dados não podem residir no mesmo domínio do Ative Directory porque não há nenhuma comunicação interna no Azure entre datacenters. Você deve estabelecer a comunicação entre os servidores de banco de dados por meio de seus pontos de extremidade de serviço em nuvem pública.

Neste tutorial, você implantará o espelhamento de banco de dados assíncrono como uma solução de recuperação de desastres usando duas máquinas virtuais (VMs) do SQL Server. No fim do tutorial, sua solução de alta disponibilidade do SQL Server consistirá nos seguintes elementos:

  • Duas redes virtuais, uma sendo executada no datacenter US West e a outra executada no datacenter US East

  • Uma máquina virtual do SQL Server (SQL1) implantada na rede virtual no datacenter US West

  • Um SQL Server (VM SQL2) implantado na rede virtual no datacenter US East

  • SQL1 é o servidor de banco de dados principal

  • SQL2 é o servidor de banco de dados espelho

Este tutorial tem o objetivo de mostrar as etapas necessárias para configurar a solução descrita acima sem elaborar os detalhes de cada etapa. Consequentemente, em vez de mostrar as etapas de configuração de GUI, ele usa o script do PowerShell e Transact-SQL (T-SQL) para orientá-lo rapidamente a cada etapa. Ele presume o seguinte:

  1. Em uma janela do PowerShell no computador local, importe o módulo do Azure, baixe um arquivo de configurações de publicação no seu computador e conecte a sessão do PowerShell à sua assinatura do Azure importando as configurações de publicação baixadas.

    Import-Module `
        "C:\Program Files (x86)\Microsoft SDKs\Azure\PowerShell\Azure\Azure.psd1"
    Get-AzurePublishSettingsFile
    Import-AzurePublishSettingsFile <publishsettingsfilepath> 
    

    O comando Get-AzurePublishgSettingsFile gera automaticamente um certificado de gerenciamento que o Azure baixa para o seu computador. Um navegador será aberto automaticamente e você receberá uma solicitação para inserir as credenciais de conta da Microsoft para sua assinatura do Azure. O arquivo.publishsettings baixado contém todas as informações de que você precisa para gerenciar sua assinatura do Azure. Depois de salvar o arquivo em um diretório local, importe-o usando o comando Import-AzurePublishSettingsFile.

    securitySegurança Observação
    O arquivo publishsettings contém as suas credenciais (sem codificação) que são usadas para administrar suas assinaturas e serviços do Azure. A prática recomendada de segurança para esse arquivo é armazená-lo temporariamente fora dos diretórios de origem (por exemplo, na pasta Bibliotecas\Documentos) e, depois, excluí-lo quando a importação for concluída. Um usuário mal-intencionado que obtém acesso ao arquivo publishsettings pode editar, criar e excluir seus serviços do Azure.

  2. Defina uma série de variáveis que você usará para criar sua infraestrutura de TI na nuvem.

    $location1 = "West US"
    $location2 = "East US"
    $affinityGroupName1 = "ContosoWest"
    $affinityGroupName2 = "ContosoEast"
    $affinityGroupDescription = "Contoso SQL HADR Affinity Group"
    $affinityGroupLabel = "IaaS BI Affinity Group"
    $workingDir = "C:\scripts\"
    $networkConfigPath = $workingDir + "Network.netcfg"
    $virtualNetworkName1 = "Network1" 
    $virtualNetworkName2 = "Network2" 
    $storageAccountName1 = "<uniquestorageaccountname1>" 
    $storageAccountName2 = "<uniquestorageaccountname2>" 
    $storageAccountLabel = "Contoso SQL HADR Storage Account"
    $storageAccountContainer1 = "https://" + $storageAccountName1 + ".blob.core.windows.net/vhds/"
    $storageAccountContainer2 = "https://" + $storageAccountName2 + ".blob.core.windows.net/vhds/"
    $serviceName1 = "<uniqueservicename1>" 
    $serviceName2 = "<uniqueservicename2>" 
    $sqlImageName = (Get-AzureVMImage | where {$_.Label -like "SQL Server 2012 SP1 Enterprise*"} | sort PublishedDate -Descending)[0].ImageName
    $subnetName = "Back"
    $domainUser = "Administrator"
    $sql1ServerName = "SQL1"
    $sql2ServerName = "SQL2"
    $dataDiskSize = 100
    $vmAdminUser = "AzureAdmin" 
    $vmAdminPassword = "Contoso!000" 
    

    Preste atenção no seguinte para garantir que os comandos tenham êxito depois:

    • As variáveis $storageAccountName1, $storageAccountName2, $serviceName1 e $serviceName2 devem ser exclusivas porque são usados para identificar a conta de armazenamento na nuvem e serviço em nuvem, respectivamente, na internet. Além disso, você precisará usar os valores de $serviceName1 e $serviceName2 ao configurar a sessão de espelhamento de banco de dados posteriormente.

    • Os nomes especificados para as variáveis $affinityGroupName1, $affinityGroupName2, $virtualNetworkName1 e $virtualNetworkName2 são configurados no documento de configuração de rede virtual que você usará mais tarde.

    • Para simplificar, Contoso!000 é a mesma senha usada durante todo o tutorial.

  3. Crie dois grupos de afinidade, um em US West e um em US East.

    New-AzureAffinityGroup `
        -Name $affinityGroupName1 `
        -Location $location1 `
        -Description $affinityGroupDescription `
        -Label $affinityGroupLabel
    New-AzureAffinityGroup `
        -Name $affinityGroupName2 `
        -Location $location2 `
        -Description $affinityGroupDescription `
        -Label $affinityGroupLabel
    
  4. Crie as redes virtuais importando um arquivo de configuração.

    Set-AzureVNetConfig `
        -ConfigurationPath $networkConfigPath
    

    O arquivo de configuração contém o documento XML a seguir. Em resumo, ele especifica duas redes virtuais chamadas Network1 e Network2 nos dois grupos de afinidade, ContosoWest e ContosoEast, respectivamente. Network1 tem o espaço de endereço 10.10.1.0/24 e Network2 tem o espaço de endereço 10.10.2.0/24. Se alterar as variáveis para os nomes do grupo de afinidade e os nomes da rede virtual antes, você também deverá modificar os nomes correspondentes abaixo.

    <NetworkConfiguration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/ServiceHosting/2011/07/NetworkConfiguration">
      <VirtualNetworkConfiguration>
        <Dns />
        <VirtualNetworkSites>
          <VirtualNetworkSite name="Network1" AffinityGroup="ContosoWest">
            <AddressSpace>
              <AddressPrefix>10.10.1.0/24</AddressPrefix>
            </AddressSpace>
            <Subnets>
              <Subnet name="Back">
                <AddressPrefix>10.10.1.0/24</AddressPrefix>
              </Subnet>
            </Subnets>
          </VirtualNetworkSite>
          <VirtualNetworkSite name="Network2" AffinityGroup="ContosoEast">
            <AddressSpace>
              <AddressPrefix>10.10.2.0/24</AddressPrefix>
            </AddressSpace>
            <Subnets>
              <Subnet name="Back">
                <AddressPrefix>10.10.2.0/24</AddressPrefix>
              </Subnet>
            </Subnets>
          </VirtualNetworkSite>
        </VirtualNetworkSites>
      </VirtualNetworkConfiguration>
    </NetworkConfiguration> 
    
    
  5. Crie uma conta de armazenamento em cada grupo de afinidade que você criou.

    New-AzureStorageAccount `
        -StorageAccountName $storageAccountName1 `
        -Label $storageAccountLabel `
        -AffinityGroup $affinityGroupName1
    New-AzureStorageAccount `
        -StorageAccountName $storageAccountName2 `
        -Label $storageAccountLabel `
        -AffinityGroup $affinityGroupName2
    
  6. Crie a primeira máquina virtual do SQL Server, SQL1, em um novo serviço em nuvem no grupo de afinidade ContosoWest. Observe que é necessário primeiro definir a conta de armazenamento atual para sua assinatura.

    Set-AzureSubscription `
        -SubscriptionName (Get-AzureSubscription).SubscriptionName `
        -CurrentStorageAccount $storageAccountName1 
    New-AzureVMConfig `
        -Name $sql1ServerName `
        -InstanceSize Large `
        -ImageName $sqlImageName `
        -MediaLocation "$storageAccountContainer1$sql1ServerName.vhd" `
        -HostCaching "ReadOnly" `
        -DiskLabel "OS" | 
        Add-AzureProvisioningConfig `
            -Windows `
            -DisableAutomaticUpdates `
            -AdminUserName $vmAdminUser `
            -Password $vmAdminPassword |
            Set-AzureSubnet `
                -SubnetNames $subnetName |
                Add-AzureEndpoint `
                    -Name "SQL" `
                    -Protocol "tcp" `
                    -PublicPort 1433 `
                    -LocalPort 1433 | 
                    Add-AzureEndpoint `
                        -Name "Mirroring" `
                        -Protocol "tcp" `
                        -PublicPort 5022 `
                        -LocalPort 5022 | 
                        New-AzureVM `
                            -ServiceName $serviceName1 `
                            –AffinityGroup $affinityGroupName1 `
                            -VNetName $virtualNetworkName1
    

    Essa série de comandos conectados faz o seguinte:

    • New-AzureVMConfig cria uma configuração de VM com o nome do conjunto de disponibilidade desejado. O comando também especifica a imagem do SQL Server 2012 Service Pack 1 Enterprise Edition na galeria de máquinas virtuais.

      New-AzureVMConfig também define o disco do sistema operacional para cache somente leitura (sem cache de gravação). É recomendável que você migre os arquivos de banco de dados para um disco de dados separados que conecta à VM e configura sem cache de leitura ou gravação. No entanto, a melhor maneira é remover o cache de gravação no disco do sistema operacional, pois você não pode remover o cache de leitura no disco do sistema operacional.

    • Add-AzureProvisioningConfig fornece os parâmetros de configuração de um servidor Windows autônomo.

    • Set-AzureSubnet coloca a máquina virtual na sub-rede Back, conforme especificado no documento de configuração de rede.

    • O Add-AzureEndpoint adiciona dois pontos de extremidade de acesso: a porta 1433 para conectividade de cliente e a porta 5022 para o espelhamento de banco de dados pela Internet.

    • New-AzureVM cria um novo serviço em nuvem e cria o novo Azure VM no novo serviço em nuvem.

  7. Crie a primeira máquina virtual do SQL Server, SQL2, em um novo serviço em nuvem no grupo de afinidade ContosoEast. Observe que primeiro você altera a conta de armazenamento atual.

    Set-AzureSubscription `
        -SubscriptionName (Get-AzureSubscription).SubscriptionName `
        -CurrentStorageAccount $storageAccountName2 
    New-AzureVMConfig `
        -Name $sql2ServerName `
        -InstanceSize Large `
        -ImageName $sqlImageName `
        -MediaLocation "$storageAccountContainer2$sql2ServerName.vhd" `
        -HostCaching "ReadOnly" `
        -DiskLabel "OS" | 
        Add-AzureProvisioningConfig `
            -Windows `
            -DisableAutomaticUpdates `
            -AdminUserName $vmAdminUser `
            -Password $vmAdminPassword |
            Set-AzureSubnet `
                -SubnetNames $subnetName |
                Add-AzureEndpoint `
                    -Name "SQL" `
                    -Protocol "tcp" `
                    -PublicPort 1433 `
                    -LocalPort 1433 | 
                    Add-AzureEndpoint `
                        -Name "Mirroring" `
                        -Protocol "tcp" `
                        -PublicPort 5022 `
                        -LocalPort 5022 | 
                        New-AzureVM `
                            -ServiceName $serviceName2 `
                            –AffinityGroup $affinityGroupName2 `
                            -VNetName $virtualNetworkName2
    

    Esses comandos conectados são semelhantes aos comandos para criar SQL1. Consulte as observações da etapa anterior para obter uma explicação.

  8. Aguarde até que cada nova VM seja totalmente provisionada e baixe o arquivo da área de trabalho remota no seu diretório de trabalho. O loop for percorre as novas VMs e executa os comandos nas chaves de nível superior para cada uma delas.

    Foreach ($VM in $VMs = Get-AzureVM)
    {
        $VM = Get-AzureVM –ServiceName $VM.ServiceName –Name $VM.Name
        write-host "Waiting for " $VM.Name "..." 
    
        # loop until the VM status is "ReadyRole"
        While ($VM.InstanceStatus -ne "ReadyRole")
        {
            write-host "  Current Status = " $VM.InstanceStatus
            Start-Sleep -Seconds 15
            $VM = Get-AzureVM -ServiceName $VM.ServiceName -Name $VM.InstanceName
        }
    
        write-host "  Current Status = " $VM.InstanceStatus
    
        # Download remote desktop file
        Get-AzureRemoteDesktopFile -ServiceName $VM.ServiceName -Name $VM.InstanceName -LocalPath "$workingDir$($VM.InstanceName).rdp"
    } 
    
    

Nesta seção, você precisa modificar a instalação padrão do SQL Server em cada um dos três servidores. Especificamente, o protocolo TCP já está habilitado na VM do SQL Server. No entanto, ainda será necessário abrir o firewall para acesso remoto do SQL Server.

Agora, você está pronto para começar. Siga as etapas abaixo, que são idênticas para todos os três servidores exceto quando indicado em contrário:

  1. Conecte-se à máquina virtual iniciando o arquivo da área de trabalho remota. Use o nome de usuário do administrador do computador AzureAdmin e a senha Contoso!000, que você especificou ao criar a VM.

  2. Aguarde a instalação do SQL Server concluir a execução das tarefas automatizadas de inicialização antes de continuar.

  3. Abra uma janela do PowerShell no modo de administrador.

  4. Abra o firewall para acesso remoto do SQL Server.

    netsh advfirewall firewall add rule name='SQL Server (TCP-In)' program='C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Binn\sqlservr.exe' dir=in action=allow protocol=TCP
    

Você agora está pronto para configurar o espelhamento de banco de dados nos três servidores. Mantenha as janelas do PowerShell abertas em todos os servidores para as etapas subsequentes.

  1. No SQL1, execute SQLCMD.EXE na janela do PowerShell e crie e faça backup de um certificado do servidor.

    SQLCMD -S SQL1
    USE master;
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong_Password_#1>';
    GO
    
    CREATE CERTIFICATE SQL1_cert WITH SUBJECT = 'SQL1 certificate';
    GO
    
    CREATE ENDPOINT Endpoint_Mirroring
       STATE = STARTED
       AS TCP (LISTENER_PORT=5022, LISTENER_IP = ALL) 
       FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE SQL1_cert, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL);
    GO
    
    BACKUP CERTIFICATE SQL1_cert TO FILE = 'SQL1_cert.cer';
    GO 
    
  2. No SQL2, execute SQLCMD.EXE na janela do PowerShell e crie e faça backup de um certificado do servidor.

    SQLCMD -S SQL2
    USE master;
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong_Password_#2>';
    GO
    
    CREATE CERTIFICATE SQL2_cert WITH SUBJECT = 'SQL2 certificate for database mirroring';
    GO
    
    CREATE ENDPOINT Endpoint_Mirroring
       STATE = STARTED
       AS TCP (LISTENER_PORT=5022, LISTENER_IP = ALL) 
       FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE SQL2_cert, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL);
    GO
    
    BACKUP CERTIFICATE SQL2_cert TO FILE = 'SQL2_cert.cer';
    GO
    
  3. Os certificados são salvos no diretório de dados padrão: C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA. Copie os certificados para o mesmo diretório nos dois servidores de modo que cada servidor tenha os certificados dos outros dois servidores. Como as duas máquinas virtuais do SQL Server residem em duas redes virtuais diferentes e não podem compartilhar arquivos imediatamente, a maneira mais fácil de copiar arquivos entre máquinas virtuais é anexar uma unidade de disco do computador local em sessões da área de trabalho remota e copiar os certificados para e desta unidade de disco anexada.

  4. No SQL1, conceda permissões de logon para o SQL2 usando este certificado.

    CREATE LOGIN DBMirroringLogin WITH PASSWORD = 'Sample_Login_Password!@#';
    GO
    
    CREATE USER DBMirroringLogin FOR LOGIN DBMirroringLogin;
    GO
    
    CREATE CERTIFICATE SQL2_cert AUTHORIZATION DBMirroringLogin FROM FILE = 'SQL2_cert.cer';
    GO
    
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [DBMirroringLogin];
    GO
     
    
    
  5. No SQL2, conceda permissões de logon para o SQL1 usando este certificado.

    CREATE LOGIN DBMirroringLogin WITH PASSWORD = 'Sample_Login_Password!@#';
    GO
    
    CREATE USER DBMirroringLogin FOR LOGIN DBMirroringLogin;
    GO
    
    CREATE CERTIFICATE SQL1_cert AUTHORIZATION DBMirroringLogin FROM FILE = 'SQL1_cert.cer'
    GO
    
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [DBMirroringLogin];
    GO
     
    
    
  6. No SQL1, crie um banco de dados e faça um backup completo e um backup de log.

    CREATE database MyDB1
    GO
    
    BACKUP DATABASE MyDB1 TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\BACKUP\MyDB1.bak';
    GO
    
    BACKUP LOG MyDB1 TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\BACKUP\MyDB1.log';
    GO 
    
    
  7. Copie os arquivos de backup para o SQL2 no seguinte diretório: C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\BACKUP.

  8. No SQL2, restaure os backups de banco de dados com a opção WITH NORECOVERY e habilite-os como um parceiro de espelhamento.

    RESTORE DATABASE MyDB1 FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\BACKUP\MyDB1.bak' WITH NORECOVERY;
    GO
    
    RESTORE LOG MyDB1 FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\BACKUP\MyDB1.log' WITH NORECOVERY;
    GO
    
    ALTER DATABASE MyDB1 SET PARTNER = 'TCP://<uniqueservicename1>.cloudapp.net:5022';
    GO
     
    
    

    Observe que o nome do serviço em nuvem, <uniqueservicename1>.cloudapp.net, será usado em vez do nome de host do SQL1. O SQL1 e o SQL2 não podem se conectar diretamente entre si e devem se conectar ao ponto de extremidade de cada um nos respectivos serviços em nuvem. Você já abriu o ponto de extremidade de espelhamento do banco de dados padrão, a porta 5022, quando criou o SQL1.

  9. No SQL1, habilite SQL1 como um parceiro de espelhamento.

    ALTER DATABASE MyDB1 SET PARTNER = 'TCP://<uniqueservicename2>.cloudapp.net:5022';
    GO
    

    Novamente, observe que o nome do serviço em nuvem, <uniqueservicename2>.cloudapp.net, será usado em vez do nome de host do SQL1. Você já abriu o ponto de extremidade de espelhamento do banco de dados padrão, a porta 5022, quando criou o SQL2.

Parabéns! Você configurou com êxito o espelhamento de banco de dados entre dois datacenters do Azure usando certificados. Observe que, como os servidores estão acessando entre si usando nomes de serviço em nuvem em vez dos nomes de instância, o monitor de espelhamento de banco de dados não pode se conectar ao servidor remoto para consultar o status ao tentar se conectar ao nome da instância do servidor remoto. Para monitorar a sessão de espelhamento do banco de dados no monitor de espelhamento de banco de dados, siga as instruções abaixo:

  1. No SQL2, habilite a autenticação do SQL Server. Para obter mais informações, consulte Alterar o modo de autenticação do servidor.

  2. No SQL2, crie um usuário sysadmin que usa a autenticação do SQL Server. Para obter mais informações, consulte Criar um logon.

  3. Em SQL1, no SQL Server Management Studio, conecte-se a SQL2 usando <uniqueservicename2>.cloudapp.net como o nome de servidor e Autenticação do SQL Server como o modo de autenticação.

  4. Da conexão do mecanismo de banco de dados estabelecida para o SQL2, inicie o monitor de espelhamento de banco de dados. Para obter mais informações, consulte Iniciar o Monitor de Espelhamento de Banco de Dados (SQL Server Management Studio).

A Microsoft está realizando uma pesquisa online para saber sua opinião sobre o site do MSDN. Se você optar por participar, a pesquisa online lhe será apresentada quando você sair do site do MSDN.

Deseja participar?
Mostrar:
© 2014 Microsoft