Questa pagina è stata utile?
I suggerimenti relativi al contenuto di questa pagina sono importanti. Comunicaceli.
Altri suggerimenti?
1500 caratteri rimanenti
Esporta (0) Stampa
Espandi tutto

Esercitazione: Mirroring del database per il ripristino di emergenza in Azure

Aggiornamento: giugno 2015

In questa esercitazione viene illustrato come implementare il mirroring del database di SQL Server per il ripristino di emergenza end-to-end tramite VM Azure in due diversi data center di Azure. Per implementare il mirroring del database in due data center di Azure, è necessario usare i certificati server. I server di mirroring del database non possono trovarsi nello stesso dominio Active Directory perché non è stata stabilita alcuna comunicazione interna tra i data center di Azure. È necessario stabilire la comunicazione tra i server di database tramite i relativi endpoint servizio cloud pubblici.

In questa esercitazione il mirroring del database asincrono verrà distribuito come soluzione di ripristino di emergenza basato sull'utilizzo di due macchine virtuali (VM) SQL Server. Al termine dell'esercitazione la soluzione a disponibilità elevata di SQL Server sarà composta dagli elementi seguenti:

  • Due reti virtuali, una in esecuzione nel data center degli Stati Uniti occidentali e l'altra in esecuzione nel data center degli Stati Uniti orientali

  • Una VM SQL Server (SQL1) distribuita nella rete virtuale nel data center degli Stati Uniti occidentali

  • Una VM SQL Server (SQL2) distribuita nella rete virtuale nel data center degli Stati Uniti orientali

  • SQL1 è il server di database principale

  • SQL2 è il server di database mirror

Questa esercitazione ha lo scopo di illustrare i passaggi necessari per configurare la soluzione descritta in precedenza senza approfondire i dettagli di ogni passaggio. Pertanto, anziché illustrare i passaggi di configurazione a livello dell'interfaccia utente grafica, vengono usati gli script di PowerShell e Transact-SQL (T-SQL) per eseguire rapidamente ogni passaggio. Si presuppone quanto segue:

Creare la rete virtuale e le VM SQL Server

  1. In una finestra di PowerShell nel computer locale, importare il modulo Azure, scaricare un file di impostazioni di pubblicazione nel computer e connettere la sessione di PowerShell alla sottoscrizione di Azure importando le impostazioni di pubblicazione scaricate.

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

    Il comando Get-AzurePublishgSettingsFile genera automaticamente un certificato di gestione con Azure e lo scarica nel computer. Verrà aperto un browser e verrà richiesto di immettere le credenziali dell'account Microsoft per la sottoscrizione di Azure. Il file con estensione publishsettings scaricato contiene tutte le informazioni necessarie per gestire la sottoscrizione di Azure. Dopo aver salvato il file in una directory locale, importarlo usando il comando Import-AzurePublishSettingsFile.

    securitySicurezza - Nota
    Nel file publishsettings sono incluse le credenziali (non codificate) usate per amministrare i servizi e le sottoscrizioni di Azure. La procedura di sicurezza consigliata per questo file consiste nell'archiviarlo temporaneamente all'esterno delle directory di origine, ad esempio nella cartella Raccolte\Documenti e, successivamente, eliminarlo una volta completata l'importazione. Un utente malintenzionato che accede al file publishsettings può modificare, creare ed eliminare i servizi di Azure.

  2. Definire una serie di variabili con cui si creerà l'infrastruttura IT cloud.

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

    Prestare attenzione a quanto segue per assicurarsi che i comandi funzionino correttamente in un secondo momento:

    • Le variabili $storageAccountName1, $storageAccountName2, $serviceName1 e $serviceName2 devono essere univoche perché vengono usate per identificare rispettivamente l'account di archiviazione cloud e il servizio cloud su Internet. Inoltre, durante la successiva configurazione della sessione di mirroring del database sarà necessario usare i valori di $serviceName1 e $serviceName2.

    • I nomi specificati per le variabili $affinityGroupName1, $affinityGroupName2, $virtualNetworkName1 e $virtualNetworkName2 sono configurati nel documento di configurazione della rete virtuale che verrà usato in seguito.

    • Per semplicità, Contoso!000 è la stessa password usata in tutta l'esercitazione.

  3. Creare due gruppi di affinità, uno negli Stati Uniti occidentali, l'altro negli Stati Uniti orientali.

    New-AzureAffinityGroup `
        -Name $affinityGroupName1 `
        -Location $location1 `
        -Description $affinityGroupDescription `
        -Label $affinityGroupLabel
    New-AzureAffinityGroup `
        -Name $affinityGroupName2 `
        -Location $location2 `
        -Description $affinityGroupDescription `
        -Label $affinityGroupLabel
    
  4. Creare le reti virtuali importando un file di configurazione.

    Set-AzureVNetConfig `
        -ConfigurationPath $networkConfigPath
    

    Il file di configurazione contiene il documento XML seguente. In breve, specifica due reti virtuali denominate Rete1 e Rete2 in due gruppi di affinità, rispettivamente ContosoWest e ContosoEast. Rete1 contiene lo spazio degli indirizzi 10.10.1.0/24 e Rete2 contiene lo spazio degli indirizzi 10.10.2.0/24. Se si modificano le variabili per i nomi delle reti virtuali e dei gruppi di affinità, è necessario modificare anche i nomi corrispondenti.

    <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. Creare un account di archiviazione in ognuno dei gruppi di affinità creati.

    New-AzureStorageAccount `
        -StorageAccountName $storageAccountName1 `
        -Label $storageAccountLabel `
        -AffinityGroup $affinityGroupName1
    New-AzureStorageAccount `
        -StorageAccountName $storageAccountName2 `
        -Label $storageAccountLabel `
        -AffinityGroup $affinityGroupName2
    
  6. Creare la prima VM SQL Server, SQL1, in un nuovo servizio cloud nel gruppo di affinità ContosoWest. Si noti che è innanzitutto necessario impostare l'account di archiviazione corrente per la sottoscrizione.

    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
    

    Questa serie di comandi inoltrati tramite pipe consente di eseguire le operazioni seguenti:

    • New-AzureVMConfig consente di creare una configurazione di macchina virtuale con il nome del set di disponibilità desiderato. Tramite il comando viene inoltre specificata l'immagine di SQL Server 2012 Service Pack 1 Enterprise Edition nella raccolta di macchine virtuali.

      New-AzureVMConfig consente inoltre di impostare il disco del sistema operativo sulla modalità sola lettura della cache (scrittura non consentita). È consigliabile eseguire la migrazione dei file di database in un disco dati separato collegato alla macchina virtuale e configurarlo senza lettura né scrittura nella cache. Il passaggio successivo consigliato consiste tuttavia nel rimuovere la scrittura nella cache sul disco del sistema operativo, non essendo possibile rimuovere la lettura della cache su tale disco.

    • Add-AzureProvisioningConfig fornisce i parametri di configurazione di un server Windows autonomo.

    • Set-AzureSubnet consente di inserire la VM nella subnet back-end, come specificato nel documento di configurazione della rete.

    • Add-AzureEndpoint consente di aggiungere due endpoint di accesso, la porta 1433 per la connettività client e la porta 5022 per il mirroring del database su Internet.

    • New-AzureVM consente di creare un nuovo servizio cloud e la nuova macchina virtuale di Azure nel nuovo servizio cloud.

  7. Creare la prima VM SQL Server, SQL2, in un nuovo servizio cloud nel gruppo di affinità ContosoEast. Si noti che innanzitutto viene modificato l'account di archiviazione corrente.

    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
    

    Questi comandi reindirizzati sono simili ai comandi per la creazione di SQL1. Per una spiegazione vedere le note del passaggio precedente.

  8. Al termine del provisioning di ogni macchina virtuale, scaricare il relativo file del desktop remoto nella directory di lavoro. Tramite il ciclo For vengono scorse le nuove macchine virtuali e vengono eseguiti i comandi all'interno delle parentesi graffe di livello principale per ognuna di esse.

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

Inizializzare le VM SQL Server

In questa sezione è necessario modificare l'installazione di SQL Server predefinita in ognuno dei tre server. In modo specifico, il protocollo TCP è già abilitato nella VM SQL Server. Sarà tuttavia necessario aprire il firewall per l'accesso remoto di SQL Server.

A questo punto è possibile iniziare. Eseguire i passaggi riportati di seguito, che, salvo diversa indicazione, sono identici per tutti e tre i server:

  1. Connettersi alla VM avviando il file desktop remoto. Usare il nome utente dell'amministratore della macchina >AzureAdmin e la password Contoso!000 specificata durante la creazione della VM.

  2. Prima di procedere, attendere la fine dell'esecuzione delle attività di inizializzazione automatiche nell'ambito dell'installazione di SQL Server.

  3. Aprire una finestra di PowerShell in modalità amministratore.

  4. Aprire il firewall per l'accesso remoto di 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
    

È ora possibile procedere alla configurazione del mirroring del database nei tre server. Mantenere aperte le finestre di PowerShell in tutti i server per i passaggi successivi.

Configurare il mirroring del database tramite certificati

  1. In SQL1 eseguire SQLCMD.EXE nella finestra di PowerShell, quindi creare un certificato server ed eseguirne il backup.

    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. In SQL2 eseguire SQLCMD.EXE nella finestra di PowerShell, quindi creare un certificato server ed eseguirne il backup.

    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. I certificati vengono salvati nella directory dati predefinita, ovvero C:\Programmi\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA. Copiare i certificati nella stessa directory tra i due server in modo che ognuno disponga dei certificati degli altri due. Poiché le due VM SQL Server si trovano in due reti virtuali diverse e non sono in grado di condividere immediatamente i file, il modo più semplice per copiare i file nelle VM consiste nel collegare un'unità disco dal computer locale alle sessioni desktop remoto e copiare i certificati in/da tale unità disco collegata.

  4. In SQL1 concedere le autorizzazioni di accesso a SQL2 tramite il certificato.

    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. In SQL2 concedere le autorizzazioni di accesso a SQL1 tramite il certificato.

    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. In SQL1 creare un database ed eseguirne un backup completo e un backup del 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. Copiare i file di backup in SQL2 nella seguente directory: C:\Programmi\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\BACKUP.

  8. In SQL2 ripristinare i backup del database con l'opzione WITH NORECOVERY e abilitarlo come partner di mirroring.

    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
     
    
    

    Si noti che invece del nome host di SQL1 viene utilizzato il nome del servizio cloud, <nomeserviziounivoco1>.cloudapp.net. SQL1 e SQL2 non possono connettersi tra loro direttamente e devono connettersi ai relativi endpoint nei rispettivi servizi cloud. Alla creazione di SQL1 è stato aperto l'endpoint di mirroring del database predefinito, ovvero la porta 5022.

  9. In SQL1 abilitare SQL1 come partner di mirroring.

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

    Si noti di nuovo che invece del nome host di SQL1 viene usato il nome del servizio cloud, <nomeserviziounivoco2>.cloudapp.net. Alla creazione di SQL2 è stato aperto l'endpoint di mirroring del database predefinito, ovvero la porta 5022.

A questo punto, Il mirroring del database è stato impostato correttamente in due data center di Azure tramite certificati. Si noti che poiché un server accede all'altro e viceversa usando i nomi dei servizi cloud anziché i nomi delle istanze, Monitoraggio mirroring del database non può connettersi al server remoto per eseguire query sullo stato quando tenta di connettersi al nome dell'istanza del server remoto. Per monitorare la sessione di mirroring del database in Monitoraggio mirroring del database, seguire le istruzioni riportate di seguito:

  1. In SQL2 abilitare l'autenticazione di SQL Server. Per ulteriori informazioni, vedere Modifica della modalità di autenticazione del server.

  2. In SQL2 creare un utente sysadmin che usi l'autenticazione di SQL Server. Per ulteriori informazioni, vedere Creazione di un account di accesso.

  3. In SQL1, in SQL Server Management Studio, connettersi a SQL2 utilizzando <nomeserviziounivoco2>.cloudapp.net come nome del server e Autenticazione di SQL Server come modalità di autenticazione.

  4. Dalla connessione stabilita dal motore di database a SQL2, avviare Monitoraggio mirroring del database. Per ulteriori informazioni, vedere Avviare Monitoraggio mirroring del database (SQL Server Management Studio).

Mostra:
© 2015 Microsoft