Настройка группы доступности AlwaysOn на виртуальной машине Azure с помощью PowerShell

Прежде чем начать, рассмотрите возможность выполнения этой задачи в модели Диспетчера ресурсов Azure. Мы рекомендуем использовать модель Azure Resource Manager для новых развертываний. Сведения о группах доступности SQL Server AlwaysOn на виртуальных машинах Azure.

Это важно

Рекомендуется использовать модель Resource Manager для большинства новых развертываний. В Azure предлагаются две модели развертывания для создания ресурсов и работы с ними: модель Resource Manager и классическая модель. В этой статье рассматривается использование классической модели развертывания.

Виртуальные машины Azure могут помочь администраторам базы данных снизить затраты на высокодоступную систему SQL Server. Это пошаговое руководство покажет, как полностью реализовать группу доступности с помощью функции "Always On" в SQL Server внутри среды Azure. В конце руководства решение SQL Server AlwaysOn в Azure будет состоять из следующих элементов:

  • Виртуальная сеть, содержащая несколько подсетей, включая интерфейсную и серверную подсеть.
  • Контроллер домена с доменом Active Directory.
  • Две виртуальные машины SQL Server, развернутые в серверной подсети и присоединенные к домену Active Directory.
  • Отказоустойчивый кластер Windows с тремя узлами с моделью кворума большинства узлов.
  • Группа доступности с двумя репликами синхронной фиксации базы данных доступности.

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

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

Подключение к подписке Azure и создание виртуальной сети

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

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

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

    Замечание

    Файл .publishsettings содержит учетные данные (незакодированные), которые используются для администрирования подписок и служб Azure. Рекомендуется сохранить его временно за пределами исходных каталогов (например, в папке "Библиотеки\Документы"), а затем удалить его после завершения импорта. Злоумышленник, который получает доступ к файлу publishsettings, может изменять, создавать и удалять службы Azure.

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

    $location = "West US"
    $affinityGroupName = "ContosoAG"
    $affinityGroupDescription = "Contoso SQL HADR Affinity Group"
    $affinityGroupLabel = "IaaS BI Affinity Group"
    $networkConfigPath = "C:\scripts\Network.netcfg"
    $virtualNetworkName = "ContosoNET"
    $storageAccountName = "<uniquestorageaccountname>"
    $storageAccountLabel = "Contoso SQL HADR Storage Account"
    $storageAccountContainer = "https://" + $storageAccountName + ".blob.core.windows.net/vhds/"
    $winImageName = (Get-AzureVMImage | where {$_.Label -like "Windows Server 2008 R2 SP1*"} | sort PublishedDate -Descending)[0].ImageName
    $sqlImageName = (Get-AzureVMImage | where {$_.Label -like "SQL Server 2012 SP1 Enterprise*"} | sort PublishedDate -Descending)[0].ImageName
    $dcServerName = "ContosoDC"
    $dcServiceName = "<uniqueservicename>"
    $availabilitySetName = "SQLHADR"
    $vmAdminUser = "AzureAdmin"
    $vmAdminPassword = "Contoso!000"
    $workingDir = "c:\scripts\"
    

    Обратите внимание на следующее, чтобы убедиться, что команды будут выполнены позже:

    • Переменные $storageAccountName и $dcServiceName должны быть уникальными, так как они используются для идентификации учетной записи хранения облака и облачного сервера соответственно в Интернете.
    • Имена, указанные для переменных $affinityGroupName и $virtualNetworkName , настраиваются в документе конфигурации виртуальной сети, который будет использоваться позже.
    • $sqlImageName указывает обновлённое имя образа виртуальной машины, содержащего SQL Server 2012 Enterprise Edition с пакетом обновления 1.
    • Для простоты Contoso!000 — это тот же пароль, который используется во всем руководстве.
  3. Создайте группу сходства.

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

    Set-AzureVNetConfig `
        -ConfigurationPath $networkConfigPath
    

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

    <NetworkConfiguration xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns="https://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="Front">
                <AddressPrefix>10.10.1.0/24</AddressPrefix>
              </Subnet>
              <Subnet name="Back">
                <AddressPrefix>10.10.2.0/24</AddressPrefix>
              </Subnet>
            </Subnets>
          </VirtualNetworkSite>
        </VirtualNetworkSites>
      </VirtualNetworkConfiguration>
    </NetworkConfiguration>
    ```xml
    
    
  5. Создайте учетную запись хранения, связанную с созданной группой сходства, и задайте ее в качестве текущей учетной записи хранения в подписке.

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

    New-AzureVMConfig `
        -Name $dcServerName `
        -InstanceSize Medium `
        -ImageName $winImageName `
        -MediaLocation "$storageAccountContainer$dcServerName.vhd" `
        -DiskLabel "OS" |
        Add-AzureProvisioningConfig `
            -Windows `
            -DisableAutomaticUpdates `
            -AdminUserName $vmAdminUser `
            -Password $vmAdminPassword |
            New-AzureVM `
                -ServiceName $dcServiceName `
                –AffinityGroup $affinityGroupName `
                -VNetName $virtualNetworkName
    

    Приведенные ниже команды выполняют следующие действия.

    • New-AzureVMConfig создает конфигурацию виртуальной машины.
    • Add-AzureProvisioningConfig предоставляет параметры конфигурации автономного сервера Windows.
    • Add-AzureDataDisk добавляет диск данных, который будет использоваться для хранения данных Active Directory, при этом параметр кэширования установлен в значение None.
    • New-AzureVM создает облачную службу и создает новую виртуальную машину Azure в новой облачной службе.
  7. Дождитесь полной подготовки новой виртуальной машины и скачайте файл удаленного рабочего стола в вашу рабочую директорию. Так как новая виртуальная машина Azure занимает много времени для подготовки, while цикл продолжает опрашивать новую виртуальную машину, пока она не будет готова к использованию.

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

Теперь сервер контроллера домена успешно подготовлен. Затем вы настроите домен Active Directory на этом сервере контроллера домена. Оставьте окно PowerShell открытым на локальном компьютере. Позже вы будете использовать его для создания двух виртуальных машин SQL Server.

Настройка контроллера домена

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

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

  3. Выполните следующую команду DCPROMO.EXE , чтобы настроить домен corp.contoso.com с каталогами данных на диске M.

    dcpromo.exe `
        /unattend `
        /ReplicaOrNewDomain:Domain `
        /NewDomain:Forest `
        /NewDomainDNSName:corp.contoso.com `
        /ForestLevel:4 `
        /DomainNetbiosName:CORP `
        /DomainLevel:4 `
        /InstallDNS:Yes `
        /ConfirmGc:Yes `
        /CreateDNSDelegation:No `
        /DatabasePath:"C:\Windows\NTDS" `
        /LogPath:"C:\Windows\NTDS" `
        /SYSVOLPath:"C:\Windows\SYSVOL" `
        /SafeModeAdminPassword:"Contoso!000"
    

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

  4. Снова подключитесь к серверу контроллера домена, запустите файл удаленного рабочего стола. На этот раз войдите как CORP\Administrator.

  5. Откройте окно PowerShell в режиме администратора и импортируйте модуль PowerShell Active Directory, выполнив следующую команду:

    Import-Module ActiveDirectory
    
  6. Выполните следующие команды, чтобы добавить трех пользователей в домен.

    $pwd = ConvertTo-SecureString "Contoso!000" -AsPlainText -Force
    New-ADUser `
        -Name 'Install' `
        -AccountPassword  $pwd `
        -PasswordNeverExpires $true `
        -ChangePasswordAtLogon $false `
        -Enabled $true
    New-ADUser `
        -Name 'SQLSvc1' `
        -AccountPassword  $pwd `
        -PasswordNeverExpires $true `
        -ChangePasswordAtLogon $false `
        -Enabled $true
    New-ADUser `
        -Name 'SQLSvc2' `
        -AccountPassword  $pwd `
        -PasswordNeverExpires $true `
        -ChangePasswordAtLogon $false `
        -Enabled $true
    

    CORP\Install используется для настройки всего, что связано с экземплярами служб SQL Server, отказоустойчивым кластером и группой доступности. CORP\SQLSvc1 и CORP\SQLSvc2 используются в качестве учетных записей службы SQL Server для двух виртуальных машин SQL Server.

  7. Затем выполните следующие команды, чтобы предоставить CORP\Install разрешения на создание объектов компьютера в домене.

    Cd ad:
    $sid = new-object System.Security.Principal.SecurityIdentifier (Get-ADUser "Install").SID
    $guid = new-object Guid bf967a86-0de6-11d0-a285-00aa003049e2
    $ace1 = new-object System.DirectoryServices.ActiveDirectoryAccessRule $sid,"CreateChild","Allow",$guid,"All"
    $corp = Get-ADObject -Identity "DC=corp,DC=contoso,DC=com"
    $acl = Get-Acl $corp
    $acl.AddAccessRule($ace1)
    Set-Acl -Path "DC=corp,DC=contoso,DC=com" -AclObject $acl
    

    Указанный выше GUID — это GUID для типа объекта компьютера. Для учетной записи CORP\Install требуется разрешение на чтение всех свойств и создание объектов компьютера для создания объектов Active Direct для отказоустойчивого кластера. Разрешение на чтение всех свойств уже предоставляется CORP\Install по умолчанию, поэтому не нужно явно предоставлять его. Дополнительные сведения о разрешениях, необходимых для создания отказоустойчивого кластера, см. в пошаговом руководстве по настройке учетных записей в Active Directory.

    После завершения настройки Active Directory и пользовательских объектов вы создадите две виртуальные машины SQL Server и присоедините их к этому домену.

Создание виртуальных машин SQL Server

  1. Продолжайте использовать окно PowerShell, открытое на локальном компьютере. Определите следующие дополнительные переменные:

    $domainName= "corp"
    $FQDN = "corp.contoso.com"
    $subnetName = "Back"
    $sqlServiceName = "<uniqueservicename>"
    $quorumServerName = "ContosoQuorum"
    $sql1ServerName = "ContosoSQL1"
    $sql2ServerName = "ContosoSQL2"
    $availabilitySetName = "SQLHADR"
    $dataDiskSize = 100
    $dnsSettings = New-AzureDns -Name "ContosoBackDNS" -IPAddress "10.10.0.4"
    

    IP-адрес 10.10.0.4 обычно назначается первой виртуальной машине, создаваемой в подсети 10.10.0.0/16 виртуальной сети Azure. Убедитесь, что это адрес сервера контроллера домена, выполнив IPCONFIG.

  2. Выполните следующие команды, чтобы создать первую виртуальную машину в отказоустойчивом кластере с именем ContosoQuorum:

    New-AzureVMConfig `
        -Name $quorumServerName `
        -InstanceSize Medium `
        -ImageName $winImageName `
        -MediaLocation "$storageAccountContainer$quorumServerName.vhd" `
        -AvailabilitySetName $availabilitySetName `
        -DiskLabel "OS" |
        Add-AzureProvisioningConfig `
            -WindowsDomain `
            -AdminUserName $vmAdminUser `
            -Password $vmAdminPassword `
            -DisableAutomaticUpdates `
            -Domain $domainName `
            -JoinDomain $FQDN `
            -DomainUserName $vmAdminUser `
            -DomainPassword $vmAdminPassword |
            Set-AzureSubnet `
                -SubnetNames $subnetName |
                New-AzureVM `
                    -ServiceName $sqlServiceName `
                    –AffinityGroup $affinityGroupName `
                    -VNetName $virtualNetworkName `
                    -DnsSettings $dnsSettings
    

    Обратите внимание на следующую команду:

    • New-AzureVMConfig создает конфигурацию виртуальной машины с нужным именем группы доступности. Последующие виртуальные машины будут созданы с тем же именем группы доступности, чтобы они были присоединены к той же группе доступности.
    • Add-AzureProvisioningConfig присоединяет виртуальную машину к созданному домену Active Directory.
    • Set-AzureSubnet помещает виртуальную машину в заднюю подсеть.
    • New-AzureVM создает облачную службу и создает новую виртуальную машину Azure в новой облачной службе. Параметр DnsSettings указывает, что DNS-сервер для серверов в новой облачной службе имеет IP-адрес 10.10.0.4. Это IP-адрес сервера контроллера домена. Этот параметр необходим для успешного присоединения новых виртуальных машин в облачной службе к домену Active Directory. Без этого параметра необходимо вручную задать параметры IPv4 на виртуальной машине, чтобы использовать сервер контроллера домена в качестве основного DNS-сервера после подготовки виртуальной машины, а затем присоединить виртуальную машину к домену Active Directory.
  3. Выполните следующие команды, чтобы создать виртуальные машины SQL Server с именем ContosoSQL1 и ContosoSQL2.

    # Create ContosoSQL1...
    New-AzureVMConfig `
        -Name $sql1ServerName `
        -InstanceSize Large `
        -ImageName $sqlImageName `
        -MediaLocation "$storageAccountContainer$sql1ServerName.vhd" `
        -AvailabilitySetName $availabilitySetName `
        -HostCaching "ReadOnly" `
        -DiskLabel "OS" |
        Add-AzureProvisioningConfig `
            -WindowsDomain `
            -AdminUserName $vmAdminUser `
            -Password $vmAdminPassword `
            -DisableAutomaticUpdates `
            -Domain $domainName `
            -JoinDomain $FQDN `
            -DomainUserName $vmAdminUser `
            -DomainPassword $vmAdminPassword |
            Set-AzureSubnet `
                -SubnetNames $subnetName |
                Add-AzureEndpoint `
                    -Name "SQL" `
                    -Protocol "tcp" `
                    -PublicPort 1 `
                    -LocalPort 1433 |
                    New-AzureVM `
                        -ServiceName $sqlServiceName
    
    # Create ContosoSQL2...
    New-AzureVMConfig `
        -Name $sql2ServerName `
        -InstanceSize Large `
        -ImageName $sqlImageName `
        -MediaLocation "$storageAccountContainer$sql2ServerName.vhd" `
        -AvailabilitySetName $availabilitySetName `
        -HostCaching "ReadOnly" `
        -DiskLabel "OS" |
        Add-AzureProvisioningConfig `
            -WindowsDomain `
            -AdminUserName $vmAdminUser `
            -Password $vmAdminPassword `
            -DisableAutomaticUpdates `
            -Domain $domainName `
            -JoinDomain $FQDN `
            -DomainUserName $vmAdminUser `
            -DomainPassword $vmAdminPassword |
            Set-AzureSubnet `
                -SubnetNames $subnetName |
                Add-AzureEndpoint `
                    -Name "SQL" `
                    -Protocol "tcp" `
                    -PublicPort 2 `
                    -LocalPort 1433 |
                    New-AzureVM `
                        -ServiceName $sqlServiceName
    

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

    • New-AzureVMConfig использует то же имя набора доступности, что и сервер контроллера домена, и использует образ SQL Server 2012 Enterprise Edition с пакетом обновления 1 в каталоге виртуальных машин. Он также задает диск операционной системы только для чтения и кэширования (без кэширования записи). Рекомендуется перенести файлы базы данных на отдельный диск данных, который вы подключаете к виртуальной машине, и настроить его без кэширования чтения или записи. Однако следующее лучшее действие — отключить кэширование записи на диске операционной системы, поскольку вы не можете отключить кэширование чтения на этом диске.
    • Add-AzureProvisioningConfig присоединяет виртуальную машину к созданному домену Active Directory.
    • Set-AzureSubnet помещает виртуальную машину в заднюю подсеть.
    • Add-AzureEndpoint добавляет конечные точки доступа, чтобы клиентские приложения могли получить доступ к этим экземплярам служб SQL Server в Интернете. Разные порты предоставляются ContosoSQL1 и ContosoSQL2.
    • New-AzureVM создает новую виртуальную машину SQL Server в той же облачной службе, что и ContosoQuorum. Если вы хотите, чтобы они были в одной группе доступности, необходимо разместить виртуальные машины в одной облачной службе.
  4. Подождите, пока каждая виртуальная машина будет полностью подготовлена, и файл удаленного рабочего стола для каждой из них скачан в ваш рабочий каталог. Цикл for проходит через три новых виртуальных машины и выполняет команды внутри фигурных скобок верхнего уровня для каждой из них.

    Foreach ($VM in $VMs = Get-AzureVM -ServiceName $sqlServiceName)
    {
        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 с параметрами по умолчанию.

Запустите виртуальные машины отказоустойчивого кластера

В этом разделе необходимо изменить три сервера, которые будут использоваться в отказоустойчивом кластере и установке SQL Server. Конкретно:

  • Все серверы: необходимо установить функцию отказоустойчивого кластеризационного режима.

  • Все серверы: необходимо добавить CORP\Install в качестве администратора компьютера.

  • Только ContosoSQL1 и ContosoSQL2: необходимо добавить CORP\Install в качестве роли sysadmin в базу данных по умолчанию.

  • Только ContosoSQL1 и ContosoSQL2: необходимо добавить NT AUTHORITY\System в качестве входа со следующими разрешениями:

    • Изменение любой группы доступности
    • Подключить SQL
    • Просмотр состояния сервера
  • Только ContosoSQL1 и ContosoSQL2: протокол TCP уже включен на виртуальной машине SQL Server. Однако вам по-прежнему необходимо открыть брандмауэр для удаленного доступа к SQL Server.

Теперь вы готовы начать. Начиная с ContosoQuorum, выполните следующие действия:

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

  2. Убедитесь, что компьютеры успешно присоединены к corp.contoso.com.

  3. Дождитесь завершения установки SQL Server перед выполнением задач автоматической инициализации.

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

  5. Установите функцию отказоустойчивой кластеризации Windows.

    Import-Module ServerManager
    Add-WindowsFeature Failover-Clustering
    
  6. Добавьте CORP\Install в качестве локального администратора.

    net localgroup administrators "CORP\Install" /Add
    
  7. Выход из ContosoQuorum. Теперь вы закончите работу с этим сервером.

    logoff.exe
    

Затем инициализировать ContosoSQL1 и ContosoSQL2. Выполните приведенные ниже действия, которые идентичны для обеих виртуальных машин SQL Server.

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

  2. Убедитесь, что компьютеры успешно присоединены к corp.contoso.com.

  3. Дождитесь завершения установки SQL Server перед выполнением задач автоматической инициализации.

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

  5. Установите функцию отказоустойчивой кластеризации Windows.

    Import-Module ServerManager
    Add-WindowsFeature Failover-Clustering
    
  6. Добавьте CORP\Install в качестве локального администратора.

    net localgroup administrators "CORP\Install" /Add
    
  7. Импортируйте поставщика SQL Server PowerShell.

    Set-ExecutionPolicy -Execution RemoteSigned -Force
    Import-Module -Name "sqlps" -DisableNameChecking
    
  8. Добавьте CORP\Install в качестве роли sysadmin для экземпляра SQL Server по умолчанию.

    net localgroup administrators "CORP\Install" /Add
    Invoke-SqlCmd -Query "EXEC sp_addsrvrolemember 'CORP\Install', 'sysadmin'" -ServerInstance "."
    
  9. Добавьте NT AUTHORITY\System в качестве входа с тремя разрешениями, описанными выше.

    Invoke-SqlCmd -Query "CREATE LOGIN [NT AUTHORITY\SYSTEM] FROM WINDOWS" -ServerInstance "."
    Invoke-SqlCmd -Query "GRANT ALTER ANY AVAILABILITY GROUP TO [NT AUTHORITY\SYSTEM] AS SA" -ServerInstance "."
    Invoke-SqlCmd -Query "GRANT CONNECT SQL TO [NT AUTHORITY\SYSTEM] AS SA" -ServerInstance "."
    Invoke-SqlCmd -Query "GRANT VIEW SERVER STATE TO [NT AUTHORITY\SYSTEM] AS SA" -ServerInstance "."
    
  10. Откройте брандмауэр для удаленного доступа к 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
    
  11. Выйдите из обеих виртуальных машин.

     logoff.exe
    

Наконец, вы готовы настроить группу доступности. Вы будете использовать поставщик SQL Server PowerShell для выполнения всей работы в ContosoSQL1.

Настройка группы доступности

  1. Снова подключитесь к ContosoSQL1 , запустив файлы удаленного рабочего стола. Вместо входа с помощью учетной записи компьютера войдите с помощью CORP\Install.

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

  3. Определите следующие переменные:

    $server1 = "ContosoSQL1"
    $server2 = "ContosoSQL2"
    $serverQuorum = "ContosoQuorum"
    $acct1 = "CORP\SQLSvc1"
    $acct2 = "CORP\SQLSvc2"
    $password = "Contoso!000"
    $clusterName = "Cluster1"
    $timeout = New-Object System.TimeSpan -ArgumentList 0, 0, 30
    $db = "MyDB1"
    $backupShare = "\\$server1\backup"
    $quorumShare = "\\$server1\quorum"
    $ag = "AG1"
    
  4. Импортируйте поставщика SQL Server PowerShell.

    Set-ExecutionPolicy RemoteSigned -Force
    Import-Module "sqlps" -DisableNameChecking
    
  5. Измените учетную запись службы SQL Server для ContosoSQL1 на CORP\SQLSvc1.

    $wmi1 = new-object ("Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer") $server1
    $wmi1.services | where {$_.Type -eq 'SqlServer'} | foreach{$_.SetServiceAccount($acct1,$password)}
    $svc1 = Get-Service -ComputerName $server1 -Name 'MSSQLSERVER'
    $svc1.Stop()
    $svc1.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Stopped,$timeout)
    $svc1.Start();
    $svc1.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Running,$timeout)
    
  6. Измените учетную запись службы SQL Server для ContosoSQL2 на CORP\SQLSvc2.

    $wmi2 = new-object ("Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer") $server2
    $wmi2.services | where {$_.Type -eq 'SqlServer'} | foreach{$_.SetServiceAccount($acct2,$password)}
    $svc2 = Get-Service -ComputerName $server2 -Name 'MSSQLSERVER'
    $svc2.Stop()
    $svc2.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Stopped,$timeout)
    $svc2.Start();
    $svc2.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Running,$timeout)
    
  7. Скачайте CreateAzureFailoverCluster.ps1 из документа "Создание отказоустойчивого кластера для групп доступности Always On в виртуальной машине Azure" в локальный рабочий каталог. Этот сценарий поможет вам создать функциональный отказоустойчивый кластер. Важные сведения о взаимодействии отказоустойчивого кластера Windows с сетью Azure см. в статье "Высокий уровень доступности и аварийное восстановление" для SQL Server на виртуальных машинах Azure.

  8. Перейдите в рабочий каталог и создайте отказоустойчивый кластер с скачанным скриптом.

    Set-ExecutionPolicy Unrestricted -Force
    .\CreateAzureFailoverCluster.ps1 -ClusterName "$clusterName" -ClusterNode "$server1","$server2","$serverQuorum"
    
  9. Включите группы доступности AlwaysOn для экземпляров SQL Server по умолчанию в ContosoSQL1 и ContosoSQL2.

    Enable-SqlAlwaysOn `
        -Path SQLSERVER:\SQL\$server1\Default `
        -Force
    Enable-SqlAlwaysOn `
        -Path SQLSERVER:\SQL\$server2\Default `
        -NoServiceRestart
    $svc2.Stop()
    $svc2.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Stopped,$timeout)
    $svc2.Start();
    $svc2.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Running,$timeout)
    
  10. Создайте каталог резервного копирования и предоставьте разрешения для учетных записей службы SQL Server. Вы будете использовать этот каталог для создания базы данных доступности на вторичной реплике.

    $backup = "C:\backup"
    New-Item $backup -ItemType directory
    net share backup=$backup "/grant:$acct1,FULL" "/grant:$acct2,FULL"
    icacls.exe "$backup" /grant:r ("$acct1" + ":(OI)(CI)F") ("$acct2" + ":(OI)(CI)F")
    
  11. Создайте базу данных в ContosoSQL1с именем MyDB1, выполните полную резервную копию и резервную копию журнала и восстановите их в ContosoSQL2 с параметром WITH NORECOVERY .

    Invoke-SqlCmd -Query "CREATE database $db"
    Backup-SqlDatabase -Database $db -BackupFile "$backupShare\db.bak" -ServerInstance $server1
    Backup-SqlDatabase -Database $db -BackupFile "$backupShare\db.log" -ServerInstance $server1 -BackupAction Log
    Restore-SqlDatabase -Database $db -BackupFile "$backupShare\db.bak" -ServerInstance $server2 -NoRecovery
    Restore-SqlDatabase -Database $db -BackupFile "$backupShare\db.log" -ServerInstance $server2 -RestoreAction Log -NoRecovery
    
  12. Создайте конечные точки группы доступности на виртуальных машинах SQL Server и задайте соответствующие разрешения для конечных точек.

    $endpoint =
      New-SqlHadrEndpoint MyMirroringEndpoint `
        -Port 5022 `
        -Path "SQLSERVER:\SQL\$server1\Default"
      Set-SqlHadrEndpoint `
        -InputObject $endpoint `
        -State "Started"
    $endpoint =
      New-SqlHadrEndpoint MyMirroringEndpoint `
        -Port 5022 `
        -Path "SQLSERVER:\SQL\$server2\Default"
    Set-SqlHadrEndpoint `
         -InputObject $endpoint `
         -State "Started"
    
    Invoke-SqlCmd -Query "CREATE LOGIN [$acct2] FROM WINDOWS" -ServerInstance $server1
    Invoke-SqlCmd -Query "GRANT CONNECT ON ENDPOINT::[MyMirroringEndpoint] TO [$acct2]" -ServerInstance $server1
    Invoke-SqlCmd -Query "CREATE LOGIN [$acct1] FROM WINDOWS" -ServerInstance $server2
    Invoke-SqlCmd -Query "GRANT CONNECT ON ENDPOINT::[MyMirroringEndpoint] TO [$acct1]" -ServerInstance $server2
    
  13. Создайте доступные реплики.

    $primaryReplica =
       New-SqlAvailabilityReplica `
         -Name $server1 `
         -EndpointURL "TCP://$server1.corp.contoso.com:5022" `
         -AvailabilityMode "SynchronousCommit" `
         -FailoverMode "Automatic" `
         -Version 11 `
         -AsTemplate
    $secondaryReplica =
       New-SqlAvailabilityReplica `
         -Name $server2 `
         -EndpointURL "TCP://$server2.corp.contoso.com:5022" `
         -AvailabilityMode "SynchronousCommit" `
         -FailoverMode "Automatic" `
         -Version 11 `
         -AsTemplate
    
  14. Наконец, создайте группу доступности и присоедините вторичную реплику к группе доступности.

    New-SqlAvailabilityGroup `
        -Name $ag `
        -Path "SQLSERVER:\SQL\$server1\Default" `
        -AvailabilityReplica @($primaryReplica,$secondaryReplica) `
        -Database $db
    Join-SqlAvailabilityGroup `
        -Path "SQLSERVER:\SQL\$server2\Default" `
        -Name $ag
    Add-SqlAvailabilityDatabase `
        -Path "SQLSERVER:\SQL\$server2\Default\AvailabilityGroups\$ag" `
        -Database $db
    

Дальнейшие действия

Теперь вы успешно реализовали SQL Server AlwaysOn, создав группу доступности в Azure. Сведения о настройке прослушивателя для этой группы доступности см. в статье Настройка прослушивателя ILB для групп доступности AlwaysOn в Azure.

Дополнительные сведения об использовании SQL Server в Azure см. в статье SQL Server на виртуальных машинах Azure.