Статьи

Зеркальное отображение базы данных SQL в облаке — 20 ключевых сценариев со службами инфраструктуры Windows Azure

«Привет, Кевин… Я хотел бы использовать  Windows Azure  в качестве места, где я настраивал зеркало базы данных SQL Server. Это то, что я могу сделать?

Абсолютно да! На самом деле, для этого даже не требуется ничего особенного, кроме настройки специальных коннекторов или VPN типа «сеть-сеть» (хотя при работе вы должны рассмотреть более безопасное соединение).

В качестве действительно замечательного учебного пособия и примера я укажу на этот ресурс TechNet:  Учебное пособие: зеркальное отображение баз данных для аварийного восстановления в гибридной ИТ-среде.

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

Чтобы попробовать это, я создал новый  сервер Windows Server 2012  (используя  бесплатную  пробную версию ) в качестве  виртуальной машины Hyper-V с именем SQLOnPrem, и к нему был подключен загруженный .ISO  ознакомительной  установки SQL Server 2012 (на виртуальном DVD-диске). водить машину). Мне даже не нужно было вручную устанавливать SQL на эту коробку, так как учебник фактически дает вам сценарии для выполнения всей тяжелой работы. И если вы можете перенаправить порт 5022 через NAT / брандмауэр на локальную виртуальную машину, его очень легко настроить.

Я также использовал свою   подписку Windows Azure
СОВЕТ : Если вам нужен один из них, вы должны получить  90-дневную бесплатную пробную версию .

В этом учебнике приведен   код PowerShell для создания виртуальной машины на основе Windows Azure, которая представляет собой ознакомительный SQL  Server 2012,  работающий на Windows Server 2008 R2. Однако обратите внимание, что, как и в  учебнике по высокой доступности SQL Server AlwaysOn, который  я обсуждал и использовал на прошлой неделе, код PowerShell в учебнике немного устарел и не будет работать так, как это предусмотрено. В частности, команда PowerShell для создания сервера SQLinCloud на основе Azure должна быть:

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

Обратите внимание, что это по сути одна строка PowerShell, которая создает виртуальную машину в определенной группе Affinity, создает службу Azure, подключает компьютер к вашей сети и подсети Azure, устанавливает две конечные точки TCP! Удивительно!

Еще одно исправление необходимо было внести в сценарий для настройки брандмауэра на компьютере SQLonPrem (ваш локальный 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]::Running,$timeout)

(Основной момент — то, что я должен был исправить.)

Я поместил свою копию исправленной PowerShell, которую я использовал для создания виртуальной машины Windows Azure, на SkyDrive для вас. ПОЛУЧИТЕ ЗДЕСЬ .

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

«О да? Докажи это?»

(вздох) Хорошо … вот мой локальный SQL Server …

образ

… И вот мой SQL Server в облаке.

образ

Для тех , кто не знаком с базой данных SQL Server Mirroring, я рекомендую вам посмотреть на этой странице: 
зеркальное отображение базы данных (SQL Server)

Важное примечание : зеркальное отображение базы данных — это функция, которая постепенно сокращается в пользу новых групп доступности AlwaysOn SQL Server 2012 
с целью обеспечения высокой доступности (
см. Мое сообщение в блоге ЗДЕСЬ ). Но … если вы хотите отразить, вы можете. И теперь вы можете отразить до облака.