Экспорт (0) Печать
Развернуть все

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

Обновлено: Апрель 2014 г.

В этом учебнике показана полная реализация зеркального отображения базы данных SQL Server для аварийного восстановления в гибридной ИТ-среде. В этой конфигурации сервер основной базы данных работает локально, а сервер зеркальной базы данных работает в Azure. Этот сценарий можно выполнить без VPN-соединения между Azure и вашей локальной сетью, если используются сертификаты сервера. Более того, сервер основной базы данных может работать за локальным устройством NAT, если перенаправить на сервер соответствующие порты на устройстве NAT.

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

  • Одна виртуальная сеть в центре обработки данных на западе США

  • Одна машина SQL Server (SQLOnPrem), развернутая в вашей локальной сети и работающая за устройством NAT

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

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

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

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

  1. Установите Windows Server 2008 R2 на дополнительном локальном компьютере, который будет использоваться для сервера основной базы данных.

  2. Подключите компьютер к Интернету и установите все обновления.

  3. Отключите компьютер от Интернета и откройте его в одной подсети как VPN-устройство.

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

  5. Измените имя компьютера на SQLOnPRem, если вы этого еще не сделали.

    $computerName = "SQLOnPrem"
    netdom renamecomputer $env:COMPUTERNAME /newname:$computerName /force /reboot
    

    После ввода этих команд компьютеры автоматически перезагрузятся.

  6. После перезагрузки компьютеров авторизуйтесь в качестве локального администратора и откройте окно Windows PowerShell с правами администратора.

  7. Укажите каталог, содержащий файлы установки SQL Server в $installDir, и установите SQL Server 2012 и среду SQL Server Management Studio (SSMS) на компьютер. Если отметить при установке компонент среды SSMS, то будут установлены инструменты с интерфейсом командной строки и поставщики PowerShell.

    $installDir = "<Directory of SQL Server Setup.exe>"
    
    cd $installDir
    .\Setup.exe `
        /q `
        /ACTION=Install `
        /FEATURES=SQL,SSMS `
        /INSTANCENAME=MSSQLSERVER `
        /SQLSYSADMINACCOUNTS="Administrator" `
        /IACCEPTSQLSERVERLICENSETERMS
    
  8. Откройте брандмауэр для удаленного доступа 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
    
  9. Включите TCP-протокол на экземпляре по умолчанию и перезапустите службу SQL Server.

    [reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
    [reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement")
    $wmi = new-object ("Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer") $env:COMPUTERNAME
    $wmi.ServerInstances['MSSQLSERVER'].ServerProtocols['Tcp'].IsEnabled = "True"
    $wmi.ServerInstances['MSSQLSERVER'].ServerProtocols['Tcp'].Alter()
    $svc = Get-Service -Name 'MSSQLSERVER'
    $timeout = New-Object System.TimeSpan -ArgumentList 0, 0, 30
    $svc.Stop(); 
    $svc.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Stopped,$timeout)
    $svc.Start(); 
    $svc.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Stopped,$timeout) 
    
  10. Выйдите из текущего окна PowerShell. При следующем открытии окна PowerShell двоичные пути SQL Server будут включены в переменную среды PATH, так что вы сможете использовать для настройки зеркального отображения базы данных инструменты с интерфейсом командной строки и поставщик SQL Server PowerShell.

  11. Войдите в ваше локальное устройство NAT как администратор и добавьте правило перенаправления портов, направляющее весь входящий трафик через порт 5022 на SQLOnPrem, порт 5022. Инструкции по настройке устройства NAT см. в руководстве пользователя, предоставляемом производителем устройства.

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

Настройка локальной подсети SQL Server завершена. Далее предстоит настроить виртуальную машину SQL Server в Azure.

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

    $workingDir = "C:\workingDirectory\"
    $location = "West US"
    $affinityGroupName = "ContosoAG"
    $affinityGroupDescription = "Contoso SQL HADR Affinity Group"
    $affinityGroupLabel = "IaaS BI Affinity Group"
    $virtualNetworkName = "ContosoNET" 
    $localNetworkName = "ContosoNETLocal"
    $networkConfigPath = $workingDir + "NetworkConfig.xml"
    $storageAccountName = "<uniquestorageaccountname>"
    $storageAccountLabel = "Contoso SQL HADR Storage Account"
    $storageAccountContainer = "https://$storageAccountName.blob.core.windows.net/vhds/"
    $sqlImageName = (Get-AzureVMImage | where {$_.Label -like "SQL Server 2012 SP1 Enterprise*"} | sort PublishedDate -Descending)[0].ImageName
    $serviceName = "<uniqueservicename>"
    $sqlServerName = "SQLInCloud"
    $vmAdminUser = "AzureAdmin" 
    $vmAdminPassword = "Contoso!000"
    $subnetName = "Back"
    

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

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

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

    • $sqlImageName указывает обновленное имя образа виртуальной машины, который содержит SQL Server 2012 Enterprise Edition с пакетом обновления 1 (SP1).

  2. Импортируйте модуль 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.

  3. Создайте территориальную группу.

    New-AzureAffinityGroup `
        -Name $affinityGroupName `
        -Location $location `
        -Description $affinityGroupDescription `
        -Label $affinityGroupLabel
    
  4. Создайте виртуальную сеть путем импорта файла конфигурации с именем NetworkConfig.xml.

    Set-AzureVNetConfig `
        -ConfigurationPath $networkConfigPath
    

    Файл конфигурации содержит следующий XML-документ. Кратко говоря, документ указывает виртуальную сеть ContosoNET в группе сходства ContosoAG, а также адресное пространство 10.10.0.0/16. Подсеть Back, или 10.1.1.0/24, — это хранилище, в которое нужно поместить виртуальную машину SQL Server. Если переменные $affinityGroupName, $virtualNetworkNameи $subnetName были изменены ранее, соответствующие имена ниже также следует изменить.

    <NetworkConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/ServiceHosting/2011/07/NetworkConfiguration">
      <VirtualNetworkConfiguration>
        <Dns />
        <VirtualNetworkSites>
          <VirtualNetworkSite name="ContosoNET" AffinityGroup="ContosoAG">
            <AddressSpace>
              <AddressPrefix>10.10.0.0/16</AddressPrefix>
            </AddressSpace>
            <Subnets>
              <Subnet name="Back">
                <AddressPrefix>10.10.1.0/24</AddressPrefix>
              </Subnet>
            </Subnets>
          </VirtualNetworkSite>
        </VirtualNetworkSites>
      </VirtualNetworkConfiguration>
    </NetworkConfiguration>
    
  5. Создайте учетную запись хранилища, связанную с созданной территориальной группой, а затем установите ее в качестве текущей учетной записи хранилища своей подписки.

    New-AzureStorageAccount `
        -StorageAccountName $storageAccountName `
        -Label $storageAccountLabel `
        -AffinityGroup $affinityGroupName
    Set-AzureSubscription `
        -SubscriptionName (Get-AzureSubscription).SubscriptionName `
        -CurrentStorageAccount $storageAccountName
    
  6. Создайте виртуальную машину SQL Server в новой облачной службе.

    New-AzureVMConfig `
        -Name $sqlServerName `
        -InstanceSize Large `
        -ImageName $sqlImageName `
        -MediaLocation "$storageAccountContainer$sqlServerName.vhd" `
        -DiskLabel "OS" | 
        Add-AzureProvisioningConfig `
            -Windows `
            -Password $vmAdminPassword `
            -AdminUserName $vmAdminUser `
            -DisableAutomaticUpdates ` |
            Set-AzureSubnet `
                -SubnetNames $subnetName |
                Add-AzureEndpoint `
                    -Name "SQL" `
                    -Protocol "tcp" `
                    -PublicPort 1433 `
                    -LocalPort 1433 | 
                    Add-AzureEndpoint `
                        -Name "SQL" `
                        -Protocol "mirroring" `
                        -PublicPort 5022 `
                        -LocalPort 5022 | 
                        New-AzureVM `
                            -ServiceName $serviceName `
                            –AffinityGroup $affinityGroupName `
                            -VNetName $virtualNetworkName
    

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

    • New-AzureVMConfig создает конфигурацию виртуальной машины с помощью образа SQL Server 2012 Enterprise Edition с пакетом обновления 1 (SP1) из коллекции виртуальной машины. Также этот набор команд задает режим диска операционной системы на чтение кэша (запрет записи в кэш). Рекомендуется переносить файлы баз данных на отдельный диск с данными, подсоединенный к виртуальной машине, и настроить для него запрет на чтение кэша или запись в кэш. Однако, поскольку локальный сервер использует диск С для файлов баз данных, нет смысла переносить файлы баз данных. Таким образом, виртуальная машина Azure может иметь идентичную конфигурацию с локальным сервером.

    • Add-AzureProvisioningConfig указывает автономную машину Windows, задает пароль администратора и отключает автоматические обновления.

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

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

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

    $VMStatus = Get-AzureVM -name $sqlServerName
    
    While ($VMStatus.Status -ne "ReadyRole")
    {
        write-host "Waiting...Current Status = " $VMStatus.Status
        Start-Sleep -Seconds 15
        $VMStatus = Get-AzureVM -name $sqlServerName
    } 
    
    Get-AzureRemoteDesktopFile `
        -ServiceName $serviceName `
        -Name $sqlServerName `
        -LocalPath "$workingDir$sqlServerName.rdp"
    

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

    SQLCMD -S SQLOnPrem
    USE master;
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong_Password_#1>';
    GO
    
    CREATE CERTIFICATE SQLOnPrem_cert WITH SUBJECT = 'SQLOnPrem certificate';
    GO
    
    CREATE ENDPOINT Endpoint_Mirroring
       STATE = STARTED
       AS TCP (LISTENER_PORT=5022, LISTENER_IP = ALL) 
       FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE SQLOnPrem_cert, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL);
    GO
    
    BACKUP CERTIFICATE SQLOnPrem_cert TO FILE = 'SQLOnPrem_cert.cer';
    GO 
    
  2. На сервере SQLInCloud запустите SQLCMD.EXE в окне PowerShell, затем создайте и сертификат сервера, и резервную копию этого сертификата.

    SQLCMD -S SQLInCloud
    USE master;
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong_Password_#2>';
    GO
    
    CREATE CERTIFICATE SQLInCloud_cert WITH SUBJECT = 'SQLInCloud certificate for database mirroring';
    GO
    
    CREATE ENDPOINT Endpoint_Mirroring
       STATE = STARTED
       AS TCP (LISTENER_PORT=5022, LISTENER_IP = ALL) 
       FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE SQLInCloud_cert, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL);
    GO
    
    BACKUP CERTIFICATE SQLInCloud_cert TO FILE = 'SQLInCloud_cert.cer';
    GO
    
  3. Сертификаты сохраняются в каталоге данных по умолчанию C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA. Скопируйте сертификаты в тот же каталог на двух серверах так, чтобы на каждом сервере были сертификаты с двух других серверов. Поскольку две ВМ SQL Server находятся в двух разных виртуальных сетях и не могут сразу совместно использовать файлы, самым простым способом скопировать файлы с одной виртуальной машины на другую будет присоединение диска с локального компьютера к сеансу удаленного рабочего стола и копирование сертификатов на него с присоединенного диска.

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

    CREATE LOGIN DBMirroringLogin WITH PASSWORD = 'Sample_Login_Password!@#';
    GO
    
    CREATE USER DBMirroringLogin FOR LOGIN DBMirroringLogin;
    GO
    
    CREATE CERTIFICATE SQLInCloud_cert AUTHORIZATION DBMirroringLogin FROM FILE = 'SQLInCloud_cert.cer';
    GO
    
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [DBMirroringLogin];
    GO
     
    
    
  5. На сервере SQLInCloud предоставьте разрешения на вход серверам SQLOnPrem с использованием его сертификата.

    CREATE LOGIN DBMirroringLogin WITH PASSWORD = 'Sample_Login_Password!@#';
    GO
    
    CREATE USER DBMirroringLogin FOR LOGIN DBMirroringLogin;
    GO
    
    CREATE CERTIFICATE SQLOnPrem_cert AUTHORIZATION DBMirroringLogin FROM FILE = 'SQLOnPrem_cert.cer'
    GO
    
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [DBMirroringLogin];
    GO
     
    
    
  6. На сервере SQLOnPrem создайте базу данных, затем создайте полную резервную копию и резервную копию журнала.

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

  8. На сервере SQLInCloud выполните восстановление из резервных копий базы данных с параметром 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://<NAT_PUBLIC_IP_ADDRESS>:5022';
    GO
     
    
    

    Обратите внимание, что локальному устройству NAT вместо имени узла SQLOnPrem необходимо предоставить открытый IP-адрес. Серверу SQLInCloud не удается подключиться напрямую к SQLOnPrem, трафик на SQLOnPrem необходимо перенаправить с устройства NAT. Вы уже настроили перенаправление портов на вашем локальном устройстве NAT на порт 5022, так что команда ALTER DATABASE должна выполниться успешно.

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

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

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

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

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

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

  3. На SQLOnPrem в среде SSMS подключитесь к SQLInCloud, указав в качестве имени сервера <uniqueservicename>.cloudapp.net, а в качестве режима проверки подлинности выберите Проверка подлинности SQL Server.

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

Показ:
© 2014 Microsoft