Экспорт (0) Печать
Развернуть все
Эта тема еще не получила оценку - Оценить эту тему

Учебник. Группы доступности AlwaysOn в Windows Azure (PowerShell)

Обновлено: Октябрь 2013 г.

noteПримечание
Учебник по тому же сценарию для графического пользовательского интерфейса см. в разделе Тестовая лаборатория. Создание группы доступности AlwaysOn в Windows Azure.

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

  • виртуальная сеть, содержащая несколько подсетей, включая начальную и конечную подсети;

  • контроллер домена с доменом Active Directory (AD);

  • две виртуальных машины SQL Server, развернутые в конечной подсети и присоединенные к домену AD;

  • кластер WSFC из 3 узлов с моделью кворума Большинство узлов;

  • группа доступности с двумя репликами с синхронной фиксацией базы данных доступности.

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

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

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

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

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

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

    securityБезопасность Примечание
    Файл publishsettings содержит конкретные учетные данные (незакодированные), которые используются для управления подписками и службами Windows Azure. Рекомендации по безопасности состоят в том, что этот файл следует временно сохранить за пределами исходных каталогов (например, в папке Libraries\Documents), а затем после завершения импорта его необходимо удалить. Злонамеренный пользователь, получивший доступ к файлу publishsettings, сможет изменять, создавать и удалять применяемые службы Windows 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 (SP1).

    • Для простоты во всем учебнике используется единственный пароль — 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="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="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>
    
  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 занимает длительное время, цикл продолжает опрашивать новую виртуальную машину до тех пор, пока она не станет готова к использованию.

    $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, кластером WSFC и группой доступности. 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 требуются разрешения Read All Properties и Create Computer Objects для создания объектов Active Directory для WSFC-кластера. Разрешение Read All Properties уже предоставлено учетной записи CORP\Install по умолчанию, поэтому предоставлять его явным образом не требуется. Дополнительные сведения о разрешениях, необходимых для создания WSFC-кластера, см. в разделе Пошаговое руководство для отказоустойчивых кластеров. Настройка учетных записей в 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 вашей виртуальной сети Windows Azure. Необходимо проверить адрес сервера контроллера домена, выполнив команду IPCONFIG.

  2. Выполните следующий набор команд, чтобы создать первую виртуальную машину в кластере WSFC с именем 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 использует то же имя группы доступности, что и сервер DC, и применяет образ SQL Server 2012 Enterprise Edition с пакетом обновления 1 (SP1) из коллекции виртуальных машин. Также этот набор команд задает режим диска операционной системы на чтение кэша (запрет записи в кэш). Рекомендуется переносить файлы баз данных на отдельный диск с данными, подсоединенный к виртуальной машине, и настроить для него запрет на чтение кэша или запись в кэш. Однако наилучшая альтернатива — удалить кэширование записи на диске операционной системы, так как кэширование чтения с этого диска удалить нельзя.

    • 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 с использованием параметров по умолчанию.

Инициализация виртуальных машин кластера WSFC

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

  • (Все серверы) Необходимо установить компонент Failover Clustering.

  • (Все серверы) Необходимо добавить учетную запись CORP\Install как администратора машины.

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

  • (Только ContosoSQL1 и ContosoSQL2) Необходимо добавить учетную запись NT AUTHORITY\System в качестве имени входа с приведенными ниже разрешениями.

    • Изменение любой группы доступности

    • Подключиться к SQL Server

    • Просмотр состояния сервера

  • (Только 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. Работа с этим сервером завершена.

Затем инициализируйте виртуальные машины 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. Выйдите из обеих виртуальных машин.

Теперь можно приступить к настройке группы доступности. Для выполнения всех действий с ContosoSQL1 будет использоваться поставщик SQL Server PowerShell.

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

  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 из раздела Создание WSFC-кластера для групп доступности AlwaysOn в виртуальной машине Windows Azure в локальный рабочий каталог. Этот скрипт поможет создать рабочий WSFC-кластер. Дополнительные сведения о взаимодействии WSFC-кластера с сетью Windows Azure см. в разделе Высокий уровень доступности и аварийное восстановление для SQL Server в виртуальных машинах Windows Azure.

  8. Измените рабочий каталог и создайте WSFC-каталог с помощью загруженного скрипта.

    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 на основе группы доступности в Windows Azure успешно создано. Инструкции по настройке прослушивателя группы доступности см. в разделе Учебник. Конфигурация прослушивателя для групп доступности AlwaysOn в Windows Azure.

Была ли вам полезна эта информация?
(1500 символов осталось)
Спасибо за ваш отзыв

Добавления сообщества

ДОБАВИТЬ
Корпорация Майкрософт проводит интернет-опрос, чтобы выяснить ваше мнение о веб-сайте MSDN. Если вы желаете принять участие в этом интернет-опросе, он будет отображен при закрытии веб-сайта MSDN.

Вы хотите принять участие?
Показ:
© 2014 Microsoft. Все права защищены.