SQL Server FCI & DNN 的功能互通性

適用於:Azure VM 上的 SQL Server

提示

有許多方法可部署可用性群組。 在相同 Azure 虛擬網路內的多個子網路中建立 SQL Server 虛擬機器 (VM),您的 Always On 可用性群組就可以簡化部署,而且不再需要 Azure Load Balancer 或分散式網路名稱 (DNN)。 如果您已在單一子網路中建立可用性群組,您可以將它移轉至多子網路環境

某些 SQL Server 功能依賴硬寫的虛擬網路名稱 (VNN)。 因此,對容錯移轉叢集執行個體和「Azure VM 上的 SQL Server」使用分散式網路名稱 (DNN) 資源時,需要一些額外的考量。

在本文中,您將了解如何在使用 DNN 資源時設定網路別名,以及哪些 SQL Server 功能需要額外考量。

建立網路別名 (FCI)

有些伺服器端元件依賴硬寫的 VNN 值,而且需要有網路別名將 VNN 對應至 DNN DNS 名稱,才能正常運作。 遵循建立伺服器別名中的步驟,建立別名將 VNN 對應至 DNN DNS 名稱。

若為預設執行個體,您可以直接將 VNN 對應至 DNN DNS 名稱,使得 VNN = DNN DNS 名稱。 例如,如果 VNN 名稱是 FCI1,執行個體名稱是 MSSQLSERVER,而 DNN 是 FCI1DNN (用戶端先前連線至 FCI,現在連線至 FCI1DNN),請將 VNN FCI1 對應至 DNN FCI1DNN

若為具名執行個體,則應該對完整執行個體進行網路別名對應,使得 VNN\Instance = DNN\Instance。 例如,如果 VNN 名稱是 FCI1,執行個體名稱是 instA,而 DNN 是 FCI1DNN (用戶端先前連線至 FCI1\instA,現在連線至 FCI1DNN\instaA),請將 VNN FCI1\instaA 對應至 DNN FCI1DNN\instaA

用戶端驅動程式

若為 ODBC、OLEDB、ADO.NET、JDBC、PHP 和 Node.js 驅動程式,使用者必須在連接字串中,明確指定 DNN DNS 名稱作為伺服器名稱。 為了確保容錯移轉時快速連線,請將 MultiSubnetFailover=True 新增至連接字串 (假設 SQL 用戶端支援)。

工具

SQL Server Management StudiosqlcmdAzure Data StudioSQL Server Data Tools 的使用者必須在連接字串中,明確指定 DNN DNS 名稱作為伺服器名稱。

可用性群組和 FCI

您可以使用容錯移轉叢集執行個體作為其中一個複本,以設定 Always On 可用性群組。 在此設定中,FCI 複本的鏡像端點 URL 必須使用 FCI DNN。 同樣地,如果使用 FCI 作為唯讀複本,則 FCI 複本的唯讀路由必須使用 FCI DNN。

鏡像端點的格式為:ENDPOINT_URL = 'TCP://<DNN DNS name>:<mirroring endpoint port>'

例如,如果 DNN DNS 名稱為 dnnlsnr,而 5022 是 FCI 鏡像端點的連接埠,則用來建立端點 URL 的 Transact-SQL (T-SQL) 程式碼片段如下所示:

ENDPOINT_URL = 'TCP://dnnlsnr:5022'

同樣地,唯讀路由 URL 的格式為:TCP://<DNN DNS name>:<SQL Server instance port>

例如,如果 DNN DNS 名稱為 dnnlsnr,而 1444 是唯讀目標 SQL Server FCI 所使用的連接埠,則用來建立唯讀路由 URL 的 T-SQL 程式碼片段如下所示:

READ_ONLY_ROUTING_URL = 'TCP://dnnlsnr:1444'

若為預設 1433 連接埠,您可以在 URL 中省略連接埠。 若為具名執行個體,請為具名執行個體設定靜態連接埠,並在唯讀路由 URL 中指定此連接埠。

複寫

複寫有三個元件:發行者、散發者、訂閱者。 其中任何元件都可以是容錯移轉叢集執行個體。 由於複寫設定中頻繁使用 FCI VNN (明確和隱含),可能需要有網路別名將 VNN 對應至 DNN,複寫才能運作。

在複寫內,請繼續使用 VNN 名稱作為 FCI 名稱,但在下列遠端情況下,請在「設定複寫之前」建立網路別名:

複寫元件 (具有 DNN 的 FCI) 遠端元件 網路別名對應 具有網路對應的伺服器
發行者 散發者 發行者 VNN 至發行者 DNN 散發者
散發者 用戶 散發者 VNN 至散發者 DNN 用戶
散發者 發行者 散發者 VNN 至散發者 DNN 發行者
用戶 散發者 訂閱者 VNN 至訂閱者 DNN 散發者

例如,假設複寫拓撲中使用 DNN 將一個發行者設定為 FCI,而且散發者在遠端。 在此情況下,請在散發者伺服器上建立網路別名,以將發行者 VNN 對應至發行者 DNN:

Configure the DNN DNS name as the network alias using SQL Server Configuration Manager.

使用具名執行個體的完整執行個體名稱,如下圖範例所示:

Use the full instance name when configuring a network alias for a named instance.

資料庫鏡像

您可以設定以 FCI 為任一資料庫鏡像夥伴的資料庫鏡像。 請使用 Transact-SQL (T-SQL) 來設定,不要使用 SQL Server Management Studio GUI。 使用 T-SQL 可確保使用 DNN (而不是 VNN) 來建立資料庫鏡像端點。

例如,如果 DNN DNS 名稱為 dnnlsnr,而資料庫鏡像端點是7022,則下列 T-SQL 程式碼片段會設定資料庫鏡像夥伴:

ALTER DATABASE AdventureWorks
    SET PARTNER =
    'TCP://dnnlsnr:7022'
GO 

針對用戶端存取,Failover Partner 屬性可以處理資料庫鏡像容錯移轉,但無法處理 FCI 容錯移轉。

MSDTC

FCI 可以參與由 Microsoft Distributed Transaction Coordinator (MSDTC) 協調的分散式交易。 FCI DNN 支援叢集 MSDTC 和本機 MSDTC。 在 Azure 中,叢集 MSDTC 部署需要 Azure Load Balancer。

提示

即使 FCI 中定義 DNN,叢集 MSDTC 還是需要 Azure Load Balancer。

FileStream

雖然 FCI 中的資料庫支援 FileStream,但不支援使用檔案系統 API 搭配 DNN 來存取 FileStream 或 FileTable。

連結的伺服器

支援使用具有 FCI DNN 的連結伺服器。 請直接使用 DNN 來設定連結的伺服器,或使用網路別名將 VNN 對應至 DNN。

例如,若要為具名執行個體 insta1 建立具有 DNN DNS 名稱 dnnlsnr 的連結伺服器,請使用下列 Transact-SQL (T-SQL) 命令:

USE [master]   
GO   

EXEC master.dbo.sp_addlinkedserver    
    @server = N'dnnlsnr\inst1',    
    @srvproduct=N'SQL Server' ;   
GO 

或者,您也可以改用虛擬網路名稱 (VNN) 來建立連結的伺服器,但需要定義網路別名將 VNN 對應至 DNN。

例如,已知執行個體名稱 insta1、VNN 名稱 vnnname 和 DNN 名稱 dnnlsnr,請使用下列 Transact-SQL (T-SQL) 命令,以 VNN 建立連結的伺服器:

USE [master]
GO   

EXEC master.dbo.sp_addlinkedserver   
    @server = N'vnnname\inst1',    
    @srvproduct=N'SQL Server' ;   
GO 

然後,建立網路別名將 vnnname\insta1 對應至 dnnlsnr\insta1

常見問題集

  • 哪個 SQL Server 版本支援 DNN?

    SQL Server 2019 CU2 及更新版本。

  • 使用 DNN 時預期的容錯移轉時間多久?

    針對 DNN,容錯移轉時間剛好是 FCI 容錯移轉時間,不加任何時間 (例如,使用 Azure Load Balancer 時的探查時間)。

  • SQL 用戶端是否有任何版本需求,才能支援 DNN 搭配 OLEDB 和 ODBC?

    對於 DNN,我們建議 MultiSubnetFailover=True 連接字串支援。 自 SQL Server 2012 (11.x) 起提供此支援。

  • SQL Server 設定是否需要任何變更,我才能使用 DNN?

    SQL Server 不需要任何設定變更即可使用 DNN,但某些 SQL Server 功能可能需要更多考量。

  • DNN 是否支援多重子網路叢集?

    是的。 叢集將 DNS 中的 DNN 與叢集上所有節點的 IP 位址繫結,與子網路無關。 SQL 用戶端會嘗試 DNS 名稱的所有 IP 位址,與子網路無關。

後續步驟

若要深入了解,請參閱: