De Always On-beschikbaarheidsgroep configureren op een Azure-VM met PowerShell

Voordat u begint, moet u er rekening mee houden dat u deze taak nu kunt uitvoeren in het Azure Resource Manager-model. We raden het Azure Resource Manager-model aan voor nieuwe implementaties. Zie SQL Server Always On-beschikbaarheidsgroepen op virtuele Azure-machines.

Belangrijk

Het is raadzaam dat de meeste nieuwe implementaties het Resource Manager gebruiken. Azure heeft twee verschillende implementatiemodellen voor het maken en werken met resources: Resource Manager en klassiek. Dit artikel gaat over het gebruik van het klassieke implementatiemodel.

Virtuele Azure-machines (VM's) kunnen databasebeheerders helpen de kosten van een systeem met hoge beschikbaarheid SQL Server verlagen. Deze zelfstudie laat zien hoe u een beschikbaarheidsgroep implementeert met behulp van SQL Server Always On end-to-end in een Azure-omgeving. Aan het einde van de zelfstudie bestaat SQL Server Always On-oplossing in Azure uit de volgende elementen:

  • Een virtueel netwerk dat meerdere subnetten bevat, waaronder een front-end en een back-endsubnet.
  • Een domeincontroller met een Active Directory-domein.
  • Twee SQL Server's die zijn geïmplementeerd in het back-endsubnet en zijn samengevoegd met het Active Directory-domein.
  • Een failovercluster met drie Windows met het quorummodel Knooppuntmeerderheid.
  • Een beschikbaarheidsgroep met twee synchrone replica's van een beschikbaarheidsdatabase.

Dit scenario is een goede keuze voor de eenvoud van Azure, niet vanwege de kosteneffectiviteit of andere factoren. U kunt bijvoorbeeld het aantal VM's voor een beschikbaarheidsgroep met twee replica's minimaliseren om rekenuren in Azure te besparen door de domeincontroller te gebruiken als de quorumbestands sharewitiseer in een failovercluster met twee knooppunt. Deze methode vermindert het aantal VM's met één van de bovenstaande configuratie.

Deze zelfstudie is bedoeld om u de stappen te laten zien die nodig zijn om de hierboven beschreven oplossing in te stellen, zonder de details van elke stap verder te beschrijven. Daarom wordt in plaats van de GUI-configuratiestappen op te geven, PowerShell-scripts gebruikt om u snel door elke stap te helpen. In deze zelfstudie wordt uit van het volgende uitgenomen:

Verbinding maken maken met uw Azure-abonnement en het virtuele netwerk maken

  1. Importeer in een PowerShell-venster op uw lokale computer de Azure-module, download het bestand met publicatie-instellingen op uw computer en verbind uw PowerShell-sessie met uw Azure-abonnement door de gedownloade publicatie-instellingen te importeren.

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

    Met de opdracht Get-AzurePublishSettingsFile wordt automatisch een beheercertificaat gegenereerd met Azure en gedownload naar uw computer. Er wordt automatisch een browser geopend en u wordt gevraagd de referenties voor Microsoft-account Azure-abonnement in te voeren. Het gedownloade bestand .publishsettings bevat alle informatie die u nodig hebt om uw Azure-abonnement te beheren. Nadat u dit bestand hebt opgeslagen in een lokale map, importeert u het met behulp van de opdracht Import-AzurePublishSettingsFile .

    Notitie

    Het bestand .publishsettings bevat uw referenties (niet-gecodeerd) die worden gebruikt voor het beheren van uw Azure-abonnementen en -services. Het beveiligingsbeleid best practice dit bestand is om het tijdelijk op te slaan buiten uw bronmappen (bijvoorbeeld in de map Bibliotheken\Documenten) en het bestand vervolgens te verwijderen nadat het importeren is voltooid. Een kwaadwillende gebruiker die toegang krijgt tot het bestand .publishsettings kan uw Azure-services bewerken, maken en verwijderen.

  2. Definieer een reeks variabelen die u gaat gebruiken om uw IT-cloudinfrastructuur te maken.

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

    Let op het volgende om ervoor te zorgen dat uw opdrachten later slagen:

    • Variabelen $storageAccountName en $dcServiceName moeten uniek zijn omdat ze worden gebruikt om respectievelijk uw cloudopslagaccount en cloudserver op internet te identificeren.
    • De namen die u opgeeft voor variabelen $affinityGroupName en $virtualNetworkName worden geconfigureerd in het configuratiedocument voor virtuele netwerken dat u later gaat gebruiken.
    • $sqlImageName hiermee geeft u de bijgewerkte naam op van de VM-SQL Server 2012 Service Pack 1 Enterprise Edition.
    • Voor het gemak is Contoso!000 hetzelfde wachtwoord dat in de hele zelfstudie wordt gebruikt.
  3. Maak een affiniteitsgroep.

    New-AzureAffinityGroup `
        -Name $affinityGroupName `
        -Location $location `
        -Description $affinityGroupDescription `
        -Label $affinityGroupLabel
    
  4. Maak een virtueel netwerk door een configuratiebestand te importeren.

    Set-AzureVNetConfig `
        -ConfigurationPath $networkConfigPath
    

    Het configuratiebestand bevat het volgende XML-document. Kortom, hiermee wordt een virtueel netwerk met de naam ContosoNET opgegeven in de affiniteitsgroep ContosoAG. Het heeft de adresruimte 10.10.0.0/16 en heeft twee subnetten, 10.10.1.0/24 en 10.10.2.0/24, die respectievelijk het front-subnet en het back-subnet zijn. In het front-subnet kunt u clienttoepassingen zoals Microsoft SharePoint. Het back-subnet is waar u de virtuele SQL Server plaatsen. Als u de $affinityGroupName en $virtualNetworkName eerder wijzigt, moet u ook de bijbehorende namen hieronder wijzigen.

    <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. Maak een opslagaccount dat is gekoppeld aan de affiniteitsgroep die u hebt gemaakt en stel dit in als het huidige opslagaccount in uw abonnement.

    New-AzureStorageAccount `
        -StorageAccountName $storageAccountName `
        -Label $storageAccountLabel `
        -AffinityGroup $affinityGroupName
    Set-AzureSubscription `
        -SubscriptionName (Get-AzureSubscription).SubscriptionName `
        -CurrentStorageAccount $storageAccountName
    
  6. Maak de domeincontrollerserver in de nieuwe cloudservice en beschikbaarheidsset.

    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
    

    Met deze doorspijpopdrachten kunt u het volgende doen:

    • New-AzureVMConfig maakt een VM-configuratie.
    • Add-AzureProvisioningConfig geeft de configuratieparameters van een zelfstandige Windows server.
    • Add-AzureDataDisk voegt de gegevensschijf toe die u gaat gebruiken voor het opslaan van Active Directory-gegevens, met de optie voor opslaan in de caching ingesteld op Geen.
    • New-AzureVM maakt een nieuwe cloudservice en maakt de nieuwe Azure-VM in de nieuwe cloudservice.
  7. Wacht tot de nieuwe VM volledig is ingericht en download het bestand met extern bureaublad naar uw werkmap. Omdat het lang duurt voordat de nieuwe Azure-VM is ingericht, while blijft de lus de nieuwe VM peilen totdat deze klaar is voor gebruik.

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

De domeincontrollerserver is nu ingericht. Vervolgens configureert u het Active Directory-domein op deze domeincontrollerserver. Laat het PowerShell-venster geopend op uw lokale computer. U gebruikt deze later opnieuw om de twee virtuele SQL Server maken.

De domeincontroller configureren

  1. Verbinding maken verbinding maken met de domeincontrollerserver door het extern bureaublad-bestand te starten. Gebruik de gebruikersnaam van de computerbeheerder AzureAdmin en het wachtwoord Contoso!000, die u hebt opgegeven tijdens het maken van de nieuwe virtuele machine.

  2. Open een PowerShell-venster in de beheerdersmodus.

  3. Voer de volgende DCPROMO.EXE uit om het corp.contoso.com in te stellen, met de gegevensdirecties op station 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"
    

    Nadat de opdracht is klaar, wordt de VM automatisch opnieuw opgestart.

  4. Verbinding maken opnieuw verbinding maken met de domeincontrollerserver door het bestand met extern bureaublad te starten. Meld u nu aan als CORP\Administrator.

  5. Open een PowerShell-venster in de beheerdersmodus en importeer de Active Directory PowerShell-module met behulp van de volgende opdracht:

    Import-Module ActiveDirectory
    
  6. Voer de volgende opdrachten uit om drie gebruikers toe te voegen aan het domein.

    $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 wordt gebruikt om alles te configureren met betrekking tot de SQL Server service-exemplaren, het failovercluster en de beschikbaarheidsgroep. CORP\SQLSvc1 en CORP\SQLSvc2 worden gebruikt als de SQL Server-serviceaccounts voor de twee SQL Server-VM's.

  7. Voer vervolgens de volgende opdrachten uit om CORP\Install de machtigingen te geven voor het maken van computerobjecten in het domein.

    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
    

    De hierboven opgegeven GUID is de GUID voor het computerobjecttype. Het account CORP\Install heeft de machtiging Alle eigenschappen lezen en Computerobjecten maken nodig om de Active Direct-objecten voor het failovercluster te maken. De machtiging Alle eigenschappen lezen is standaard al verleend aan CORP\Install, dus u hoeft dit niet expliciet te verlenen. Zie Failovercluster stapsgewijs handleiding: accounts configureren in Active Directory voor meer informatie over machtigingen die nodig zijn om het failovercluster te maken.

    Nu u klaar bent met het configureren van Active Directory en de gebruikersobjecten, maakt u twee virtuele SQL Server en voegt u deze toe aan dit domein.

De virtuele SQL Server maken

  1. Ga door met het PowerShell-venster dat op uw lokale computer is geopend. Definieer de volgende aanvullende variabelen:

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

    Het IP-adres 10.10.0.4 wordt doorgaans toegewezen aan de eerste virtuele machine die u maakt in het subnet 10.10.0.0/16 van uw virtuele Azure-netwerk. Controleer of dit het adres is van de domeincontrollerserver door IPCONFIG uit te laten.

  2. Voer de volgende piped-opdrachten uit om de eerste VM in het failovercluster met de naam ContosoQuorum te maken:

    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
    

    Let op het volgende met betrekking tot de bovenstaande opdracht:

    • New-AzureVMConfig maakt een VM-configuratie met de gewenste naam van de beschikbaarheidsset. De volgende VM's worden gemaakt met dezelfde beschikbaarheidssetnaam, zodat ze worden samengevoegd met dezelfde beschikbaarheidsset.
    • Add-AzureProvisioningConfig voegt de VM toe aan het Active Directory-domein dat u hebt gemaakt.
    • Set-AzureSubnet plaatst de virtuele machine in het back-subnet.
    • New-AzureVM maakt een nieuwe cloudservice en maakt de nieuwe Azure-VM in de nieuwe cloudservice. De Parameter DnsSettings geeft aan dat de DNS-server voor de servers in de nieuwe cloudservice het IP-adres 10.10.0.4 heeft. Dit is het IP-adres van de domeincontrollerserver. Deze parameter is nodig om de nieuwe VM's in de cloudservice in staat te stellen lid te worden van het Active Directory-domein. Zonder deze parameter moet u handmatig de IPv4-instellingen in uw VM instellen om de domeincontrollerserver te gebruiken als de primaire DNS-server nadat de VM is ingericht, en vervolgens de VM toevoegen aan het Active Directory-domein.
  3. Voer de volgende piped-opdrachten uit om de virtuele SQL Server maken met de naam ContosoSQL1 en 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
    

    Let op het volgende met betrekking tot de bovenstaande opdrachten:

    • New-AzureVMConfig gebruikt dezelfde beschikbaarheidssetnaam als de domeincontrollerserver en gebruikt de SQL Server 2012 Service Pack 1 Enterprise Edition-afbeelding in de galerie met virtuele machines. Ook wordt de besturingssysteemschijf op alleen-lezen-caching (geen schrijf-caching) van het besturingssysteem. U wordt aangeraden de databasebestanden te migreren naar een afzonderlijke gegevensschijf die u aan de VM koppelt en deze te configureren zonder lees- of schrijf caching. Het volgende beste is echter het verwijderen van schrijf caching op de besturingssysteemschijf, omdat u lezen in de caching op de besturingssysteemschijf niet kunt verwijderen.
    • Add-AzureProvisioningConfig voegt de VM toe aan het Active Directory-domein dat u hebt gemaakt.
    • Set-AzureSubnet plaatst de virtuele machine in het back-subnet.
    • Add-AzureEndpoint voegt toegangs-eindpunten toe, zodat clienttoepassingen toegang hebben tot deze SQL Server services op internet. Er worden verschillende poorten aan ContosoSQL1 en ContosoSQL2 gegeven.
    • New-AzureVM maakt de nieuwe SQL Server-VM in dezelfde cloudservice als ContosoQuorum. U moet de VM's in dezelfde cloudservice plaatsen als u wilt dat ze zich in dezelfde beschikbaarheidsset plaatsen.
  4. Wacht tot elke VM volledig is ingericht en dat elke VM het externe bureaubladbestand naar uw werkmap downloadt. De for lus doorloop de drie nieuwe VM's en voert de opdrachten uit binnen de haakjes op het hoogste niveau voor elk van deze.

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

    De SQL Server-VM's worden nu ingericht en uitgevoerd, maar ze worden geïnstalleerd met SQL Server met standaardopties.

De failovercluster-VM's initialiseren

In deze sectie moet u de drie servers wijzigen die u gaat gebruiken in het failovercluster en de SQL Server installatie. Met name:

  • Alle servers: u moet de functie Failover Clustering installeren.

  • Alle servers: u moet CORP\Install toevoegen als de computerbeheerder.

  • Alleen ContosoSQL1 en ContosoSQL2: u moet CORP\Install toevoegen als een sysadmin-rol in de standaarddatabase.

  • Alleen ContosoSQL1 en ContosoSQL2: U moet NT AUTHORITY\System toevoegen als aanmelding met de volgende machtigingen:

    • Een beschikbaarheidsgroep wijzigen
    • Verbinding maken SQL
    • Servertoestand weergeven
  • Alleen ContosoSQL1 en ContosoSQL2: het TCP-protocol is al ingeschakeld op SQL Server VM. U moet echter nog steeds de firewall openen voor externe toegang tot SQL Server.

U bent nu klaar om te beginnen. Volg de onderstaande stappen vanaf ContosoQuorum:

  1. Verbinding maken verbinding maken met ContosoQuorum door de extern bureaublad-bestanden te starten. Gebruik de gebruikersnaam van de computerbeheerder AzureAdmin en het wachtwoord Contoso!000, die u hebt opgegeven tijdens het maken van de VM's.

  2. Controleer of de computers zijn samengevoegd met corp.contoso.com.

  3. Wacht tot de SQL Server de geautomatiseerde initialisatietaken is uitgevoerd voordat u doorgaat.

  4. Open een PowerShell-venster in de beheerdersmodus.

  5. Installeer de functie Windows failoverclustering.

    Import-Module ServerManager
    Add-WindowsFeature Failover-Clustering
    
  6. Voeg CORP\Install toe als lokale beheerder.

    net localgroup administrators "CORP\Install" /Add
    
  7. Meld u af bij ContosoQuorum. U bent nu klaar met deze server.

    logoff.exe
    

Initialiseer vervolgens ContosoSQL1 en ContosoSQL2. Volg de onderstaande stappen, die identiek zijn voor beide SQL Server VM's.

  1. Verbinding maken de twee virtuele SQL Server door de extern bureaublad-bestanden te starten. Gebruik de gebruikersnaam van de computerbeheerder AzureAdmin en het wachtwoord Contoso!000, die u hebt opgegeven tijdens het maken van de VM's.

  2. Controleer of de computers zijn samengevoegd met corp.contoso.com.

  3. Wacht tot de SQL Server de geautomatiseerde initialisatietaken is uitgevoerd voordat u doorgaat.

  4. Open een PowerShell-venster in de beheerdersmodus.

  5. Installeer de functie Windows failoverclustering.

    Import-Module ServerManager
    Add-WindowsFeature Failover-Clustering
    
  6. Voeg CORP\Install toe als lokale beheerder.

    net localgroup administrators "CORP\Install" /Add
    
  7. Importeer de SQL Server PowerShell-provider.

    Set-ExecutionPolicy -Execution RemoteSigned -Force
    Import-Module -Name "sqlps" -DisableNameChecking
    
  8. Voeg CORP\Install toe als de sysadmin-rol voor het SQL Server exemplaar.

    net localgroup administrators "CORP\Install" /Add
    Invoke-SqlCmd -Query "EXEC sp_addsrvrolemember 'CORP\Install', 'sysadmin'" -ServerInstance "."
    
  9. Voeg NT AUTHORITY\System toe als aanmelding met de drie hierboven beschreven machtigingen.

    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. Open de firewall voor externe toegang tot 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. Meld u af bij beide VM's.

     logoff.exe
    

Ten slotte kunt u de beschikbaarheidsgroep configureren. U gebruikt de powershell SQL Server provider om al het werk op ContosoSQL1 uit te voeren.

De beschikbaarheidsgroep configureren

  1. Verbinding maken opnieuw verbinding maken met ContosoSQL1 door de extern bureaublad-bestanden te starten. Meld u aan met CORP\Install in plaats van u aan te melden met het computeraccount.

  2. Open een PowerShell-venster in de beheerdersmodus.

  3. Definieer de volgende variabelen:

    $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. Importeer de SQL Server PowerShell-provider.

    Set-ExecutionPolicy RemoteSigned -Force
    Import-Module "sqlps" -DisableNameChecking
    
  5. Wijzig het SQL Server serviceaccount voor ContosoSQL1 in 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. Wijzig het SQL Server serviceaccount voor ContosoSQL2 in 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. Download CreateAzureFailoverCluster.ps1failovercluster maken voor Always On-beschikbaarheidsgroepen in Azure VM naar de lokale map. U gebruikt dit script om u te helpen een functioneel failovercluster te maken. Zie Hoge Windows beschikbaarheid en herstel na SQL Server in Azure Virtual Machines voor belangrijke informatie over hoe failoverclustering communiceert met het Azure-netwerk.

  8. Wijzig naar uw werkmap en maak het failovercluster met het gedownloade script.

    Set-ExecutionPolicy Unrestricted -Force
    .\CreateAzureFailoverCluster.ps1 -ClusterName "$clusterName" -ClusterNode "$server1","$server2","$serverQuorum"
    
  9. Schakel Always On-beschikbaarheidsgroepen in voor de SQL Server exemplaren op ContosoSQL1 en 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. Maak een back-upmap en verleen machtigingen voor de SQL Server serviceaccounts. U gebruikt deze map om de beschikbaarheidsdatabase op de secundaire replica voor te bereiden.

    $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. Maak een database in ContosoSQL1 met de naam MyDB1, maak een volledige back-up en een logboekback-up en herstel deze op ContosoSQL2 met de optie 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. Maak de eindpunten van de beschikbaarheidsgroep op SQL Server VM's en stel de juiste machtigingen in voor de eindpunten.

    $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. Maak de beschikbaarheidsreplica's.

    $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. Maak ten slotte de beschikbaarheidsgroep en voeg de secundaire replica toe aan de beschikbaarheidsgroep.

    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
    

Volgende stappen

U hebt nu een always on SQL Server geïmplementeerd door een beschikbaarheidsgroep te maken in Azure. Zie Configure an ILB listener for Always On availability groups in Azure (Een ILB-listener configureren voor Always On-beschikbaarheidsgroepen in Azure) als u een listener voor deze beschikbaarheidsgroep wilt configureren.

Zie Voor meer informatie over het gebruik SQL Server in Azure, SQL Server virtuele Azure-machines.