Konfigurowanie zawsze wł. grupy dostępności na maszynie wirtualnej platformy Azure przy użyciu programu PowerShell

Przed rozpoczęciem weź pod uwagę, że możesz teraz wykonać to zadanie w modelu usługi Azure Resource Manager. W przypadku nowych wdrożeń zalecamy model usługi Azure Resource Manager. Zobacz SQL Server zawsze wł. grup dostępności na maszynach wirtualnych platformy Azure.

Ważne

Zalecamy, aby większość nowych wdrożeń używało Resource Manager modelu. Platforma Azure ma dwa różne modele wdrażania związane z tworzeniem zasobów i pracą z nimi: Resource Manager i model klasyczny. Ten artykuł dotyczy klasycznego modelu wdrożenia.

Maszyny wirtualne platformy Azure mogą pomóc administratorom baz danych obniżyć koszt wysokiej dostępności SQL Server systemu. W tym samouczku pokazano, jak zaimplementować grupę dostępności przy użyciu SQL Server zawsze wł. w środowisku platformy Azure. Na końcu samouczka twoje rozwiązanie zawsze SQL Server na platformie Azure będzie się składać z następujących elementów:

  • Sieć wirtualna zawierająca wiele podsieci, w tym podsieć frontonie i podsieć back-end.
  • Kontroler domeny z domeną usługi Active Directory.
  • Dwie SQL Server wirtualne, które są wdrażane w podsieci serwera końcowego i przyłączone do domeny usługi Active Directory.
  • Trzywęzłowy Windows trybu failover z modelem kworum Node Majority.
  • Grupa dostępności z dwiema replikami zatwierdzania synchronicznego bazy danych dostępności.

Ten scenariusz jest dobrym wyborem ze względu na prostotę platformy Azure, a nie ze względu na opłacalność i inne czynniki. Można na przykład zminimalizować liczbę maszyn wirtualnych dla grupy dostępności z dwoma replikami, aby zaoszczędzić czas obliczeń na platformie Azure, używając kontrolera domeny jako monitora udziału plików kworum w dwuwęzłowym klastrze trybu failover. Ta metoda zmniejsza liczbę maszyn wirtualnych o jeden z powyższych konfiguracji.

Ten samouczek ma na celu pokazanie kroków wymaganych do skonfigurowania opisanego powyżej rozwiązania bez konieczności szczegółowego oszacowania poszczególnych kroków. W związku z tym zamiast dostarczać kroki konfiguracji graficznego interfejsu użytkownika, używa skryptów programu PowerShell do szybkiego wykonywania poszczególnych kroków. W tym samouczku założono, że:

Połączenie z subskrypcją platformy Azure i utwórz sieć wirtualną

  1. W oknie programu PowerShell na komputerze lokalnym zaimportuj moduł platformy Azure, pobierz plik ustawień publikowania na komputer i połącz sesję programu PowerShell z subskrypcją platformy Azure, importując pobrane ustawienia publikowania.

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

    Polecenie Get-AzurePublishSettingsFile automatycznie generuje certyfikat zarządzania na platformie Azure i pobiera go na maszynę. Przeglądarka zostanie automatycznie otwarta i zostanie wyświetlony monit o wprowadzenie poświadczeń konto Microsoft subskrypcji platformy Azure. Pobrany plik .publishsettings zawiera wszystkie informacje potrzebne do zarządzania subskrypcją platformy Azure. Po zapisaniu tego pliku w katalogu lokalnym zaimportuj go za pomocą polecenia Import-AzurePublishSettingsFile .

    Uwaga

    Plik .publishsettings zawiera poświadczenia (niezakodowane), które są używane do administrowania subskrypcjami i usługami platformy Azure. Najlepszym rozwiązaniem w zakresie zabezpieczeń tego pliku jest przechowywanie go tymczasowo poza katalogami źródłowymi (na przykład w folderze Libraries\Documents), a następnie usuwanie go po zakończeniu importowania. Złośliwy użytkownik, który uzyska dostęp do pliku .publishsettings, może edytować, tworzyć i usuwać usługi platformy Azure.

  2. Zdefiniuj szereg zmiennych, których użyjesz do utworzenia infrastruktury IT w chmurze.

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

    Zwróć uwagę na następujące kwestie, aby upewnić się, że polecenia zostaną później pomyślnie z powodzeniem:

    • Zmienne $storageAccountName i$dcServiceName muszą być unikatowe, ponieważ są używane odpowiednio do identyfikowania konta magazynu w chmurze i serwera w chmurze w Internecie.
    • Nazwy określone dla zmiennych $affinityGroupName i $virtualNetworkName konfigurowane w dokumencie konfiguracji sieci wirtualnej, który będzie późniejsza.
    • $sqlImageName określa zaktualizowaną nazwę obrazu maszyny wirtualnej, który zawiera SQL Server 2012 z dodatkiem Service Pack 1 Enterprise Edition.
    • Dla uproszczenia contoso !000 to to samo hasło, które jest używane w całym samouczku.
  3. Utwórz grupę koligacji.

    New-AzureAffinityGroup `
        -Name $affinityGroupName `
        -Location $location `
        -Description $affinityGroupDescription `
        -Label $affinityGroupLabel
    
  4. Utwórz sieć wirtualną, importując plik konfiguracji.

    Set-AzureVNetConfig `
        -ConfigurationPath $networkConfigPath
    

    Plik konfiguracji zawiera następujący dokument XML. W skrócie określa sieć wirtualną o nazwie ContosoNET w grupie koligacji o nazwie ContosoAG. Ma przestrzeń adresową 10.10.0.0/16 i ma dwie podsieci, 10.10.1.0/24 i 10.10.2.0/24, które są odpowiednio podsiecią frontową i podsiecią back. Podsieć frontowa to miejsce, w którym można umieszczać aplikacje klienckie, takie jak Microsoft SharePoint. Podsieć back to miejsce, w którym należy umieścić SQL Server wirtualne. W przypadku zmiany $affinityGroupNamei $virtualNetworkName zmiennych należy również zmienić odpowiednie nazwy poniżej.

    <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. Utwórz konto magazynu skojarzone z utworzoną grupą koligacji i ustaw je jako bieżące konto magazynu w subskrypcji.

    New-AzureStorageAccount `
        -StorageAccountName $storageAccountName `
        -Label $storageAccountLabel `
        -AffinityGroup $affinityGroupName
    Set-AzureSubscription `
        -SubscriptionName (Get-AzureSubscription).SubscriptionName `
        -CurrentStorageAccount $storageAccountName
    
  6. Utwórz serwer kontrolera domeny w nowej usłudze w chmurze i zestawie dostępności.

    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
    

    Te polecenia potokowe wykonaj następujące czynności:

    • Polecenie New-AzureVMConfig tworzy konfigurację maszyny wirtualnej.
    • Polecenie Add-AzureProvisioningConfig udostępnia parametry konfiguracji autonomicznego Windows serwera.
    • Narzędzie Add-AzureDataDisk dodaje dysk danych, który będzie służyć do przechowywania danych usługi Active Directory, z opcją buforowania ustawioną na Wartość brak.
    • New-AzureVM tworzy nową usługę w chmurze i tworzy nową maszynę wirtualną platformy Azure w nowej usłudze w chmurze.
  7. Poczekaj na pełną aprowizę nowej maszyny wirtualnej i pobierz plik pulpitu zdalnego do katalogu roboczego. Ponieważ aprowizowania nowej maszyny wirtualnej platformy Azure zajmuje dużo czasu, while pętla nadal sonduje nową maszynę wirtualną, dopóki nie będzie gotowa do użycia.

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

Serwer kontrolera domeny został pomyślnie zaaprowizowany. Następnie skonfigurujesz domenę usługi Active Directory na tym serwerze kontrolera domeny. Pozostaw okno programu PowerShell otwarte na komputerze lokalnym. Użyjesz go ponownie później, aby utworzyć dwie maszyny SQL Server wirtualne.

Konfigurowanie kontrolera domeny

  1. Połączenie z serwerem kontrolera domeny, uruchamiając plik pulpitu zdalnego. Użyj nazwy użytkownika administratora komputera AzureAdmin i hasła Contoso!000, które zostały określone podczas tworzenia nowej maszyny wirtualnej.

  2. Otwórz okno programu PowerShell w trybie administratora.

  3. Uruchom następujące polecenie DCPROMO.EXE , aby skonfigurować corp.contoso.com domeny z katalogami danych na dysku 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"
    

    Po zakończeniu polecenia maszyna wirtualna zostanie automatycznie ponownie uruchomiona.

  4. Połączenie z serwerem kontrolera domeny, uruchamiając plik pulpitu zdalnego. Tym razem zaloguj się jako CORP\Administrator.

  5. Otwórz okno programu PowerShell w trybie administratora i zaimportuj moduł programu PowerShell usługi Active Directory przy użyciu następującego polecenia:

    Import-Module ActiveDirectory
    
  6. Uruchom następujące polecenia, aby dodać trzech użytkowników do domeny.

    $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 służy do konfigurowania wszystkich SQL Server usługi, klastra trybu failover i grupy dostępności. Corp\SQLSvc1 i CORP\SQLSvc2 są używane jako konta SQL Server dla dwóch maszyn wirtualnych SQL Server wirtualnych.

  7. Następnie uruchom następujące polecenia, aby nadać CORP\Install uprawnienia do tworzenia obiektów komputerów w domenie.

    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
    

    Identyfikator GUID określony powyżej jest identyfikatorem GUID dla typu obiektu komputera. Konto CORP\Install wymaga uprawnienia Odczytaj wszystkie właściwości i Utwórz obiekty komputera, aby utworzyć obiekty active direct dla klastra trybu failover. Uprawnienie Odczytaj wszystkie właściwości jest już domyślnie nadane corp\install, więc nie trzeba przyznać go jawnie. Aby uzyskać więcej informacji na temat uprawnień wymaganych do utworzenia klastra trybu failover, zobacz Klaster trybu failover — przewodnik krok po kroku: konfigurowanie kont w usłudze Active Directory.

    Teraz, po zakończeniu konfigurowania usługi Active Directory i obiektów użytkownika, utworzysz dwie maszyny wirtualne SQL Server wirtualne i dołączysz je do tej domeny.

Tworzenie maszyn SQL Server wirtualnych

  1. Kontynuuj korzystanie z okna programu PowerShell otwartego na komputerze lokalnym. Zdefiniuj następujące dodatkowe zmienne:

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

    Adres IP 10.10.0.4 jest zwykle przypisywany do pierwszej maszyny wirtualnej, która jest tworzyć w podsieci 10.10.0.0/16 sieci wirtualnej platformy Azure. Należy sprawdzić, czy jest to adres serwera kontrolera domeny, uruchamiając polecenie IPCONFIG.

  2. Uruchom następujące polecenia potokowe, aby utworzyć pierwszą maszynę wirtualną w klastrze trybu failover o nazwie 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
    

    Zwróć uwagę na następujące informacje dotyczące powyższego polecenia:

    • Polecenie New-AzureVMConfig tworzy konfigurację maszyny wirtualnej o żądanej nazwie zestawu dostępności. Kolejne maszyny wirtualne zostaną utworzone z taką samą nazwą zestawu dostępności, aby zostały przyłączone do tego samego zestawu dostępności.
    • Polecenie Add-AzureProvisioningConfig dołącza maszynę wirtualną do utworzonej domeny usługi Active Directory.
    • Set-AzureSubnet umieszcza maszynę wirtualną w podsieci back.
    • New-AzureVM tworzy nową usługę w chmurze i tworzy nową maszynę wirtualną platformy Azure w nowej usłudze w chmurze. DnsSettings parametr określa, że serwer DNS dla serwerów w nowej usłudze w chmurze ma adres IP 10.10.0.4. Jest to adres IP serwera kontrolera domeny. Ten parametr jest wymagany, aby umożliwić pomyślne przyłączenie nowych maszyn wirtualnych w usłudze w chmurze do domeny usługi Active Directory. Bez tego parametru należy ręcznie ustawić ustawienia protokołu IPv4 na maszynie wirtualnej, aby używać serwera kontrolera domeny jako podstawowego serwera DNS po aprowieniu maszyny wirtualnej, a następnie dołączyć maszynę wirtualną do domeny usługi Active Directory.
  3. Uruchom następujące polecenia potokowe, aby utworzyć SQL Server wirtualne o nazwach ContosoSQL1 i 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
    

    Zwróć uwagę na następujące kwestie dotyczące powyższych poleceń:

    • Polecenie New-AzureVMConfig używa tej samej nazwy zestawu dostępności co serwer kontrolera domeny i używa obrazu programu SQL Server Service Pack 2012 Service Pack 1 Enterprise Edition z galerii maszyn wirtualnych. Ustawia również dysk systemu operacyjnego na buforowanie tylko do odczytu (bez buforowania zapisu). Zalecamy zmigrowanie plików bazy danych na oddzielny dysk danych dołączany do maszyny wirtualnej i skonfigurowanie go bez buforowania odczytu lub zapisu. Jednak następnym najlepszym rozwiązaniem jest usunięcie buforowania zapisu na dysku systemu operacyjnego, ponieważ nie można usunąć buforowania odczytu na dysku systemu operacyjnego.
    • Polecenie Add-AzureProvisioningConfig dołącza maszynę wirtualną do utworzonej domeny usługi Active Directory.
    • Set-AzureSubnet umieszcza maszynę wirtualną w podsieci back.
    • Add-AzureEndpoint dodaje punkty końcowe dostępu, dzięki czemu aplikacje klienckie mogą uzyskać dostęp do tych SQL Server usług w Internecie. Różne porty są podane dla contosoSQL1 i ContosoSQL2.
    • New-AzureVM tworzy nową maszynę wirtualną SQL Server w tej samej usłudze w chmurze co ContosoQuorum. Jeśli chcesz, aby maszyny wirtualne znajdowały się w tym samym zestawie dostępności, musisz umieścić je w tej samej usłudze w chmurze.
  4. Poczekaj, aż każda maszyna wirtualna zostanie w pełni aprowizowana, a każda maszyna wirtualna pobierze jej plik pulpitu zdalnego do katalogu roboczego. Pętla for przechodzi przez trzy nowe maszyny wirtualne i wykonuje polecenia wewnątrz nawiasów klamrowych najwyższego poziomu dla każdej z nich.

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

    Maszyny SQL Server wirtualne są teraz aprowowane i uruchomione, ale są instalowane z SQL Server z opcjami domyślnymi.

Inicjowanie maszyn wirtualnych klastra trybu failover

W tej sekcji należy zmodyfikować trzy serwery, które będą potrzebne w klastrze trybu failover i SQL Server instalacji. W szczególności:

  • Wszystkie serwery: należy zainstalować funkcję Klaster trybu failover .

  • Wszystkie serwery: musisz dodać corp\install jako administratora komputera.

  • Tylko ContosoSQL1 i ContosoSQL2: musisz dodać CORP\Install jako rolę sysadmin w domyślnej bazie danych.

  • Tylko ContosoSQL1 i ContosoSQL2: musisz dodać NT AUTHORITY\System jako logowanie z następującymi uprawnieniami:

    • Zmienianie dowolnej grupy dostępności
    • Połączenie SQL
    • Wyświetlanie stanu serwera
  • Tylko ContosoSQL1 i ContosoSQL2: protokół TCP jest już włączony na SQL Server wirtualnej. Jednak nadal należy otworzyć zaporę na potrzeby dostępu zdalnego do SQL Server.

Teraz możesz rozpocząć. Począwszy od contosoquorum, wykonaj poniższe kroki:

  1. Połączenie do ContosoQuorum, uruchamiając pliki pulpitu zdalnego. Użyj nazwy użytkownika AzureAdmin administratora komputera i hasła Contoso!000, które określono podczas tworzenia maszyn wirtualnych.

  2. Sprawdź, czy komputery zostały pomyślnie przyłączone do corp.contoso.com.

  3. Przed przystąpieniem do SQL Server zaczekaj, aż proces instalacji zakończy uruchamianie zautomatyzowanych zadań inicjowania.

  4. Otwórz okno programu PowerShell w trybie administratora.

  5. Zainstaluj funkcję Windows trybu failover.

    Import-Module ServerManager
    Add-WindowsFeature Failover-Clustering
    
  6. Dodaj CORP\Install jako administratora lokalnego.

    net localgroup administrators "CORP\Install" /Add
    
  7. Wyloguj się z contosoquorum. Na tym serwerze wszystko jest gotowe.

    logoff.exe
    

Następnie zaimicjuj bazy danych ContosoSQL1 i ContosoSQL2. Wykonaj poniższe kroki, które są identyczne dla obu SQL Server wirtualnych.

  1. Połączenie do dwóch SQL Server wirtualnych, uruchamiając pliki pulpitu zdalnego. Użyj nazwy użytkownika AzureAdmin administratora komputera i hasła Contoso!000, które określono podczas tworzenia maszyn wirtualnych.

  2. Sprawdź, czy komputery zostały pomyślnie przyłączone do corp.contoso.com.

  3. Przed przystąpieniem do SQL Server zaczekaj, aż proces instalacji zakończy uruchamianie zautomatyzowanych zadań inicjowania.

  4. Otwórz okno programu PowerShell w trybie administratora.

  5. Zainstaluj funkcję Windows trybu failover.

    Import-Module ServerManager
    Add-WindowsFeature Failover-Clustering
    
  6. Dodaj CORP\Install jako administratora lokalnego.

    net localgroup administrators "CORP\Install" /Add
    
  7. Zaimportuj SQL Server programu PowerShell.

    Set-ExecutionPolicy -Execution RemoteSigned -Force
    Import-Module -Name "sqlps" -DisableNameChecking
    
  8. Dodaj CORP\Install jako rolę sysadmin dla domyślnego SQL Server wystąpienia.

    net localgroup administrators "CORP\Install" /Add
    Invoke-SqlCmd -Query "EXEC sp_addsrvrolemember 'CORP\Install', 'sysadmin'" -ServerInstance "."
    
  9. Dodaj NT AUTHORITY\System jako logowanie z trzema uprawnieniami opisanymi powyżej.

    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. Otwórz zaporę dostępu zdalnego do 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. Wyloguj się z obu maszyn wirtualnych.

     logoff.exe
    

Na koniec możesz skonfigurować grupę dostępności. Aby wykonać całą pracę na SQL Server ContosoSQL1, użyjesz dostawcy programu PowerShell.

Konfigurowanie grupy dostępności

  1. Połączenie do ContosoSQL1, uruchamiając pliki pulpitu zdalnego. Zamiast logować się przy użyciu konta komputera, zaloguj się przy użyciu konta CORP\Install.

  2. Otwórz okno programu PowerShell w trybie administratora.

  3. Zdefiniuj następujące zmienne:

    $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. Zaimportuj SQL Server programu PowerShell.

    Set-ExecutionPolicy RemoteSigned -Force
    Import-Module "sqlps" -DisableNameChecking
    
  5. Zmień konto SQL Server contosoSQL1 na 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. Zmień konto SQL Server contosoSQL2 na 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. Pobierz CreateAzureFailoverCluster.ps1 z tematu Create Failover Cluster for Always On Availability Groups in Azure VM (Tworzenie klastra trybu failover dla zawsze dostępnych grup dostępności na maszynie wirtualnej platformy Azure) do lokalnego katalogu roboczego. Użyjesz tego skryptu, aby utworzyć funkcjonalny klaster trybu failover. Aby uzyskać ważne informacje na temat interakcji Windows trybu failover z siecią platformy Azure, zobacz Wysoka dostępność i odzyskiwanie po awarii dla SQL Server w usłudze Azure Virtual Machines.

  8. Zmień katalog roboczy na i utwórz klaster trybu failover przy użyciu pobranego skryptu.

    Set-ExecutionPolicy Unrestricted -Force
    .\CreateAzureFailoverCluster.ps1 -ClusterName "$clusterName" -ClusterNode "$server1","$server2","$serverQuorum"
    
  9. Włącz zawsze włączone grupy dostępności dla domyślnych wystąpień SQL Server na serwerach ContosoSQL1 i 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. Utwórz katalog kopii zapasowej i przyznaj uprawnienia SQL Server kont usług. Użyjesz tego katalogu do przygotowania bazy danych dostępności w replice pomocniczej.

    $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. Utwórz bazę danych w bazie danych ContosoSQL1 o nazwie MyDB1, utwórz pełną kopię zapasową i kopię zapasową dziennika, a następnie przywróć je na platformie ContosoSQL2 przy użyciu opcji 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. Utwórz punkty końcowe grupy dostępności na SQL Server wirtualnych i ustaw odpowiednie uprawnienia do punktów końcowych.

    $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. Utwórz repliki dostępności.

    $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. Na koniec utwórz grupę dostępności i dołącz replikę pomocniczą do grupy dostępności.

    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
    

Następne kroki

Udało Ci się pomyślnie zaimplementować usługę SQL Server, tworząc grupę dostępności na platformie Azure. Aby skonfigurować odbiornik dla tej grupy dostępności, zobacz Configure an ILB listener for Always On availability groups in Azure (Konfigurowanie odbiornika ILB dla zawsze dostępnych grup dostępności na platformie Azure).

Aby uzyskać inne informacje na temat SQL Server na platformie Azure, zobacz SQL Server na maszynach wirtualnych platformy Azure.