銷售: 1-800-867-1380

教學課程:Azure 中的 AlwaysOn 可用性群組 (PowerShell)

更新日期: 2013年10月

note附註
如需相同案例的 GUI 方式教學課程,請參閱<測試實驗室:在 Azure 中建立端對端的 AlwaysOn 可用性群組為基礎。

Azure 虛擬機器 (VM) 可協助資料庫管理員實作高可用性 SQL Server 系統,並降低成本。本教學課程示範如何在 Azure 環境中使用 SQL Server AlwaysOn 端對端實作可用性群組。在教學課程結束時,您 Azure 中的 SQL Server AlwaysOn 方案將會包含下列項目:

  • 包含多個子網路的虛擬網路 (包括前端和後端子網路)

  • 使用 Active Directory (AD) 網域的網域控制站

  • 已部署至後端子網路並加入至 AD 網域的兩個 SQL Server VM

  • 使用 [節點多數] 仲裁模型的 3 節點 WSFC 叢集

  • 使用兩個可用性資料庫之同步認可複本的可用性群組

選擇此案例是因為簡單明瞭,不是因為其在 Azure 上的成本效益或其他因素。例如,您可以使用網域控制站作為 2 節點 WSFC 叢集中的仲裁檔案共用見證,便可減少兩個複本可用性群組的 VM 數,如此可節省 Azure 中的計算時數。此方法會從上述組態中減少一個 VM 數。

本教學課程用意為示範設定上述方案所需的步驟,但不會闡述每個步驟的細節。因此,本教學課程不會顯示 GUI 組態步驟,而是使用 PowerShell 指令碼引導您快速進行每個步驟。指令碼會假設以下程序:

  1. 在您本機電腦的 PowerShell 視窗中,匯入 Azure 模組、將發行設定檔案下載至您的電腦,然後匯入已下載的發行設定,以便將您的 PowerShell 工作階段連接到您的 Azure 訂用帳戶。

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

    Get-AzurePublishgSettingsFile 命令會自動產生管理憑證,使您的電腦可以下載 Azure。系統會自動開啟瀏覽器,並提示您輸入 Azure 訂閱的 Microsoft 帳戶認證。下載的 .publishsettings 檔案包含了所有管理 Azure 訂閱所需的資訊。將此檔案儲存至本機目錄之後,請使用 Import-AzurePublishSettingsFile 命令予以匯入。

    security安全性 附註
    publishsettings 檔案包含用來管理 Azure 訂用帳戶和服務的認證 (未編碼)。這個檔案的安全性最佳作法是暫時儲存在來源目錄之外 (例如在 Libraries\Documents 資料夾),然後在匯入完成後予以刪除。如果惡意使用者獲得 publishsettings 檔案的存取權,就可以編輯、建立和刪除您的 Azure 服務。

  2. 將您用來建立雲端 IT 基礎結構的一系列變數加以定義。

    $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 Service Pack 1 Enterprise Edition 之 VM 映像的更新名稱。

    • 為了簡化過程,本教學課程全程使用相同的密碼 Contoso!000

  3. 建立同質群組。

    New-AzureAffinityGroup `
        -Name $affinityGroupName `
        -Location $location `
        -Description $affinityGroupDescription `
        -Label $affinityGroupLabel
    
  4. 透過匯入組態檔建立虛擬網路。

    Set-AzureVNetConfig `
        -ConfigurationPath $networkConfigPath
    

    此組態檔包含了下列 XML 文件。簡而言之,組態檔在稱作 ContosoAG 的同質群組中指定名為 ContosoNET 的虛擬網路,且具有 10.10.0.0/16 的位址空間,並有兩個子網路,10.10.1.0/2410.10.2.0/24,這兩個子網路分別為前端子網路和後端子網路。前端網路供您放置 Microsoft SharePoint 之類的用戶端應用程式,而後端網路則供您放置 SQL Server VM。如果您變更上述 $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. 在新的雲端服務和可用性設定組中建立 DC 伺服器。

    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 建立 VM 組態。

    • Add-AzureProvisioningConfig 提供獨立 Windows 伺服器的組態參數。

    • Add-AzureDataDisk 會新增您用於儲存 Active Directory 資料的資料磁碟,並將快取選項設為 None

    • New-AzureVM 建立新的雲端服務,並在此服務中建立新的 Azure VM。

  7. 等候新的 VM 完整佈建,並將遠端桌面檔案下載至您的工作目錄。因為新的 Azure VM 需要很長的時間進行佈建,所以 while 迴圈會持續輪詢新的 VM,直到已備妥可供使用為止。

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

現在已成功佈建 DC 伺服器。接著,可在這個 DC 伺服器上設定 Active Directory 網域。保留本機電腦開啟的 PowerShell 視窗。您之後會再次用它建立兩個 SQL Server VM。

  1. 透過啟動遠端桌面檔案連接到 DC 伺服器。使用您在建立新的 VM 時所指定的電腦系統管理員使用者名稱 AzureAdmin 及密碼 Contoso!000

  2. 在系統管理員模式下開啟 PowerShell 視窗。

  3. 執行下列 DCPROMO.EXE 命令以使用磁碟機 M 上的資料目錄設定 corp.contoso.com 網域。

    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"
    

    一旦命令完成,VM 會自動重新啟動。

  4. 透過啟動遠端桌面檔案再次連接到 DC 伺服器。此時請以 CORP\Administrator 的身分登入。

  5. 使用下列命令,在系統管理員模式下開啟 PowerShell 視窗,並匯入 Active Directory PowerShell 模組:

    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\SQLSvc1CORP\SQLSvc2 會用作為兩個 SQL Server VM 的 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 PropertiesCreate Computer Objects權限,才能建立 WSFC 叢集的 Active Directory 物件。預設已將Read All Properties權限提供給 CORP\Install,因此您不需要明確地授與此權限。如需建立 WSFC 叢集所需之權限的詳細資訊,請參閱<容錯移轉叢集逐步指南:設定 Active Directory 中的帳戶>。

現在您已完成設定 Active Directory 和使用者物件,您將建立兩個 SQL Server VM 並將其加入至此網域。

  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 通常會指派給您在 Azure 虛擬網路的 10.10.0.0/16 子網路中建立的第一個 VM。您應執行 IPCONFIG 命令,確認這是否為 DC 伺服器的位址。

  2. 執行下列管道命令,在 WSFC 叢集中建立第一個 VM,名稱為 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 會使用所需的可用性設定組名稱建立 VM 組態。後續 VM 將使用相同的可用性設定組名稱進行建立,如此一來這些 VM 即可加入至相同的可用性設定組。

    • Add-AzureProvisioningConfig 會將 VM 加入至您建立的 Active Directory 網域。

    • Set-AzureSubnet 會將 VM 放在後端子網路中。

    • New-AzureVM 建立新的雲端服務,並在此服務中建立新的 Azure VM。DnsSettings 參數在新雲端服務中的伺服器中,指定 DNS 伺服器具有 IP 位址 10.10.0.4 (此為 DC 伺服器的 IP 位址)。需要此參數才能使雲端服務中的新 VM 成功加入 Active Directory 網域。若無此參數,佈建 VM 之後,您必須手動在 VM 中設定 IPv4 設定,才可將 DC 伺服器設為主要 DNS 伺服器,然後將 VM 加入 Active Directory 網域。

  3. 執行下列管道命令,建立名稱為 ContosoSQL1ContosoSQL2 的 SQL Server VM。

    # 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 Service Pack 1 Enterprise Edition 映像。它也會將作業系統磁碟設定為唯讀快取 (無寫入快取)。建議您將資料庫檔案移轉至您連接至 VM 的個別資料磁碟,並設定為無讀取或寫入快取。然而,既然無法移除作業系統磁碟的讀取快取,也可退而求其次的移除作業系統磁碟的寫入快取。

    • Add-AzureProvisioningConfig 會將 VM 加入至您建立的 Active Directory 網域。

    • Set-AzureSubnet 會將 VM 放在後端子網路中。

    • Add-AzureEndpoint 會新增存取端點,以便用戶端應用程式存取網際網路上的這些 SQL Server 服務執行個體。ContosoSQL1ContosoSQL2 會有不同的通訊埠。

    • New-AzureVM 會在與 ContosoQuorum 相同的雲端服務中建立新的 SQL Server VM。若您要 VM 在相同的可用性設定組中,必須將 VM 放在相同的雲端服務。

  4. 等候每一個 VM 完整佈建,並將其遠端桌面檔案下載至您的工作目錄。迴圈會逐一循環這三個新的 VM,並且針對每一個 VM 執行最上層大括號內的命令。

    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 VM 佈建完成並且正在執行中,但其是與使用預設選項的 SQL Server 一起安裝。

在本節中,您必須修改要在 WSFC 叢集和 SQL Server 安裝中使用的三個伺服器。具體來說:

  • (所有伺服器) 您必須安裝Failover Clustering功能。

  • (所有伺服器) 您必須將 CORP\Install 新增為電腦管理員。

  • (僅 ContosoSQL1 和 ContosoSQL2) 您必須將 CORP\Install 新增為預設資料庫中的 sysadmin 角色。

  • (僅 ContosoSQL1 和 ContosoSQL2) 您必須將 NT AUTHORITY\System 加入成為具備下列權限的登入:

    • 更改任何可用性群組

    • 連接 SQL

    • 檢視伺服器狀態

  • (僅 ContosoSQL1 和 ContosoSQL2) TCP 通訊協定已在 SQL Server VM 上啟用。不過,您仍必須開啟防火牆允許 SQL Server 的遠端存取。

現在可以準備開始了。先從 ContosoQuorum 開始,請依照下列步驟:

  1. 透過啟動遠端桌面檔案連接到 ContosoQuorum。使用您在建立 VM 時所指定的電腦系統管理員使用者名稱 AzureAdmin 及密碼 Contoso!000

  2. 確認電腦已成功加入 corp.contoso.com

  3. 等候 SQL Server 安裝完成執行自動初始化工作,再繼續進行。

  4. 在系統管理員模式下開啟 PowerShell 視窗。

  5. 安裝 Wiindows 容錯移轉叢集功能。

    Import-Module ServerManager
    Add-WindowsFeature Failover-Clustering 
    
  6. CORP\Install 加入成為本機系統管理員。

    net localgroup administrators "CORP\Install" /Add
    
  7. 登出 ContosoQuorum。您現在已完成此伺服器。

    logoff.exe 
    

接下來,初始化 ContosoSQL1ContosoSQL2。為兩個 SQL Server VM 遵循上述相同步驟。

  1. 透過啟動遠端桌面檔案連接到兩個 SQL Server VM。使用您在建立 VM 時所指定的電腦系統管理員使用者名稱 AzureAdmin 及密碼 Contoso!000

  2. 確認電腦已成功加入 corp.contoso.com

  3. 等候 SQL Server 安裝完成執行自動初始化工作,再繼續進行。

  4. 在系統管理員模式下開啟 PowerShell 視窗。

  5. 安裝 Wiindows 容錯移轉叢集功能。

    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 加入成為預設 SQL Server 執行個體的系統管理員 (sysadmin) 角色。

    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. 登出兩個 VM。

    logoff.exe
    

最後,您準備設定可用性群組。您將使用 SQL Server PowerShell 提供者執行 ContosoSQL1 上的所有工作。

  1. 透過啟動遠端桌面檔案再次連接到 ContosoSQL1。使用 CORP\Install 登入 (而不是使用電腦帳戶登入)。

  2. 在系統管理員模式下開啟 PowerShell 視窗。

  3. 定義下列變數:

    $server1 = "ContosoSQL1"
    $server2 = "ContosoSQL2"
    $serverQuorum = "ContosoQuorum"
    $acct1 = "CORP\SQLSvc1"
    $acct2 = "CORP\SQLSvc2"
    $password = "Contoso!000"
    $clusterName = "Cluster1"
    $timeout = New-Object System.TimeSpan -ArgumentList 0, 0, 30
    $db = "MyDB1"
    $backupShare = "\\$server1\backup"
    $quorumShare = "\\$server1\quorum"
    $ag = "AG1" 
    
  4. 匯入 SQL Server PowerShell 提供者。

    Set-ExecutionPolicy RemoteSigned -Force
    Import-Module "sqlps" -DisableNameChecking
    
  5. ContosoSQL1 的 SQL Server 服務帳戶變更為 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. ContosoSQL2 的 SQL Server 服務帳戶變更為 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 從針對 Azure VM 的 AlwaysOn 可用性群組建立 WSFC 叢集下載至本機工作目錄。您將使用此指令碼協助建立運作正常的 WSFC 叢集。如需 WSFC 如何與 Azure 網路互動的重要資訊,請參閱<Azure 虛擬機器中的 SQL Server 高可用性和災害復原>。

  8. 變更為您的工作目錄,並使用下載的指令碼建立 WSFC 叢集。

    Set-ExecutionPolicy Unrestricted -Force
    .\CreateAzureFailoverCluster.ps1 -ClusterName "$clusterName" -ClusterNode "$server1","$server2","$serverQuorum"
    
  9. 針對 ContosoSQL1ContosoSQL2 上的預設 SQL Server 執行個體,啟用 AlwaysOn 可用性群組。

    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,執行完整備份和記錄備份,然後使用 WITH NORECOVERY 選項在 ContosoSQL2 上還原這些備份。

    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 VM 上建立可用性群組端點,並設定端點的適當權限。

    $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
    

您現在已透過在 Azure 中建立可用性群組,成功實作 SQL Server AlwaysOn。若要為這個可用性群組設定接聽程式,請參閱<Tutorial: Listener Configuration for AlwaysOn Availability Groups in Azure>。

本文對您有任何幫助嗎?
(剩餘 1500 個字元)
感謝您提供意見
顯示:
© 2014 Microsoft