Была ли эта страница полезной?
Ваш отзыв об этом контенте важен для нас. Расскажите нам о том, что вы думаете.
Дополнительный отзыв?
1500 символов осталось
MSDN Library

Учебник. Зеркальное отображение базы данных для аварийного восстановления в Azure

Обновлено: Июнь 2015 г.

В этом учебнике рассказывается, как реализовать комплексное зеркальное отображение базы данных SQL Server для аварийного восстановления с помощью ВМ Azure в двух разных центрах обработки данных Azure. При реализации зеркального отображения базы данных в двух центрах обработки данных Azure необходимо использовать сертификаты серверов. Серверы зеркального отображения базы данных не могут быть в одном домене Active Directory, поскольку в настоящее время в Azure нет внутренней связи между центрами обработки данных. Необходимо установить связь между двумя серверами баз данных с их конечными точками службы в общедоступном облаке.

В этом учебнике вам предстоит развертывание асинхронного зеркального отображения базы данных в качестве решения аварийного восстановления с помощью двух виртуальных машин (ВМ) SQL Server. Созданное в конце учебника решение SQL Server с высоким уровнем доступности будет состоять из следующих элементов:

  • Две виртуальные сети: одна работает в центре обработки данных на западе США, другая — на востоке.

  • Одна ВМ SQL Server (SQL1), развернутая в виртуальной сети центра обработки данных на западе США.

  • Одна ВМ SQL Server (SQL2), развернутая в виртуальной сети центра обработки данных на востоке США.

  • SQL1 является сервером основной базы данных.

  • SQL2 является сервером зеркальной базы данных.

В данном учебнике будут показаны шаги, необходимые для настройки описанного решения. Подробные сведения каждого этапа не приводятся. Вместо демонстрации элементов графического пользовательского интерфейса на каждом этапе в учебнике используются скрипты PowerShell и Transact-SQL (T-SQL) для быстрого ознакомления с этапами. Для целей учебника предполагается следующее.

Создание виртуальной сети и ВМ SQL Server

  1. В окне Powershell на локальном компьютере импортируйте модуль Azure, загрузите файл параметров публикации на компьютер и подключите сеанс PowerShell к подписке Azure путем импорта загруженных параметров публикации.

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

    Команда Get-AzurePublishgSettingsFile автоматически создает сертификат управления, а Azure загружает его на компьютер. Автоматически откроется браузер, где потребуется ввести учетные данные для подписки Azure. Загруженный файл PUBLISHSETTINGS содержит всю информацию, необходимую для управления подпиской Azure. После сохранения этого файла в локальную папку импортируйте его с помощью команды Import-AzurePublishSettingsFile.

    securityПримечание o безопасности.
    Файл publishsettings содержит конкретные учетные данные (незакодированные), которые используются для управления подписками и службами Azure. Рекомендации по безопасности состоят в том, что этот файл следует временно сохранить за пределами исходных каталогов (например, в папке Libraries\Documents), а затем после завершения импорта его необходимо удалить. Злонамеренный пользователь, получивший доступ к файлу publishsettings, сможет изменять, создавать и удалять применяемые службы Azure.

  2. Определите ряд переменных, которые будут использоваться для создания облачной ИТ-инфраструктуры.

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

    Чтобы обеспечить успешное выполнение команд, обратите внимание на следующее.

    • Переменные $storageAccountName1, $storageAccountName2, $serviceName1 и $serviceName2 должны быть уникальными, поскольку они используются для идентификации учетной записи облачного хранилища и облачной службы соответственно в Интернете. Впоследствии значения $serviceName1 и $serviceName2 будут использоваться при настройке сеанса зеркального отображения базы данных.

    • Имена, указанные для переменных $affinityGroupName1, $affinityGroupName2, $virtualNetworkName1 и $virtualNetworkName2, задаются во время настройки виртуальной сети (рассматривается позже).

    • Для простоты во всем учебнике используется единственный пароль — Contoso!000.

  3. Создайте две территориальные группы: одну на западе США, другую — на востоке.

    New-AzureAffinityGroup `
        -Name $affinityGroupName1 `
        -Location $location1 `
        -Description $affinityGroupDescription `
        -Label $affinityGroupLabel
    New-AzureAffinityGroup `
        -Name $affinityGroupName2 `
        -Location $location2 `
        -Description $affinityGroupDescription `
        -Label $affinityGroupLabel
    
  4. Создайте виртуальные сети, импортировав файл конфигурации.

    Set-AzureVNetConfig `
        -ConfigurationPath $networkConfigPath
    

    Файл конфигурации содержит следующий XML-документ. Кратко говоря, документ указывает две виртуальные сети Network1 и Network2 в двух территориальных группах ContosoWest и ContosoEast соответственно. У сети Network1 адресное пространство 10.10.1.0/24, у сети Network210.10.2.0/24. Если вы ранее изменяли переменные для имен территориальных групп и имен виртуальных сетей, то необходимо также изменить соответствующие приведенные ниже имена.

    <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. Создайте учетную запись хранилища в каждой из созданных территориальных групп.

    New-AzureStorageAccount `
        -StorageAccountName $storageAccountName1 `
        -Label $storageAccountLabel `
        -AffinityGroup $affinityGroupName1
    New-AzureStorageAccount `
        -StorageAccountName $storageAccountName2 `
        -Label $storageAccountLabel `
        -AffinityGroup $affinityGroupName2
    
  6. Создайте первую ВМ SQL Server SQL1 в новой облачной службе в территориальной группе ContosoWest. Обратите внимание, что сначала необходимо задать учетную запись хранилища для подписки.

    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
    

    Этот набор команд выполняет следующие задачи.

    • New-AzureVMConfig создает конфигурацию виртуальной машины с заданным именем группы доступности. Команда также задает образ SQL Server 2012 Enterprise Edition с пакетом обновления 1 (SP1) из коллекции виртуальной машины.

      New-AzureVMConfig Также этот набор команд задает режим диска операционной системы на чтение кэша (запрет записи в кэш). Рекомендуется переносить файлы баз данных на отдельный диск с данными, подсоединенный к виртуальной машине, и настроить для него запрет на чтение кэша или запись в кэш. Однако наилучшая альтернатива — удалить кэширование записи на диске операционной системы, так как кэширование чтения с этого диска удалить нельзя.

    • Add-AzureProvisioningConfig задает параметры конфигурации автономного сервера Windows.

    • Set-AzureSubnet помещает ВМ в подсети Back, как указано в настройке сети.

    • Add-AzureEndpoint добавляет две конечные точки доступа: порт 1433 для связи с клиентом и порт 5022 для зеркального отображения базы данных через Интернет.

    • New-AzureVM создает новую облачную службу и новую виртуальную машину Azure в новой облачной службе.

  7. Создайте первую ВМ SQL Server SQL2 в новой облачной службе в территориальной группе ContosoEast. Обратите внимание, что сначала необходимо изменить учетную запись текущего хранилища для подписки.

    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
    

    Эти перенаправленные команды аналогичны командам для создания SQL1. Объяснение этого см. в примечаниях к предыдущему шагу.

  8. Дождитесь полного провизионирования каждой виртуальной машины и загрузите файл удаленного рабочего стола в рабочий каталог. Цикл FOR проходит по всем новым виртуальным машинам и выполняет для каждой из них команды в фигурных скобках верхнего уровня.

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

Инициализация виртуальных машин SQL Server

В этом разделе необходимо изменить установку SQL Server по умолчанию на каждом из трех серверов. В частности, TCP-протокол уже включен в виртуальной машине SQL Server. Однако все еще требуется открыть брандмауэр для удаленного доступа SQL Server.

Теперь все готово к запуску. Выполните следующие шаги, которые идентичны для всех трех серверов, если не указано иное.

  1. Подключитесь к ВМ, запустив файл удаленного рабочего стола. Используйте имя входа администратора машины AzureAdmin и пароль Contoso!000, указанные при создании виртуальной машины.

  2. Дождитесь, пока программа установки SQL Server не завершит автоматические задачи инициализации, прежде чем продолжить.

  3. Откройте окно PowerShell с правами администратора.

  4. Откройте брандмауэр для удаленного доступа 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
    

Все готово для настройки зеркального отображения базы данных на трех серверах. В ходе последующих шагов держите окна PowerShell открытыми на всех трех серверах.

Настройка зеркального отображения базы данных с использованием сертификатов

  1. На сервере SQL1 запустите SQLCMD.EXE в окне PowerShell, затем создайте и сертификат сервера, и резервную копию этого сертификата.

    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. На сервере SQL2 запустите SQLCMD.EXE в окне PowerShell, затем создайте и сертификат сервера, и резервную копию этого сертификата.

    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. Сертификаты сохраняются в каталоге данных по умолчанию C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA. Скопируйте сертификаты в тот же каталог на двух серверах так, чтобы на каждом сервере были сертификаты с двух других серверов. Поскольку две ВМ SQL Server находятся в двух разных виртуальных сетях и не могут сразу совместно использовать файлы, самым простым способом скопировать файлы с одной виртуальной машины на другую будет присоединение диска с локального компьютера к сеансу удаленного рабочего стола и копирование сертификатов на него с присоединенного диска.

  4. На сервере SQL1 предоставьте разрешения на вход серверу SQL2 с использованием его сертификата.

    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. На сервере SQL2 предоставьте разрешения на вход серверу SQL1 с использованием его сертификата.

    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. На сервере SQL1 создайте базу данных, затем создайте полную резервную копию и резервную копию журнала.

    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. Скопируйте файлы резервной копии на сервер SQL2 в каталог C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\BACKUP.

  8. На сервере SQL2 выполните восстановление из резервных копий базы данных с параметром WITH NORECOVERY и включите ее в качестве участника зеркального отображения.

    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
     
    
    

    Обратите внимание, что вместо имени узла SQL1 используется имя облачной службы <uniqueservicename1>.cloudapp.net. Серверы SQL1 и SQL2 не могут подключаться друг к другу напрямую и должны соединяться с конечными точками друг друга в соответствующих облачных службах. Вы уже открыли конечную точку зеркального отображения базы данных по умолчанию, порт 5022, когда создавали сервер SQL1.

  9. На сервере SQL1 включите SQL1 в качестве участника зеркального отображения.

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

    Кроме того, обратите внимание, что вместо имени узла SQL1 используется имя облачной службы <uniqueservicename2>.cloudapp.net. Вы уже открыли конечную точку зеркального отображения базы данных по умолчанию, порт 5022, когда создавали сервер SQL2.

Поздравляем! Вы успешно установили зеркальное отображение базы данных в двух центрах обработки данных Azure с использованием сертификатов. Внимание! Поскольку серверы обращаются друг к другу с использованием имен облачных служб, а не с помощью имен экземпляров, монитору зеркального отображения базы данных не удается подключиться к удаленному серверу, чтобы запросить состояние, при попытке подключения к удаленному серверу с использованием имени экземпляра. Чтобы отследить сеанс зеркального отображения баз данных в мониторе зеркального отображения баз данных, следуйте приведенным ниже инструкциям.

  1. На экземпляре SQL2 включите проверку подлинности SQL Server. Дополнительные сведения см. в разделе Изменение режима проверки подлинности сервера.

  2. На экземпляре SQL2 создайте пользователя sysadmin, использующего проверку подлинности SQL Server. Дополнительные сведения см. в разделе Создание имени входа.

  3. На экземпляре SQL1 в SQL Server Management Studio подключитесь к экземпляру SQL2, указав в качестве имени сервера <uniqueservicename2>.cloudapp.net и режим Проверка подлинности SQL Server.

  4. Через установленное подключение ядра СУБД к экземпляру SQL2 запустите монитор зеркального отображения баз данных. Дополнительные сведения см. в разделе Запуск монитора зеркального отображения баз данных (SQL Server Management Studio).

Показ:
© 2015 Microsoft