銷售: 1-800-867-1380

教學課程:AlwaysOn 可用性群組的接聽程式設定

更新日期: 2015年6月

本主題說明如何為 AlwaysOn 可用性群組設定接聽程式。您的可用性群組可以包含僅限內部部署、僅限 Azure 或橫跨這兩個內部部署和 Azure 的複本,以使用混合式組態。Azure 複本可以位於相同區域內,或跨越使用多個虛擬網路 (Vnet) 的多個區域。

下列步驟假設您已經設定可用性群組,但尚未設定接聽程式。請注意,Azure 中的可用性群組接聽程式有以下限制:

  • 可用性群組接聽程式在 Windows Server 2008 R2、Windows Server 2012 和 Windows Server 2012 R2 上受到支援。

  • 在使用的虛擬 IP (VIP) 位址部署接聽程式時,用戶端應用程式必須位於您的可用性群組 VM 所在的不同雲端服務上。Azure 不支援相同雲端服務中的用戶端和伺服器的直接伺服器回傳。

  • 每個雲端服務只能有一個可用性群組接聽程式,因為接聽程式設定為使用雲端服務 IP 位址或內部負載平衡器 的虛擬 IP (VIP) 位址。

    Important重要事項
    雖然 Azure 現在已支援在給定的雲端服務中建立多個 VIP 位址,但此限制仍存在。

  • 如果您要建立混合式環境的接聽程式,內部部署網路除了透過站對站 VPN 連接 Azure 虛擬網路外,還必須具有公用網際網路的連線。位於 Azure 子網路時,只有透過對應雲端服務的公開 IP 位址才能連接可用性群組接聽程式。

Important重要事項
本教學課程的重點,是要說明如何使用 PowerShell 為包含 Azure 複本的可用性群組建立接聽程式。如需如何使用 SSMS 或 Transact-SQL 來設定接聽程式的詳細資訊,請參閱建立或設定可用性群組接聽程式

首先,您必須決定要為接聽程式使用外部 (公用) 還是內部 (私人) 負載平衡。如果必須可從包含可用性群組的虛擬網路 (VNet) 外部存取資料庫伺服器,則您應使用具有可從網際網路存取之公用 IP 位址的public load balancing。不過,如果您只會存取 VNet 中的接聽程式 (包括在混合式案例中的站對站 VPN),則應該為接聽程式使用具有私人 IP 位址的Internal Load Balancing (ILB)。由於 ILB 無法從 Azure VNet 外部存取,因此這可以提供另一層安全性。在本教學課程的其餘部分中,有些小節對於public load balancingInternal Load Balancing組態將會使用不同的步驟。請遵循您所選方法的指示。

note附註
ILB 只可以設定在具有區域範圍的虛擬網路上。同質群組已設定的現有虛擬網路無法使用 ILB。如需詳細資訊,請參閱內部負載平衡器

對於 ILB,您必須先建立內部負載平衡器。此作業可用下列指令碼來執行。在 ILB 和公用負載平衡中,您必須為每個主控 Azure 複本的 VM 建立一個負載平衡端點。如果您在多個區域中都有複本,這些區域的每個複本必須位於相同 VNet 的相同雲端服務中。要建立跨多個 Azure 區域的可用性群組複本,則必須設定多個 VNet。如需設定跨 VNet 連線的詳細資訊,請參閱設定 VNet 對 VNet 連線

  1. 在 Azure 入口網站中,導覽至每個主控複本的 VM,並檢視詳細資料。

  2. 針對每個 VM 按一下 [端點] 索引標籤。

  3. 確認您想要使用之接聽程式端點的 [名稱][公用連接埠] 尚未使用。在下列範例中,名稱是 "MyEndpoint",連接埠是 "1433"。

  4. 在您的本機用戶端上,下載並安裝最新的 PowerShell 模組

  5. 啟動 Azure PowerShell。新的 PowerShell 工作階段隨即開啟,並載入 Azure 系統管理模組。

  6. 執行 Get-AzurePublishSettingsFile。這個指令程式會引導您至瀏覽器,將發佈設定檔案下載到本機目錄。系統可能會提示您輸入 Azure 訂用帳戶的登入認證。

  7. 執行 Import-AzurePublishSettingsFile 命令,並且使用您所下載之發行設定檔案的路徑。

    Import-AzurePublishSettingsFile -PublishSettingsFile <PublishSettingsFilePath>
    

    匯入發佈設定檔案之後,您就可以在 PowerShell 工作階段中管理您的 Azure 訂用帳戶。

  8. 如果您使用 public load balancing,請繼續執行此步驟。如果您使用Internal Load Balancing (ILB),請跳至下一個步驟。請將底下的 PowerShell 指令碼複製到文字編輯器,並且配合您的環境設定變數值。請注意,如果您的可用性群組跨越多個 Azure 地區,則您必須在每個資料中心內針對位於該資料中心內的雲端服務和節點執行指令碼一次。

    # Define variables
    $ServiceName = "<MyCloudService>" # the name of the cloud service that contains the availability group nodes
    $AGNodes = "<VM1>","<VM2>","<VM3>" # all availability group nodes containing replicas in the same cloud service, separated by commas
    $EndpointName = "MyEndpoint" # name of the endpoint
    $EndpointPort = "1433" # public port to use for the endpoint
    
    # Configure a load balanced endpoint for each node in $AGNodes, with direct server return enabled
    ForEach ($node in $AGNodes)
    {
        Get-AzureVM -ServiceName $ServiceName -Name $node | Add-AzureEndpoint -Name $EndpointName -Protocol "TCP" -PublicPort $EndpointPort -LocalPort $EndpointPort -LBSetName "$EndpointName-LB" -ProbePort 59999 -ProbeProtocol "TCP" -DirectServerReturn $true | Update-AzureVM
    }
    
  9. 如果您使用 Internal Load Balancing (ILB),請繼續執行此步驟。如果您使用public load balancing,請跳至下一個步驟。對於 ILB,您應指派靜態 IP 位址。首先,請執行下列命令來檢查目前的 VNet 組態:

    (Get-AzureVNetConfig).XMLConfiguration
    

    首先請記下主控複本的 VM 所在之子網路的 [子網路] 名稱。這將用於指令碼中的 $SubnetName 參數。然後記下主控複本的 VM 所在之子網路的 VirtualNetworkSite 名稱和起始 AddressPrefix。然後,藉由將兩個值傳遞至 AvailableAddresses 命令,並檢查 AvailableAddresses,以尋找可用的 IP 位址。例如,如果 VNet 命名為 MyVNet,且具有起始於 172.16.0.128 的子網路位址範圍,則下列命令會列出可用的位址:

    (Test-AzureStaticVNetIP -VNetName "MyVNet" -IPAddress 172.16.0.128).AvailableAddresses
    

    選擇其中一個可用的位址,並將其用於下列指令碼的 $ILBStaticIP 參數中。

    請將底下的 PowerShell 指令碼複製到文字編輯器,並且配合您的環境設定變數值。請注意,使用同質群組的現有部署無法新增 ILB。如需有關 ILB 需求的詳細資訊,請參閱內部負載平衡器。請注意,如果您的可用性群組跨越多個 Azure 地區,則您必須在每個資料中心內針對位於該資料中心內的雲端服務和節點執行指令碼一次。

    # Define variables
    $ServiceName = "<MyCloudService>" # the name of the cloud service that contains the availability group nodes
    $AGNodes = "<VM1>","<VM2>","<VM3>" # all availability group nodes containing replicas in the same cloud service, separated by commas
    $EndpointName = "<MyEndpoint>" # name of the endpoint
    $EndpointPort = "1433" # public port to use for the endpoint
    $ILBName = "<MyInternalLoadBalancer>" # chosen name for the new ILB
    $SubnetName = "<MySubnetName>" # subnet name that the replicas use in the VNet
    $ILBStaticIP = "<MyILBStaticIPAddress>" # static IP address for the ILB in the subnet
    
    Add-AzureInternalLoadBalancer -InternalLoadBalancerName $ILBName -SubnetName $SubnetName -ServiceName $ServiceName -StaticVNetIPAddress $ILBStaticIP
    
    # Configure a load balanced endpoint for each node in $AGNodes using ILB
    ForEach ($node in $AGNodes)
    {
    Get-AzureVM -ServiceName $ServiceName -Name $node | Add-AzureEndpoint -Name $EndpointName -LBSetName "$EndpointName-LB" -Protocol tcp -LocalPort $EndpointPort -PublicPort $EndpointPort -ProbePort 59999 -ProbeProtocol tcp -ProbeIntervalInSeconds 10 -InternalLoadBalancerName $ILBName -DirectServerReturn $true | Update-AzureVM 
    }
    
  10. 設定變數之後,請從文字編輯器將指令碼複製到 Azure PowerShell 工作階段加以執行。如果提示依然顯示 >>,請再次輸入 ENTER 鍵,確定指令碼會開始執行。

    note附註
    Azure 管理入口網站目前不支援內部負載平衡器,所以您不會在入口網站中看到 ILB 或端點。不過,如果負載平衡器在其上執行,則 Get-AzureEndpoint 會傳回內部 IP 位址。否則會傳回 null。

接下來,如果叢集上的任何伺服器執行 Windows Server 2008 R2 或 Windows Server 20012,您必須在每個內部部署伺服器或屬於叢集的 Azure VM 上安裝 Hotfix KB2854082。任何伺服器或 VM 若是位於此叢集、但不在可用性群組中,也應該安裝這個 Hotfix。

在每個叢集節點的遠端桌面工作階段,將 KB2854082 下載至本機目錄。然後,依序在每個叢集節點上安裝此 Hotfix。如果叢集服務目前在叢集節點上執行,則在 Hotfix 安裝結束時會重新啟動伺服器。

Warning警告
停止叢集服務或重新啟動伺服器會影響叢集和可用性群組的仲裁健全狀況,而且可能造成叢集離線。為了在安裝期間維護叢集的高可用性,請確定以下條件:

  • 叢集處於最佳仲裁健康狀況、

  • 在任何節點上安裝此 Hotfix 之前,所有叢集節點都在線上,而且

  • 允許此 Hotfix 安裝作業在一個節點上執行完畢 (包括完整重新啟動伺服器),然後才在叢集的其他任何節點上安裝此 Hotfix。

在這個步驟中,您會建立一個防火牆規則來開啟負載平衡端點的探查連接埠 (59999,如先前所指定),以及另一個規則來開啟可用性群組接聽程式連接埠。由於您已在包含可用性群組複本的 Azure VM 上建立負載平衡的端點,現在您必須開啟個別 Azure VM 上的探查連接埠和接聽程式連接埠。

  1. 在主控複本的 VM 上,啟動 [具有進階安全性的 Windows 防火牆]。

  2. 以滑鼠右鍵按一下 [輸入規則],然後按一下 [新增規則]

  3. [規則類型] 頁面中,選取 [連接埠],然後按 [下一步]

  4. [通訊協定及連接埠] 頁面中選取 [TCP],然後在 [特定本機連接埠] 方塊中輸入 59999。然後按 [下一步]。

  5. [執行動作] 頁面中,維持選取 [允許連線],然後按 [下一步]

  6. [設定檔] 頁面中接受預設值,然後按 [下一步]

  7. [名稱] 頁面中,於 [名稱] 文字方塊中指定規則名稱,例如 AlwaysOn 接聽程式探查連接埠,然後按一下 [完成]

  8. 針對可用性群組接聽程式連接埠 (如先前在指令碼的 $EndpointPort 參數中所指定) 重複上述步驟,並且指定適當的規則名稱,例如 AlwaysOn 接聽程式連接埠

在這個步驟中,您會在容錯移轉叢集管理員及 SQL Server Management Studio (SSMS) 中手動建立可用性群組接聽程式。

  1. 從主控主要複本的節點開啟 [容錯移轉叢集管理員]。

  2. 選取 [網路]節點,然後記下叢集網路名稱。這個名稱將會用於 PowerShell 指令碼中的 $ClusterNetworkName 變數。

  3. 展開叢集名稱,然後按一下 [角色]。

  4. [角色] 窗格中,以滑鼠右鍵按一下可用性群組名稱、然後選取 [新增資源] > [用戶端存取點]

    為可用性群組加入用戶端存取點

  5. 在 [名稱] 方塊中,建立新接聽程式的名稱,然後按兩次 [下一步],再按一下 [完成]。此時請勿讓接聽程式或資源上線。

  6. 按一下 [資源] 索引標籤,然後展開您剛剛建立的用戶端存取點。您會看見叢集內每個叢集網路的 [IP 位址]資源。如果這是僅限 Azure 的解決方案,您只會看到一個 IP 位址資源。

  7. 如果您要設定混合方案,請繼續執行此步驟。如果您要設定僅限 Azure 的方案,請跳至下一步。

    1. 以滑鼠右鍵按一下與您的內部部署子網路對應的 IP 位址資源,然後選取 [內容]。請記下 IP 位址名稱和網路名稱。

    2. 選取 [靜態 IP 位址]、指派未使用的 IP 位址,然後按一下 [確定]



  8. 以滑鼠右鍵按一下與您的 Azure 子網路對應的 IP 位址資源,然後選取 [屬性]。

    Tip提示
    如果接聽程式之後因為 DHCP 所選取的 IP 位址發生衝突而無法上線,您可以在此屬性視窗中設定有效的靜態 IP 位址。

  9. 在同一個 [IP 位址] 屬性視窗中,變更 [IP 位址名稱]。此 IP 位址名稱將用於 $IPResourceName PowerShell 指令碼的變數。如果您的方案跨越多個 Azure VNet,請為每項 IP 資源重複此步驟。

  10. 如果您使用 public load balancing,請繼續執行此步驟。如果您使用Internal Load Balancing,請跳至下一個步驟。針對public load balancing,您必須取得包含複本之雲端服務的公用虛擬 IP 位址。登入 Azure 入口網站。導覽至包含您的可用性群組 VM 的雲端服務。開啟 [儀表板] 檢視。請記下顯示在 [公用虛擬 IP (VIP) 位址] 下的位址。如果您的方案跨越 Vnet,請針對每個包含裝載複本之 VM 的雲端服務重複此步驟。

    在其中一個 VM上,將以下 PowerShell 指令碼複製到文字編輯器中,並且將變數設定為您先前記下的值。

    # Define variables
    $ClusterNetworkName = "<ClusterNetworkName>" # the cluster network name (Use Get-ClusterNetwork on Windows Server 2012 of higher to find the name)
    $IPResourceName = "<IPResourceName>" # the IP Address resource name 
    $CloudServiceIP = "<X.X.X.X>" # Public Virtual IP (VIP) address of your cloud service
    
    Import-Module FailoverClusters
    
    # If you are using Windows Server 2012 or higher, use the Get-Cluster Resource command. If you are using Windows Server 2008 R2, use the cluster res command. Both commands are commented out. Choose the one applicable to your environment and remove the # at the beginning of the line to convert the comment to an executable line of code. 
    
    # Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$CloudServiceIP";"ProbePort"="59999";"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"OverrideAddressMatch"=1;"EnableDhcp"=0}
    # cluster res $IPResourceName /priv enabledhcp=0 overrideaddressmatch=1 address=$CloudServiceIP probeport=59999  subnetmask=255.255.255.255
    
  11. 如果您使用 Internal Load Balancing (ILB),請繼續執行此步驟。如果您使用public load balancing,請跳至下一個步驟。針對 ILB,您必須使用先前建立之 ILB 的 IP 位址。使用下列指令碼,在 PowerShell 中取得此 IP 位址。

    # Define variables
    $ServiceName = "<MyServiceName>" # the name of the cloud service that contains the AG nodes
    (Get-AzureInternalLoadBalancer -ServiceName $ServiceName).IPAddress
    

    在其中一個 VM上,將以下 PowerShell 指令碼複製到文字編輯器中,並且將變數設定為您先前記下的值。

    # Define variables
    $ClusterNetworkName = "<MyClusterNetworkName>" # the cluster network name (Use Get-ClusterNetwork on Windows Server 2012 of higher to find the name)
    $IPResourceName = "<IPResourceName>" # the IP Address resource name 
    $ILBIP = “<X.X.X.X># the IP Address of the Internal Load Balancer (ILB)
    
    Import-Module FailoverClusters
    
    # If you are using Windows Server 2012 or higher, use the Get-Cluster Resource command. If you are using Windows Server 2008 R2, use the cluster res command. Both commands are commented out. Choose the one applicable to your environment and remove the # at the beginning of the line to convert the comment to an executable line of code. 
    
    # Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$ILBIP";"ProbePort"="59999";"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"OverrideAddressMatch"=1;"EnableDhcp"=0}
    # cluster res $IPResourceName /priv enabledhcp=0 overrideaddressmatch=1 address=$ILBIP probeport=59999  subnetmask=255.255.255.255
    
  12. 設定變數之後,請開啟提高權限的 Windows PowerShell 視窗,然後將指令碼從文字編輯器中複製並貼到您的 Azure PowerShell 工作階段加以執行。如果提示依然顯示 >>,請再次輸入 ENTER 鍵,確定指令碼會開始執行。在每個 VM 上重複此動作。

    此指令碼會使用雲端服務的 IP 位址設定 IP 位址資源,並且設定類似探查連接埠的其他參數。當 IP 位址資源處於線上時,它可以回應先前在此教學課程中建立的負載平衡端點對探查連接埠所做的輪詢。

  13. 返回 [容錯移轉叢集管理員]。展開 [角色],然後強調顯示您的可用性群組。在 [資源] 索引標籤上,以滑鼠右鍵按一下接聽程式名稱,然後按一下 [內容]

  14. 按一下 [相依性] 索引標籤。如果有多個資源列出,請確認 IP 位址具有 OR 相依性,而非 AND。按一下 [確定]

  15. 以滑鼠右鍵按一下接聽程式名稱,然後按一下 [上線]

  16. 接聽程式上線後,請按 [資源] 索引標籤上,以滑鼠右鍵按一下可用性群組,然後按一下 [內容]

    設定可用性群組資源

  17. 建立接聽程式名稱資源 (而非 IP 位址資源名稱) 的相依性。按一下 [確定]

    加入對接聽程式名稱的相依性

  18. 啟動 SQL Server Management Studio,然後連接到主要複本。

  19. 導覽至 [AlwaysOn 高可用性] > [可用性群組] > [<可用性群組名稱>] > [可用性群組接聽程式]。您現在應該會看到您在 [容錯移轉叢集管理員] 中所建立的接聽程式名稱。以滑鼠右鍵按一下接聽程式名稱,然後按一下 [屬性]

  20. 在 [連接埠] 方塊中,使用先前所用的 $EndpointPort (在本教學課程中建議使用 1433),為可用性群組接聽程式指定連接埠號碼,然後按一下 [確定]。

建立可用性群組接聽程式後,可能必須調整接聽程式資源的 RegisterAllProvidersIP 和 HostRecordTTL 叢集參數。這些參數可縮短容錯移轉後的重新連線時間,而防止連線逾時。如需這些參數與範例程式碼的詳細資訊,請參閱建立或設定可用性群組接聽程式

在這個步驟中,您會使用執行於相同網路上的用戶端應用程式測試可用性群組接聽程式。

針對用戶端連線,請注意下列需求:

  • 接聽程式的用戶端連線必須來自與主控 AlwaysOn 可用性複本的電腦位於不同雲端服務中的電腦。

  • 如果 AlwaysOn 複本位於不同的子網路中,則用戶端必須在連線字串中指定 "MultisubnetFailover=True"。這會導致嘗試對不同子網路中的複本執行平行連接。請注意,此案例包括跨地區的 AlwaysOn 可用性群組部署。

其中一個範例是從位於相同 Azure VNet 中的 VM 之一 (但並不是主控複本的 VM) 連接到接聽程式。此測試的簡易執行方式,是嘗試將 SSMS 連接到可用性群組接聽程式。另一個簡易方法,是依照下列方式執行 SQLCMD.exe

sqlcmd -S "<ListenerName>,<EndpointPort>" -d "<DatabaseName>" -Q "select @@servername, db_name()" -l 15
Tip提示
請注意,如果 EndpointPort 值是 1433,則不需要在呼叫中加以指定。先前的呼叫也會假設用戶端電腦已加入至相同的網域,而且呼叫端已透過 Windows 驗證獲得資料庫的權限。

當測試接聽程式時,請務必將可用性群組容錯移轉,以確保用戶端可以在容錯移轉時連接到接聽程式。

public load balancing而言,先前的測試並不適用於 Azure VNet 以外的範圍。若要從虛擬網路外部存取接聽程式,您必須指定雲端服務名稱。具有名稱 mycloudservice 的雲端服務,sqlcmd 陳述式將如下:

sqlcmd -S "mycloudservice.cloudapp.net,<EndpointPort>" -d "<DatabaseName>" -U "<LoginId>" -P "<Password>"  -Q "select @@servername, db_name()" -l 15

不同於上述範例,此時必須使用 SQL 驗證,因為呼叫端無法透過網際網路使用 Windows 驗證。如需詳細資訊,請參閱 Windows Azure VM 中的 AlwaysOn 可用性群組:用戶端連線案例。使用 SQL 驗證時,請確定您在兩個複本上建立相同的登入。如需有關如何對可用性群組的登入進行疑難排解的詳細資訊,請參閱如何將登入對應,或使用包含的 SQL 資料庫使用者連接到其他複本,並對應至可用性資料庫

如果 AlwaysOn 複本位於不同的子網路中,則用戶端必須在連線字串中指定 "MultisubnetFailover=True"。這會導致嘗試對不同子網路中的複本執行平行連接。請注意,此案例包括跨地區的 AlwaysOn 可用性群組部署。

note附註
此步驟中的測試不適用於 ILB,因為內部負載平衡器無法從 Azure VNet 之外存取。

另請參閱

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