在 Azure SQL Server VM 上設定可用性群組的外部接聽程式
本主題說明如何設定 Always On 可用性群組的接聽程式,並且能夠在網際網路上從外部存取。 如此可將雲端服務的 公用虛擬 IP (VIP) 位址與接聽程式建立關聯。
重要
Azure 針對建立和使用資源方面,有二種不同的部署模型:Resource Manager 和傳統。 本文涵蓋之內容包括使用傳統部署模型。 Microsoft 建議讓大部分的新部署使用 Resource Manager 模式。
您的可用性群組可包含的複本為僅限內部部署、僅限 Azure,或同時跨內部部署和 Azure 的混合式組態。 Azure 複本可位於相同區域內,或使用多個虛擬網路 (VNet) 跨多個區域。 下列步驟假設您已 設定可用性群組,但尚未設定接聽程式。
外部接聽程式的指導方針和限制
當您使用雲端服務公用 VIP 位址部署時,請注意下列有關 Azure 中可用性群組接聽程式的指導方針:
- 可用性群組接聽程式支援 Windows Server 2008 R2、Windows Server 2012 和 Windows Server 2012 R2。
- 用戶端應用程式必須與包含可用性群組 VM 的雲端服務位於不同雲端服務上。 Azure 在相同的雲端服務中不支援伺服器直接回傳搭配用戶端和伺服器使用。
- 根據預設,本文中的步驟示範了如何設定一個接聽程式使用雲端服務的虛擬 IP (VIP) 位址; 不過,您可以為雲端服務保留並建立多個 VIP 位址。 這可讓您利用本文的步驟建立多個個別與不同 VIP 相關聯的接聽程式。 如需有關如何建立多個 VIP 位址的資訊,請參閱每一雲端服務可有多個 VIP。
- 如果您要建立混合式環境的接聽程式,內部部署網路必須能夠連線到公用網際網路,以及使用 Azure 虛擬網路的站對站 VPN。 位於 Azure 子網路時,僅能透過相應雲端服務的公用 IP 位址才能連線至可用性群組接聽程式。
- 有外部接聽程式也使用內部負載平衡器 (ILB) 時,無法在同一個雲端服務中建立外部接聽程式。
判斷接聽程式的存取性
請務必了解有兩種方式可以在 Azure 中設定可用性群組接聽程式。 這些方法的差異在於您建立接聽程式時使用的 Azure Load Balancer 類型。 下表描述其差異:
負載平衡器類型 | 實作 | 使用時機: |
---|---|---|
外部 | 使用主控虛擬機器 (VM) 之雲端服務的 [公用虛擬 IP 位址]。 | 您需要從虛擬網路外部存取接聽程式,包括從網際網路。 |
內部 | 使用「內部負載平衡」 搭配接聽程式的私用位址。 | 您只能從相同的虛擬網路內存取接聽程式。 此存取包括混合案例中的站對站 VPN。 |
重要
對於使用雲端服務公用 VIP 的接聽程式 (外部負載平衡器),只要用戶端、接聽程式和資料庫位於相同的 Azure 區域中,就不會向您收取輸出流量費用。 否則,透過接聽程式傳回的所有資料都會被視為輸出流量,並以正常資料傳輸率向您收費。
ILB 只可以在具有區域範圍的虛擬網路上設定。 已針對同質群組設定的現有虛擬網路無法使用 ILB。 如需詳細資訊,請參閱內部負載平衡器概觀。
本文著重於建立使用 外部負載平衡的接聽程式。 如果您想要虛擬網路專屬的接聽程式,請參閱本文提供設定 包含 ILB 之接聽程式
使用伺服器直接回傳建立負載平衡 VM 端點
外部負載平衡會使用主控 VM 之雲端服務的虛擬和公用虛擬 IP 位址。 因此在此情況下,您不需要建立或設定負載平衡器。
您必須為每個主控 Azure 複本的 VM 建立負載平衡端點。 如果您的複本位於多個區域,則該區域的每個複本必須位於相同 VNet 中的相同雲端服務。 建立跨越多個 Azure 區域的可用性群組複本需要設定多個 VNet。 如需有關設定跨 VNet 連線的詳細資訊,請參閱〈 設定 VNet 對 VNet 連線〉。
在 Azure 入口網站中,巡覽至每個主控複本的 VM 並檢視詳細資料。
針對每個 VM 按一下 [端點] 索引標籤。
確認您想要使用之接聽程式端點的 [名稱] 和 [公用連接埠] 尚未使用。 在下列範例中,名稱是「MyEndpoint」,而通訊埠為「1433」。
在您的本機用戶端上,下載並安裝 最新的 PowerShell 模組。
啟動 Azure PowerShell。 新的 PowerShell 工作階段會使用載入的 Azure 系統管理模組來開啟。
執行 Get-AzurePublishSettingsFile。 這個 Cmdlet 會將您導向瀏覽器,以便將發佈設定檔案下載至本機目錄。 系統可能會提示您輸入 Azure 訂用帳戶的登入認證。
使用您所下載發佈設定檔案的路徑來執行 Import-AzurePublishSettingsFile 命令:
Import-AzurePublishSettingsFile -PublishSettingsFile <PublishSettingsFilePath>
一旦匯入發佈設定檔案,您便可以在 PowerShell 工作階段中管理 Azure 訂用帳戶。
將下方的 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 # 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 "ListenerEndpoint" -Protocol "TCP" -PublicPort 1433 -LocalPort 1433 -LBSetName "ListenerEndpointLB" -ProbePort 59999 -ProbeProtocol "TCP" -DirectServerReturn $true | Update-AzureVM }
一旦您已設定變數,請從文字編輯器將指令碼複製到您的 Azure PowerShell 工作階段來執行它。 如果提示依然顯示 >>,請再次輸入 ENTER 鍵,確定指令碼會開始執行。
必要時,請確認已安裝 KB2854082
接下來,如果叢集上的任何伺服器正在執行 Windows Server 2008 R2 或 Windows Server 2012,您必須確認在屬於叢集一部分的每台內部部署伺服器或 Azure VM 上安裝了 Hotfix KB2854082 。 在叢集不在的可用性群組中的任何伺服器或 VM,也應該安裝這個 Hotfix。
在每個叢集節點的遠端桌面工作階段中,下載 KB2854082 至本機目錄。 然後,依序在每個叢集節點上安裝 Hotfix。 如果叢集服務目前在叢集節點上執行,伺服器會在 Hotfix 安裝結束時重新啟動。
警告
停止叢集服務或重新啟動伺服器會影響叢集和可用性群組的仲裁健全狀況,而且可能造成叢集離線。 若要在安裝期間維護叢集的高可用性,請確定:
- 叢集處於最佳仲裁健康狀態。
- 在任何節點上安裝 Hotfix 之前,所有叢集節點都在線上。
- 在叢集中的任何其他節點上安裝 Hotfix 之前,允許 Hotfix 安裝在一個節點上執行到完成為止,包括完整重新啟動伺服器。
在可用性群組節點中開啟防火牆連接埠
在此步驟中,您會建立防火牆規則來開啟負載平衡端點用的探查連接埠 (59999,如先前所指定),以及建立另一個規則來開啟可用性群組接聽程式連接埠。 因為您在包含可用性群組複本的 VM 上建立了負載平衡的端點,您必須在個別 VM 上開啟探查連接埠和接聽程式連接埠。
在裝載複本的 VM 上,啟動 [具有進階安全性的 Windows 防火牆]。
以滑鼠右鍵按一下 [輸入規則],然後按一下 [新增規則]。
在 [規則類型] 頁面上,選取 [連接埠],然後按 [下一步]。
在 [通訊協定與連接埠] 頁面上,選取 [TCP],然後在 [特定本機連接埠] 方塊中輸入 [59999],然後按 [下一步]。
在 [動作] 頁面上,保持選取 [允許連線],然後按 [下一步]。
在 [設定檔] 頁面上,接受預設設定,然後按 [下一步]。
在 [名稱] 頁面的 [名稱] 文字方塊中,指定規則名稱,例如 [AlwaysOn 接聽程式探查連接埠],然後按一下 [完成]。
針對可用性群組接聽程式連接埠 (如稍早在指令碼的 $EndpointPort 參數中指定) 重複前述步驟,然後指定適當的規則名稱,例如 AlwaysOn 接聽程式連接埠。
建立可用性群組接聽程式
透過兩個步驟建立可用性群組接聽程式。 首先,建立用戶端存取點叢集資源並設定相依性。 接下來,使用 PowerShell 設定叢集資源。
建立用戶端存取點並設定叢集的相依性
在此步驟中,您會在容錯移轉叢集管理員和 SQL Server Management Studio 中手動建立可用性群組接聽程式。
從裝載主要複本的節點開啟容錯移轉叢集管理員。
選取 [網路] 節點,然後記下叢集網路名稱。 這個名稱會用於 PowerShell 指令碼中的 $ClusterNetworkName 變數。
展開叢集名稱,然後按一下 [角色]。
在 [角色] 窗格中,以滑鼠右鍵按一下可用性群組名稱,然後選取 [新增資源]>[用戶端存取點]。
在 [名稱] 方塊中,建立這個新接聽程式的名稱,按兩次 [下一步],然後按一下 [完成]。
目前請勿讓接聽程式或資源上線工作。按一下 [資源] 索引標籤,然後展開您剛才建立的用戶端存取點。 叢集中每個叢集網路的 IP 位址資源會顯示出來。 如果這是僅限 Azure 的解決方案,只會顯示一個 IP 位址資源。
執行下列任一步驟:
若要設定混合式解決方案:
a. 以滑鼠右鍵按一下對應至您內部部署子網路的 IP 位址資源,然後選取 [屬性]。 記下 IP 位址名稱和網路名稱。
b. 選取 [靜態 IP 位址]、指派未使用的 IP 位址,然後按一下 [確定]。
若要設定僅限 Azure 的解決方案︰
a. 以滑鼠右鍵按一下對應至 Azure 子網的 IP 位址資源,然後選取 [ 屬性]。
注意
如果接聽程式稍後因為 DHCP 所選取的 IP 位址衝突而無法上線,您可以在此屬性視窗中設定有效的靜態 IP 位址。
b. 在同一個 [IP 位址] 屬性視窗中,變更 [IP 位址名稱]。
此名稱使用於 PowerShell 指令碼的 $IPResourceName 變數。 如果您的解決方案跨越多個 Azure 虛擬網路,請針對每個 IP 資源重複此步驟。
在 PowerShell 中設定叢集資源
對於外部負載平衡,您必須取得包含複本之雲端服務的公用虛擬 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
設定變數之後,開啟提升權限的 Windows PowerShell 視窗中,然後從文字編輯器將指令碼複製並貼到您的 Azure PowerShell 工作階段來執行它。 如果提示依然顯示 >>,請再次輸入 ENTER 鍵,確定指令碼會開始執行。
在每個 VM 上重複此步驟。 此指令碼會使用雲端服務的 IP 位址來設定 IP 位址資源,並設定類似探查連接埠的其他參數。 當 IP 位址資源處於線上時,它會從本教學課程中稍早所建立的負載平衡端點,接著回應探查連接埠上的輪詢。
使接聽程式上線
在容錯移轉叢集管理員中,展開 [角色],然後醒目提示您的可用性群組。
在 [資源] 索引標籤上,以滑鼠右鍵按一下接聽程式名稱,然後按一下 [屬性]。
按一下 [ 相依性] 索引標籤。如果列出多個資源,請確認 IP 位址具有 OR,而非 AND 相依性。
按一下 [確定]。
以滑鼠右鍵按一下接聽程式名稱,然後按一下 [上線]。
接聽程式上線後,在 [資源] 索引標籤上,以滑鼠右鍵按一下可用性群組,然後按一下 [屬性]。
建立對接聽程式名稱資源 (非 IP 位址資源名稱) 的相依性,然後按一下 [確定]。
啟動 SQL Server Management Studio,然後連線到主要複本。
移至AlwaysOn 高可用性>群組>< AvailabilityGroupName >>可用性群組接聽程式。
您在容錯移轉叢集管理員中建立的接聽程式名稱應會顯示。以滑鼠右鍵按一下接聽程式名稱,然後按一下 [屬性]。
在 [連接埠] 方塊中,使用您稍早所用的 $EndpointPort 來指定可用性群組接聽程式的連接埠號碼 (在本教學課程中,預設值為 1433),然後按一下 [確定]。
待處理項目
建立可用性群組接聽程式之後,可能需要調整接聽程式資源的 RegisterAllProvidersIP 和 HostRecordTTL 叢集參數。 這些參數可縮短容錯移轉之後的重新連線時間,並可能防止連線逾時。 如需這些參數的詳細資訊以及範例程式碼,請參閱建立或設定可用性群組接聽程式。
測試可用性群組接聽程式 (位於相同的 VNet)
在此步驟中,您會使用在相同網路上執行的用戶端應用程式來測試可用性群組接聽程式。
用戶端連線能力具有下列需求:
- 對接聽程式的用戶端連線必須來自位於與裝載 AlwaysOn 可用性複本的機器不同雲端服務的機器。
- 如果 Always On 複本位於其他子網路中,用戶端必須在連接字串中指定 MultisubnetFailover=True 。 此狀況會導致對各種子網路中的複本進行平行連線嘗試。 此案例包含跨區域的 Always On 可用性群組部署。
其中一個範例是從相同 Azure 虛擬網路中的其中一部 VM (但不是裝載複本的 VM) 連線到接聽程式。 完成這項測試的簡單方法是嘗試將 SQL Server Management Studio 連線到可用性群組接聽程式。 另一個簡單的方法是執行 SQLCMD.exe,如下所示:
sqlcmd -S "<ListenerName>,<EndpointPort>" -d "<DatabaseName>" -Q "select @@servername, db_name()" -l 15
注意
如果 EndpointPort 值為 1433,則不需要在呼叫中指定。 前一個呼叫也假設用戶端電腦已加入相同的網域,而且已使用 Windows 驗證授與呼叫端對資料庫的權限。
測試接聽程式時,請務必容錯移轉可用性群組,以確定用戶端可以跨容錯移轉連線至接聽程式。
測試可用性群組接聽程式 (位於網際網路)
若要從虛擬網路外部存取接聽程式,您必須使用本主題中所述的外部/公用負載平衡 (,) 而不是 ILB,這只能在相同的 VNet 記憶體取。 在連接字串中,您將指定雲端服務名稱。 例如,如果您雲端服務的名稱為 mycloudservice,sqlcmd 陳述式便如下所示:
sqlcmd -S "mycloudservice.cloudapp.net,<EndpointPort>" -d "<DatabaseName>" -U "<LoginId>" -P "<Password>" -Q "select @@servername, db_name()" -l 15
不同於先前範例,必須使用 SQL 驗證,因為呼叫端無法透過網際網路使用 Windows 驗證。 如需詳細資訊,請參閱 Azure VM 中的 Always On 可用性群組:用戶端連線能力情況。 使用 SQL 驗證時,請確定您在兩個複本上建立相同的登入。 如需有關使用可用性群組疑難排解登入的詳細資訊,請參閱 如何對應登入或使用包含的 SQL Database 使用者以連線到其他複本並對應到可用性資料庫。
如果 Always On 複本位於其他子網路中,用戶端必須在連接字串中指定 MultisubnetFailover=True 。 這會導致對於不同子網路中的複本進行平行連接嘗試。 請注意,此情況包含跨區域的 Always On 可用性群組部署。
後續步驟
除了自動將用戶端連線至主要複本,接聽程式可用來將唯讀工作負載重新導向至次要複本。 此用法可以改善整體解決方案的效能和延展性。 如需詳細資訊,請參閱使用 ReadIntent 路由搭配 Azure AlwaysOn 可用性群組接聽程式。
注意
如需 Azure 接聽程式的疑難排解秘訣,請參閱 AlwaysOn 支援小組部落格中的針對 Azure 中可用性群組接聽程式的問題進行移難排解。
如需在 Azure 中使用 SQL Server 的詳細資訊,請參閱 Azure 虛擬機器上的 SQL Server。