Exportar (0) Imprimir
Expandir todo

Tutorial: Creación de reflejo de la base de datos para la recuperación ante desastres en Azure

Actualizado: abril de 2014

Este tutorial muestra cómo implementar la creación de reflejo de la base de datos de SQL Server para la recuperación ante desastres usando máquinas virtuales (VM) de Azure en dos centros de datos diferentes de Azure. Al implementar la creación de reflejo de la base de datos en dos centros de datos de Azure, debe usar certificados de servidor. Los servidores de creación de reflejo de la base de datos no pueden residir en el mismo dominio de Active Directory porque actualmente no hay comunicación interna en Azure entre distintos centros de datos. Debe establecer la comunicación entre los servidores de bases de datos a través de sus extremos de servicio en la nube pública.

En este tutorial, implementará la creación de reflejo de la base de datos asincrónica como una solución de recuperación ante desastres mediante dos máquinas virtuales (VM) de SQL Server. Al final del tutorial, la solución de alta disponibilidad de SQL Server constará de los elementos siguientes:

  • Dos redes virtuales, una que se ejecuta en el centro de datos de la subregión Oeste de EE. UU. y otra que se ejecuta en el centro de datos de la subregión Este de EE. UU.

  • Una VM de SQL Server (SQL1) implementada en la red virtual del centro de datos de la subregión Oeste de EE. UU.

  • Una VM de SQL Server (SQL2) implementada en la red virtual del centro de datos de la subregión Este de EE. UU.

  • SQL1 es el servidor de bases de datos principal

  • SQL2 es el servidor de bases de datos reflejadas

Este tutorial está concebido para mostrarle los pasos necesarios para configurar la solución descrita anteriormente sin profundizar en los detalles de cada paso. Por tanto, en lugar de mostrar los pasos de configuración de la GUI, usa scripting PowerShell y Transact-SQL (T-SQL) para guiarle rápidamente por cada paso. Se supone lo siguiente:

  1. En una ventana de PowerShell del equipo local, importe el módulo de Azure, descargue un archivo de configuración de publicación en el equipo y conecte la sesión de PowerShell a la suscripción de Azure importando la configuración de publicación descargada.

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

    El comando Get-AzurePublishgSettingsFile genera automáticamente un certificado de administración con las descargas de Azure en el equipo. Se abrirá un explorador automáticamente y se le solicitará que escriba las credenciales de la cuenta de Microsoft para su suscripción de Azure. El archivo descargado .publishsettings contiene toda la información que necesita para administrar la suscripción de Azure. Cuando guarde este archivo en un directorio local, impórtelo mediante el comando Import-AzurePublishSettingsFile.

    securityNota de seguridad
    El archivo publishsettings contiene las credenciales (sin codificar) que se usan para administrar sus servicios y suscripciones de Azure. Por seguridad, se recomienda almacenar este archivo temporalmente fuera de los directorios de origen (por ejemplo, en la carpeta Bibliotecas\Documentos) y eliminarlo una vez completada la importación. Un usuario malintencionado que tenga acceso al archivo publishsettings puede editar, crear y eliminar sus servicios de Azure.

  2. Defina una serie de variables que usará para crear la infraestructura de TI en la nube.

    $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 atención a lo siguiente para asegurarse de que los comandos se ejecutarán correctamente después:

    • Las variables $storageAccountName1, $storageAccountName2, $serviceName1 y $serviceName2 deben ser únicas porque se usan para identificar la cuenta de almacenamiento en la nube y el servidor en la nube, respectivamente, en Internet. Además, tendrá que usar los valores de $serviceName1 y $serviceName2 al configurar la sesión de reflejo de base de datos más adelante.

    • Los nombres especificados para las variables $affinityGroupName1, $affinityGroupName2, $virtualNetworkName1 y $virtualNetworkName2 se configuran en el documento de configuración de red virtual que usará más adelante.

    • Para simplificar, Contoso!000 es la contraseña que se usa en todo en el tutorial.

  3. Cree dos grupos de afinidad, uno en la subregión Oeste de EE. UU. y otro en la subregión Este de EE. UU.

    New-AzureAffinityGroup `
        -Name $affinityGroupName1 `
        -Location $location1 `
        -Description $affinityGroupDescription `
        -Label $affinityGroupLabel
    New-AzureAffinityGroup `
        -Name $affinityGroupName2 `
        -Location $location2 `
        -Description $affinityGroupDescription `
        -Label $affinityGroupLabel
    
  4. Cree las redes virtuales importando un archivo de configuración.

    Set-AzureVNetConfig `
        -ConfigurationPath $networkConfigPath
    

    El archivo de configuración contiene el siguiente documento XML. En resumen, especifica dos redes virtuales denominadas Network1 y Network2 en los dos grupos de afinidad, ContosoWest y ContosoEast, respectivamente. Network1 tiene el espacio de direcciones 10.10.1.0/24 y Network2 tiene el espacio de direcciones 10.10.2.0/24. Si cambió las variables para los nombres de los grupos de afinidad y los nombres de las redes virtuales, debe cambiar también los nombres correspondientes siguientes.

    <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. Cree una cuenta de almacenamiento en cada uno de los grupos de afinidad que ha creado.

    New-AzureStorageAccount `
        -StorageAccountName $storageAccountName1 `
        -Label $storageAccountLabel `
        -AffinityGroup $affinityGroupName1
    New-AzureStorageAccount `
        -StorageAccountName $storageAccountName2 `
        -Label $storageAccountLabel `
        -AffinityGroup $affinityGroupName2
    
  6. Cree la primera VM de SQL Server, SQL1, en un nuevo servicio en la nube en el grupo de afinidad ContosoWest. Observe que primero tiene que establecer la cuenta de almacenamiento actual para su suscripción.

    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
    

    Esta serie de comandos canalizados hacen lo siguiente:

    • New-AzureVMConfig crea una configuración de VM con el nombre de conjunto de disponibilidad deseado. El comando también especifica la imagen de SQL Server 2012 Service Pack 1 Enterprise Edition en la galería de máquinas virtuales.

      New-AzureVMConfig también establece el disco del sistema operativo en solo Caching de lectura (sin Caching de escritura). Se recomienda migrar los archivos de base de datos a un disco de datos independiente que exponga a la VM y configurarlo sin Caching de lectura o escritura. Sin embargo, lo mejor es quitar el servicio Caching de escritura en el disco del sistema operativo, ya que no puede quitar el servicio Caching de lectura en el disco del sistema operativo.

    • Add-AzureProvisioningConfig proporciona los parámetros de configuración de un servidor independiente de Windows.

    • Set-AzureSubnet coloca VM en la subred Back, como se especifica en el documento de configuración de red.

    • Add-AzureEndpoint agrega dos extremos de acceso: el puerto 1433 para la conectividad de cliente y el puerto 5022 para la creación de reflejo de la base de datos a través de Internet.

    • New-AzureVM crea un nuevo servicio en la nube y una nueva VM de Windows en el nuevo servicio en la nube.

  7. Cree la primera VM de SQL Server, SQL2, en un nuevo servicio en la nube en el grupo de afinidad ContosoEast. Observe que cambia la cuenta de almacenamiento actual primero.

    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
    

    Estos comandos canalizados son similares a los comandos para crear SQL1. Vea las notas del paso anterior para obtener la explicación.

  8. Espere a que cada VM esté completamente aprovisionada y descargue su archivo de escritorio remoto en el directorio de trabajo. El bucle for recorre las nuevas VM y ejecuta los comandos dentro de los paréntesis de nivel superior para cada uno de ellos.

    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"
    } 
    
    

En esta sección, necesita modificar la instalación predeterminada de SQL Server en cada uno de los tres servidores. En concreto, el protocolo TCP ya está habilitado en la VM de SQL Server. Sin embargo, todavía necesita abrir el firewall para el acceso remoto de SQL Server.

Ahora ya puede iniciar. Siga los pasos descritos a continuación, que son idénticos para los tres servidores salvo que se indique lo contrario:

  1. Conéctese a la VM iniciando el archivo de escritorio remoto. Use el nombre de usuario AzureAdmin y la contraseña Contoso!000 del administrador del equipo, que especificó al crear la VM.

  2. Espere a que instalación de SQL Server termine de ejecutar las tareas automatizadas de inicialización antes de continuar.

  3. Abra una ventana de PowerShell en modo de administrador.

  4. Abra el firewall para el acceso remoto de 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
    

Ya puede configurar la creación de reflejo de la base de datos en los tres servidores. Deje las ventanas de PowerShell abiertas en todos los servidores para realizar los pasos siguientes.

  1. En SQL1, ejecute SQLCMD.EXE en la ventana de PowerShell, y cree y haga copia de seguridad de un certificado de 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. En SQL2, ejecute SQLCMD.EXE en la ventana de PowerShell, y cree y haga copia de seguridad de un certificado de 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. Los certificados se guardan en el directorio de datos predeterminado: C:\Archivos de programa\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA. Copie los certificados en el mismo directorio en los dos servidores de forma que cada servidor tenga los certificados de los otros dos servidores. Puesto que las dos VM de SQL Server residen en dos redes virtuales diferentes y no pueden compartir archivos con rapidez, la manera más fácil de copiar archivos a través de las VM consiste en conectar una unidad de disco del equipo local a las sesiones de escritorio remoto y copiar los certificados hacia y desde esa unidad de disco conectada.

  4. En SQL1, conceda permisos de inicio de sesión a SQL2 usando su 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. En SQL2, conceda permisos de inicio de sesión a SQL1 usando su 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. En SQL1, cree una base de datos y realice una copia de seguridad completa y una copia de seguridad de registros.

    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 los archivos de copia de seguridad en SQL2 en el siguiente directorio: C:\Archivos de programa\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\BACKUP.

  8. En SQL2, restaure las copias de seguridad de la base de datos con la opción WITH NORECOVERY y habilítelo como asociado de creación de reflejo.

    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 se usa el nombre del servicio en la nube, <uniqueservicename1>.cloudapp.net, en lugar del nombre de host de SQL1. SQL1 y SQL2 no pueden conectarse entre sí directamente y deben conectarse al extremo de la otra en los servicios en la nube respectivos. Ya ha abierto el extremo de creación de reflejo de la base de datos predeterminado, el puerto 5022, al crear SQL1.

  9. En SQL1, habilite SQL1 como un asociado de creación de reflejo.

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

    De nuevo, observe que se usa el nombre del servicio en la nube, <uniqueservicename2>.cloudapp.net, en lugar del nombre de host de SQL1. Ya ha abierto el extremo de creación de reflejo de la base de datos predeterminado, el puerto 5022, al crear SQL2.

Enhorabuena. Ha configurado correctamente la creación de reflejo de la base de datos en dos centros de datos de Azure mediante certificados. Tenga en cuenta que como los servidores tienen acceso uno a otro usando los nombres de servicio en la nube en lugar de los nombres de instancia, el monitor de creación de reflejo de la base de datos no se puede conectar al servidor remoto para consultar el estado cuando intenta conectarse al nombre de instancia del servidor remoto. Para supervisar la sesión de creación de reflejo de la base de datos en el monitor de creación de reflejo de la base de datos, siga las instrucciones que se indican a continuación:

  1. En SQL2, habilite la autenticación de SQL Server. Para obtener más información, vea Modo de autenticación del servidor de cambios.

  2. En SQL2, cree un usuario sysadmin que use la autenticación de SQL Server. Para obtener más información, vea Crear un inicio de sesión.

  3. En SQL1, en SQL Server Management Studio, conéctese a SQL2 usando <uniqueservicename2>.cloudapp.net como nombre de servidor y Autenticación de SQL Server como el modo de autenticación.

  4. Desde la conexión del motor de base de datos establecida con SQL2, inicie el monitor de creación de reflejo de la base de datos. Para obtener más información, vea Iniciar el Monitor de creación de reflejo de la base de datos (SQL Server Management Studio).

Mostrar:
© 2015 Microsoft