建立或設定可用性群組接聽程式 (SQL Server)
本主題描述如何使用 SQL Server Management Studio、Transact-SQL 或 SQL Server 2012 中的 PowerShell,建立或設定 AlwaysOn 可用性群組的單一「可用性群組接聽程式」(Availability Group Listener)。
重要事項 |
---|
若要建立可用性群組的第一個可用性群組接聽程式,強烈建議您使用 SQL Server Management Studio、Transact-SQL 或 SQL Server PowerShell。 除非必要 (例如建立其他接聽程式),否則避免在 WSFC 叢集中直接建立接聽程式。 |
開始之前:
這個可用性群組已經有接聽程式?
限制事項
建議
必要條件
可用性群組接聽程式之 DNS 名稱的需求
Windows 權限
SQL Server 權限
若要建立或設定可用性群組接聽程式,使用:
SQL Server Management Studio
Transact-SQL
PowerShell
疑難排解
由於 Active Directory 配額而無法建立可用性群組接聽程式
後續操作:建立可用性群組接聽程式之後
MultiSubnetFailover 關鍵字和相關聯的功能
RegisterAllProvidersIP 設定
HostRecordTTL 設定
停用 RegisterAllProvidersIP 和減少 TTL 的範例 PowerShell 指令碼
後續操作建議
為可用性群組建立其他接聽程式 (選擇性)
開始之前
這個可用性群組已經有接聽程式?
若要判斷可用性群組的接聽程式是否已經存在
[!附註]
如果接聽程式已存在,而且您想要建立其他接聽程式,請參閱本主題稍後的 若要為可用性群組建立其他接聽程式 (選擇性)。
限制事項
- 透過 SQL Server,您只可以為每個可用性群組建立一個接聽程式。 通常每個可用性群組只需要一個接聽程式。 但是,某些客戶情況下一個可用性群組需要多個接聽程式。 透過 SQL Server 建立接聽程式之後,您可以使用適用容錯移轉叢集的 Windows PowerShell 或 WSFC 容錯移轉叢集管理員建立額外的接聽程式。 如需詳細資訊,請參閱本主題稍後的<若要為可用性群組建立其他接聽程式 (選擇性)>。
建議
建議為多重子網路組態使用靜態 IP 位址,但並不是必要的。
必要條件
您必須連接到裝載主要複本的伺服器執行個體。
如果您要跨多個子網路設定可用性群組接聽程式,而且打算使用靜態 IP 位址,必須取得每個子網路的靜態 IP 位址,而且這些子網路要裝載您要建立其接聽程式之可用性群組的可用性複本。 您通常需要向網路管理員取得靜態 IP 位址。
重要事項 |
---|
在建立第一個接聽程式之前,強烈建議您閱讀<AlwaysOn 用戶端連接性 (SQL Server)>。 |
可用性群組接聽程式之 DNS 名稱的需求
每個可用性群組接聽程式都需要一個 DNS 主機名稱,該名稱在網域中和 NetBIOS 中必須是唯一的。 DNS 名稱是字串值。 此名稱只能包含英數字元、虛線 (-) 和連字號 (_) (順序不拘)。 DNS 主機名稱不區分大小寫。 長度上限是 63 個字元,但是在 SQL Server Management Studio 中,您可以將長度上限指定為 15 個字元。
我們建議您指定一個有意義的字串。 例如,如果是名為 AG1 的可用性群組,有意義的 DNS 主機名稱會是 ag1-listener。
重要事項 |
---|
NetBIOS 只會辨識 DNS 名稱中的前 15 個字元。 如果您有兩個由相同 Active Directory 所控制的 WSFC 叢集,而且嘗試使用超過 15 個字元的名稱以及完全相同的 15 個字元前置詞,在這兩個叢集中建立可用性群組接聽程式,就會收到一則錯誤,指出系統無法讓虛擬網路名稱資源上線。 如需有關 DNS 名稱之前置詞命名規則的詳細資訊,請參閱<指派網域名稱>。 |
Windows 權限
權限 |
連結 |
||
---|---|---|---|
裝載可用性群組之 WSFC 叢集的叢集物件名稱 (CNO) 必須擁有Create Computer objects權限。 在 Active Directory 中,CNO 預設不會明確擁有Create Computer objects權限,而且可以建立 10 個虛擬電腦物件 (VCO)。 在建立 10 個 VCO 之後,建立額外 VCO 的作業將會失敗。 您可以將權限明確授與 WSFC 叢集的 CNO 來避免這個情況發生。 請注意,您已經刪除之可用性群組的 VCO 不會自動在 Active Directory 中刪除,而且會自動算在 10 個 VCO 的預設限制當中,除非您手動加以刪除。
|
|
||
如果您的組織要求您為接聽程式虛擬網路名稱預先設置電腦帳戶,將需要 Account Operator 群組中的成員資格或網域管理員的協助。
|
<容錯移轉叢集逐步指南:設定 Active Directory 中的帳戶>中的<為叢集服務或應用程式預先設置帳戶的步驟>。 |
[回到頁首]
SQL Server 權限
工作 |
權限 |
---|---|
建立可用性群組接聽程式 |
需要系統管理員 (sysadmin) 固定伺服器角色的成員資格,以及 CREATE AVAILABILITY GROUP 伺服器權限、ALTER ANY AVAILABILITY GROUP 權限或 CONTROL SERVER 權限。 |
修改現有的可用性群組接聽程式 |
需要可用性群組的 ALTER AVAILABILITY GROUP 權限、CONTROL AVAILABILITY GROUP 權限、ALTER ANY AVAILABILITY GROUP 權限或 CONTROL SERVER 權限。 |
[回到頁首]
使用 SQL Server Management Studio
提示 |
---|
新增可用性群組精靈支援建立新可用性群組的接聽程式。 |
建立或設定可用性群組接聽程式
在 [物件總管] 中,連接到裝載可用性群組之主要複本的伺服器執行個體,然後按一下伺服器名稱以展開伺服器樹狀目錄。
依序展開 [AlwaysOn 高可用性] 節點和 [可用性群組] 節點。
按一下您要設定其接聽程式的可用性群組,然後選擇下列其中一個替代方式:
若要建立接聽程式,以滑鼠右鍵按一下 [可用性群組接聽程式] 節點,然後選取 [新增接聽程式] 命令。 這會開啟 [新增可用性群組接聽程式] 對話方塊。 如需詳細資訊,請參閱本主題稍後的<加入可用性群組接聽程式 (對話方塊)>。
若要變更現有接聽程式的通訊埠編號,展開 [可用性群組接聽程式] 節點、以滑鼠右鍵按一下接聽程式,然後選取 [屬性] 命令。 在 [通訊埠] 欄位中輸入新的通訊埠編號,然後按一下 [確定]。
[回到頁首]
新增可用性群組接聽程式 (對話方塊)
接聽程式 DNS 名稱
指定可用性群組接聽程式的 DNS 主機名稱。 DNS 名稱是一個字串,在網域和 NetBIOS 中都必須是唯一的。 此名稱只能包含英數字元、虛線 (-) 和連字號 (_) (順序不拘)。 DNS 主機名稱不區分大小寫。 最大長度是 15 個字元。如需詳細資訊,請參閱本主題前文中的<可用性群組接聽程式之 DNS 名稱的需求>。
通訊埠
此接聽程式所使用的 TPC 通訊埠。網路模式
指出接聽程式所使用的 TCP 通訊協定,其中一個:DHCP
接聽程式將使用執行動態主機設定通訊協定 (DHCP) 之伺服器所指派的動態 IP 位址。 DHCP 僅限於單一子網路。重要事項 不建議在實際執行環境中使用 DHCP。 如果有停機時間且 DHCP IP 租用到期,則需要額外的時間來註冊與接聽程式 DNS 名稱相關聯的新 DHCP 網路 IP 位址,而影響用戶端連接。 但是,DHCP 適合用於設定開發和測試環境,以驗證可用性群組的基本功能,也適合與應用程式整合。
靜態 IP
接聽程式將使用一個或多個靜態 IP 位址。 其他 IP 位址為選擇性。 若要建立跨多個子網路的可用性群組接聽程式,您必須在接聽程式組態中,針對每個子網路指定一個靜態 IP 位址。 請連絡您的網路系統管理員以取得這些靜態 IP 位址。如果您選取 [靜態 IP],就會在 [網路模式] 欄位底下出現一個子網路方格。 此方格會顯示這個可用性群組接聽程式可存取之每個子網路的相關資訊。 在您按一下 [加入] 來加入靜態 IP 位址之前,此方格是空的。
資料行如下:
子網路
顯示您加入至可用性群組接聽程式之每個子網路的識別碼。IP 位址
顯示給定子網路的 IP 位址。 對於給定的子網路,IP 位址是 IPv4 位址或 IPv6 位址。
加入
按一下可將靜態 IP 位址加入至選取的子網路或此接聽程式的其他子網路。 這會開啟 [加入 IP 位址] 對話方塊。 如需詳細資訊,請參閱<[加入 IP 位址] 對話方塊 (SQL Server Management Studio)>說明主題。移除
按一下可從此接聽程式中移除選取的子網路。確定
按一下可建立指定的可用性群組接聽程式。
[回到頁首]
使用 Transact-SQL
建立或設定可用性群組接聽程式
連接到裝載主要複本的伺服器執行個體。
使用 CREATE AVAILABILITY GROUP 陳述式的 LISTENER 選項或 ALTER AVAILABILITY GROUP 陳述式的 ADD LISTENER 選項。
下列範例會將可用性群組接聽程式加入至名為 MyAg2 的現有可用性群組。 系統會針對此接聽程式指定唯一的 DNS 名稱 MyAg2ListenerIvP6。 兩個複本位於不同的子網路上,因此接聽程式使用靜態 IP 位址 (建議方法)。 針對這兩個可用性複本,WITH IP 子句都會指定使用 IPv6 格式的靜態 IP 位址:2001:4898:f0:f00f::cf3c and 2001:4898:e0:f213::4ce2。 此範例也會指定使用選用的 PORT 引數指定通訊埠 60173 做為接聽程式通訊埠。
ALTER AVAILABILITY GROUP MyAg2 ADD LISTENER ‘MyAg2ListenerIvP6’ ( WITH IP ( ('2001:db88:f0:f00f::cf3c'),('2001:4898:e0:f213::4ce2') ) , PORT = 60173 ); GO
使用 PowerShell
建立或設定可用性群組接聽程式
變更目錄 (cd) 為裝載主要複本的伺服器執行個體。
若要建立或修改可用性群組接聽程式,請使用下列其中一個指令程式:
New-SqlAvailabilityGroupListener
建立新的可用性群組接聽程式,並將其附加至現有的可用性群組。例如,下列 New-SqlAvailabilityGroupListener 命令會針對可用性群組 MyAg 建立名為 MyListener 的可用性群組接聽程式。 這個接聽程式將使用傳遞給 -StaticIp 參數的 IPv4 位址做為其虛擬 IP 位址。
New-SqlAvailabilityGroupListener -Name MyListener ` -StaticIp '192.168.3.1/255.255.252.0' ` -Path SQLSERVER:\Sql\Computer\Instance\AvailabilityGroups\MyAg
Set-SqlAvailabilityGroupListener
修改現有可用性群組接聽程式上的通訊埠設定。例如,下列 Set-SqlAvailabilityGroupListener 命令會將名為 MyListener 之可用性群組接聽程式的通訊埠編號設定為 1535。 這個通訊埠是用來接聽接聽程式的連接。
Set-SqlAvailabilityGroupListener -Port 1535 ` -Path SQLSERVER:\Sql\PrimaryServer\InstanceName\AvailabilityGroups\MyAg\AGListeners\MyListener
Add-SqlAGListenerstaticIp
將靜態 IP 位址加入至現有的可用性群組接聽程式組態。 IP 位址可以是包含子網路的 IPv4 位址或 IPv6 位址。例如,下列 Add-SqlAGListenerstaticIp 命令會將靜態 IPv4 位址加入至可用性群組 MyAg 的可用性群組接聽程式 MyListener。 這個 IPv6 位址會做為子網路 255.255.252.0 之接聽程式的虛擬 IP 位址。 如果可用性群組跨越多個子網路,您就應該將每個子網路的靜態 IP 位址加入至接聽程式。
$path = "SQLSERVER:\SQL\PrimaryServer\InstanceName\AvailabilityGroups\MyAg\AGListeners\ MyListener" ` Add-SqlAGListenerstaticIp -Path $path ` -StaticIp "2001:0db8:85a3:0000:0000:8a2e:0370:7334"
[!附註]
若要檢視指令程式的語法,請使用 SQL Server PowerShell 環境中的 Get-Help 指令程式。 如需詳細資訊,請參閱<取得 SQL Server PowerShell 說明>。
若要設定和使用 SQL Server PowerShell 提供者
[回到頁首]
疑難排解
由於 Active Directory 配額而無法建立可用性群組接聽程式
新可用性群組接聽程式的建立作業可能會在建立時失敗,因為您已達到參與叢集節點電腦帳戶的 Active Directory 配額。 如需詳細資訊,請參閱下列文件:
[回到頁首]
後續操作:建立可用性群組接聽程式之後
MultiSubnetFailover 關鍵字和相關聯的功能
MultiSubnetFailover 是新的連接字串關鍵字,可用來加快 SQL Server 2012 中 AlwaysOn 可用性群組和 AlwaysOn 容錯移轉叢集執行個體的容錯移轉速度。 當您在連接字串中設定 MultiSubnetFailover=True 時,就會啟用下列三項子功能:
將多重子網路快速容錯移轉至 AlwaysOn 可用性群組或容錯移轉叢集執行個體的多重子網路接聽程式。
將單一子網路快速容錯移轉至 AlwaysOn 可用性群組或容錯移轉叢集執行個體的單一子網路接聽程式。
- 這項功能是在連接至具有單一子網路中單一 IP 的接聽程式時使用。 它會執行更積極的 TCP 連接重試,加快單一子網路容錯移轉的速度。
將具名執行個體解析為多重子網路 AlwaysOn 容錯移轉叢集執行個體。
- 這項功能可針對具有多個子網路端點的 AlwaysOn 容錯移轉叢集執行個體加入具名執行個體解析支援。
.NET Framework 3.5 或 OLEDB 不支援 MultiSubnetFailover=True
問題:如果您的可用性群組或容錯移轉叢集執行個體具有相依於不同子網路中多個 IP 位址的接聽程式名稱 (WSFC 叢集管理員中稱為網路名稱或用戶端存取點),而且您使用 ADO.NET 搭配 .NET Framework 3.5 SP1 或使用 SQL Native Client 11.0 OLEDB,對可用性群組接聽程式的 50% 用戶端連接要求可能會達到連接逾時。
因應措施:建議您執行下列其中一項工作。
如果您沒有操作叢集資源的權限,請將連接逾時變更為 30 秒 (此值會產生 20 秒 TCP 逾時期間加上 10 秒緩衝時間)。
優點:如果發生跨子網路容錯移轉,用戶端復原時間很短。
缺點:一半的用戶端連接需要 20 秒以上。
如果您有操作叢集資源的權限,比較建議的作法是將可用性群組接聽程式的網路名稱設定為 RegisterAllProvidersIP=0。 如需詳細資訊,請參閱本章節稍後的「RegisterAllProvidersIP 設定」。
優點:您不需要增加用戶端連接逾時值。
缺點:如果發生跨子網路容錯移轉,用戶端復原時間可能是 15 分鐘以上,視您的 HostRecordTTL 設定和跨網站 DNS/AD 複寫排程的設定而定。
RegisterAllProvidersIP 設定
當您使用 SQL Server Management Studio、Transact-SQL 或 PowerShell 建立可用性群組接聽程式時,會在 WSFC 中建立用戶端存取點,且 RegisterAllProvidersIP 屬性會設定為 1 (true)。 這個屬性值的影響取決於用戶端連接字串,如下所示:
將 MultiSubnetFailover 設為 true 的連接字串
AlwaysOn 可用性群組 會將 RegisterAllProvidersIP 屬性設定為 1,以便在用戶端連接字串依建議指定 MultiSubnetFailover = True 的用戶端容錯移轉之後,縮短重新連接的時間。 請注意,若要利用接聽程式多重子網路功能,用戶端可能需要支援 MultiSubnetFailover 關鍵字的資料提供者。 如需有關多重子網路容錯移轉之驅動程式支援的詳細資訊,請參閱<AlwaysOn 用戶端連接性 (SQL Server)>。
如需有關多重子網路叢集的詳細資訊,請參閱<SQL Server 多重子網路叢集 (SQL Server)>。
提示 RegisterAllProvidersIP = 1 時,如果您在 WSFC 叢集上執行 WSFC 驗證設定精靈,這個精靈會產生下列警告訊息:
「網路名稱 'Name:<網路名稱>' 的 RegisterAllProviderIP 屬性設定為 1。目前叢集設定的這個值應該設定為 0。」
請忽略這個訊息。
未將 MultiSubnetFailover 設為 true 的連接字串
當 RegisterAllProvidersIP = 1 時,連接字串未使用 MultiSubnetFailover = True 的任何用戶端將經歷嚴重的連線延遲。 這是因為這些用戶端嘗試循序連接到所有 IP。 相反地,如果 RegisterAllProvidersIP 變更為 0,則使用中 IP 位址會在 WSFC 叢集的用戶端存取點中註冊,因而減少舊版用戶端的延遲。 因此,如果您擁有需要連接到可用性群組接聽程式,而且無法使用 MultiSubnetFailover 屬性的舊版用戶端,建議您將 RegisterAllProvidersIP 變更為 0。
重要事項 當您透過 WSFC 叢集 (容錯移轉叢集管理員 GUI) 建立可用性群組接聽程式時,RegisterAllProvidersIP 會預設為 0 (false)。
HostRecordTTL 設定
根據預設,用戶端會快取叢集 DNS 記錄 20 分鐘。 藉由減少快取記錄的 HostRecordTTL 存留時間值 (TTL),舊版用戶端可能會更快速地重新連接。 但是,減少 HostRecordTTL 設定也可能會導致對 DN 伺服器的流量增加。
停用 RegisterAllProvidersIP 和減少 TTL 的範例 PowerShell 指令碼
下列 PowerShell 範例會示範如何針對接聽程式資源設定 RegisterAllProvidersIP 和 HostRecordTTL 叢集參數。 系統將會快取 DNS 記錄 5 分鐘,而不是預設的 20 分鐘。 對於無法使用 MultiSubnetFailover 參數的舊版用戶端而言,修改這兩個叢集參數可能會減少容錯移轉之後連接至正確 IP 位址的時間。 將 yourListenerName 取代為您要變更的接聽程式名稱。
Import-Module FailoverClusters
Get-ClusterResource yourListenerName | Set-ClusterParameter RegisterAllProvidersIP 0
Get-ClusterResource yourListenerName|Set-ClusterParameter HostRecordTTL 300
Stop-ClusterResource yourListenerName
Start-ClusterResource yourListenerName
如需容錯移轉期間之復原時間的詳細資訊,請參閱<容錯移轉期間的用戶端復原延遲>。
後續操作建議
建立可用性群組接聽程式之後:
要求網路管理員將接聽程式的 IP 位址保留為專用。
將接聽程式的 DNS 主機名稱提供給應用程式開發人員,以便在要求與這個可用性群組進行用戶端連接時,用於連接字串中。
鼓勵開發人員將用戶端連接字串更新為指定 MultiSubnetFailover = True (可能的話)。 如需有關多重子網路容錯移轉之驅動程式支援的詳細資訊,請參閱<AlwaysOn 用戶端連接性 (SQL Server)>。
[回到頁首]
為可用性群組建立其他接聽程式 (選擇性)
您透過 SQL Server 建立一個接聽程式之後,可以加入另一個接聽程式,如下所示:
使用下列其中一種工具建立接聽程式:
使用 WSFC 容錯移轉叢集管理員:
加入用戶端存取點並設定 IP 位址。
使接聽程式連線。
將相依性加入至 WSFC 可用性群組資源。
如需有關容錯移轉叢集管理員的對話方塊和索引標籤的詳細資訊,請參閱<使用者介面:容錯移轉叢集管理員嵌入式管理單元>。
使用適用容錯移轉叢集的 Windows PowerShell:
使用 Add-ClusterResource 建立網路名稱和 IP 位址資源。
使用 Start-ClusterResource 啟動網路名稱資源。
使用 Add-ClusterResourceDependency 設定網路名稱和現有 SQL Server 可用性群組資源之間的相依性。
如需有關使用適用容錯移轉叢集的 Windows PowerShell 之詳細資訊,請參閱<伺服器管理員命令概觀>。
在新的接聽程式上啟動 SQL Server 接聽。 建立額外的接聽程式之後,連接到裝載主要可用性群組複本的 SQL Server 執行個體,然後使用 SQL Server Management Studio、Transact-SQL 或 PowerShell 修改接聽程式通訊埠。
如需詳細資訊,請參閱<如何為相同可用性群組建立多個接聽程式>(SQL Server AlwaysOn 團隊部落格)。
相關工作
相關內容
[回到頁首]