共用方式為


使用SQL Server Always On可用性群組的高可用性 - BizTalk Server

使用 AlwaysOn 可用性群組SQL Server設定高可用性。

提示

使用可用性群組 LAB 設定 BizTalk Server 2016提供 Microsoft 現場工程師所撰寫的逐步指南。 它是以實驗室環境為基礎,並包含一些觀察。 請查看它。

重要

  • 從 SQL Server 2016 和更新版本開始,BizTalk Server支援Always On可用性群組。 如果您使用先前的SQL Server版本,本文不適用於您。
  • BizTalk Server支援同步認可模式;不支援非同步認可模式。 針對災害復原,建議您設定備份BizTalk Server作業,並使用記錄傳送。 如需特定詳細資料,請參閱備份和還原BizTalk Server資料庫

可用性模式會詳細說明Always On可用性群組的認可選項。

背景和歷程記錄

BizTalk Server高度依賴資料持續性SQL Server。 BizTalk Server中的其他元件和主機在整合不同的商務應用程式時具有特定角色,例如接收、處理或路由訊息。 資料庫電腦會擷取此工作,並將它保存到磁片。

BizTalk 會使用SQL Server容錯移轉叢集和記錄傳送,為其資料庫提供高可用性、備份和還原和災害復原。 在 Azure IaaS (Azure 虛擬機器) 之前,BizTalk (Windows 和 SQL) 不支援容錯移轉叢集實例,因為 SQL 和 MSDTC 叢集不需要此磁片。 因此,BizTalk 在使用 Azure VM 時沒有 HA 解決方案。 由於 Azure 共用磁片現已可供使用,因此可以在 Azure VM 中叢集 SQL 和 MSDTC。 使用 Azure 共用磁片的 SQL 容錯移轉叢集實例是最高可用性的解決方案。

從 SQL Server 2016 開始,SQL Server AlwaysOn 可用性群組支援內部部署和使用 Azure VM 的 MSDTC。 因此,BizTalk 資料庫支援內部部署或 Azure IaaS 案例中的 SQL Server 2016 (或更新版本) AlwaysOn 功能。 由於在容錯移轉期間使用儲存空間直接存取 (S2D) 和額外時間時,同步磁片同步處理會有額外的額外負荷,因此相較于 SQL 容錯移轉叢集實例,它較不具高可用性。

SQL Server 2016 AlwaysOn 可用性群組

部署 AlwaysOn 可用性群組需要 Windows Server 容錯移轉叢集 (WSFC) 叢集。 給定可用性群組的每個可用性複本都必須位在相同 WSFC 叢集的不同節點上。 對於您建立的每個可用性群組,系統會建立一個 WSFC 資源群組。 WSFC 叢集會監視此資源群組,以評估主要複本的健康情況。

下圖顯示可用性群組,其中包含一個主要複本和四個次要複本。

SQL AlwaysOn 可用性群組中具有BizTalk Server的主要複本

用戶端可以使用可用性群組接聽程式連線到給定可用性群組的主要複本。 可用性群組接聽程式提供一組連結至指定可用性群組的資源,以將用戶端連線導向到適當的可用性複本。

重要

SQL Server 2016 在 Windows Server 2016 和 Windows Server 2012 R2 上使用 AlwaysOn 可用性群組 (AG) 支援 MSDTC。 Windows Server 2012 R2需要安裝3090973 Windows Hotfix。 Windows Server 2016需要啟用RemoteAccessEnabled 登錄機碼

SQL Server不支援在 2016 年之前的任何版本使用 AlwaysOn AG 的 MSDTC。 SQL Server 2016 SP2 改善 MSDTC 交易處理,因此建議使用 SP2 或更新版本。

使用 AlwaysOn 可用性群組為 BizTalk 資料庫提供高可用性

在BizTalk Server的基本組態中,至少會建立 9 個資料庫,包括規則和 BAM 資料庫。

在SQL Server 2016 SP2 之前,可用性群組在相同 SQL 實例上的資料庫之間不支援 MSDTC,因此 BizTalk 資料庫必須分散到至少 4 個 SQL 實例。 基於這項限制,建議使用 SQL Server 2016 SP2 (或更新版本) ,並BizTalk Server 2016 CU5 (或更新版本) ,讓所有 BizTalk 資料庫都可以使用相同的SQL Server實例。 基於效能考慮,您仍可能會考慮使用多個 SQL 實例, (例如在不同的 SQL 實例上擁有 MessageBox) 。

在向外延展的 MessageBox 案例中, (具有多個 MessageBox) 的組態,必須新增一個以上的 MessageBox 資料庫,而且每個 MessageBox 資料庫都必須新增至可用性群組。

BizTalk Server也取決於 BAM 分析和封存的 SQL Server Analysis Services 和 SQL Server Integration Services。 SQL Server不提供 Azure IaaS 中 Integration Services 或 Analysis Services 的高可用性解決方案。 因此,建議針對 BAMArchive 和 BAMAnalysis Analysis Services 資料庫使用另一個獨立SQL Server實例。 針對內部部署安裝,SQL 容錯移轉叢集實例可用於設定高可用性組態。

針對 BizTalk Server 2016,下圖顯示此設定,建議在可用性群組中的 BizTalk 資料庫 (如前所述,從 SQL 2016 SP2 和 BizTalk 2016 CU5 開始,不再需要 4 個 SQL 實例) :

建議SQL Server一律在 BizTalk Server 2016 和舊版上設定

從 BizTalk Server 2020 開始,使用 SSIS 目錄支援 BAM DTS 套件的高可用性。 將 SSISDB 資料庫新增至與BizTalk Server資料庫相同的可用性群組。 下圖顯示此組態,建議使用可用性群組中的 BizTalk 資料庫 (,) 不再需要 4 個 SQL 實例:

建議SQL Server一律在 BizTalk Server 2020 和更新版本上設定

除了SQL Server資料庫之外,BizTalk Server組態也會建立SQL Server安全性登入和 SQL Agent 作業。 AlwaysOn 可用性群組只提供管理可用性群組內部資料庫的能力。 在所有可用性複本上,必須手動建立BizTalk Server登入和 SQL Agent 作業。

下列SQL Server安全性登入清單與BizTalk Server相關聯。 您可能已為BizTalk Server應用程式建立其他登入。 如果是,您必須在裝載 BizTalk 資料庫複本的每個實例上複寫它們SQL Server。

  1. BizTalk 應用程式使用者 (一或多個對應至每個內部主機)
  2. BizTalk 隔離主機使用者 (一或多個對應至每個隔離主機)
  3. BizTalk Server 系統管理員
  4. BizTalk Server B2B Operators
  5. BizTalk Server 操作員
  6. SSO 系統管理員
  7. BAM 警示使用者
  8. BAM 管理 Web 服務使用者
  9. 規則引擎更新服務帳戶

如果您已建立其他主機,或稍後會建立其他主機,將會在此程式中建立新的 SQL 登入。 您必須確定在對應的複本上手動建立這些 SQL 登入。

下列SQL Server Agent作業與BizTalk Server相關聯。 每個伺服器上安裝的作業會根據安裝及設定的功能而有所不同。 這些作業大部分都是在BizTalk Server組態期間建立。 設定記錄傳送時會建立數個。 這些作業必須複寫在其對應 BizTalk 資料庫的每個實例上SQL Server裝載複本。 這必須手動執行。

  • BizTalkMgmtDb 作業:
    • 備份 BizTalk Server (BizTalkMgmtDb)
    • CleanupBTFExpiredEntriesJob_BizTalkMgmtDb
    • 監控 BizTalk Server (BizTalkMgmtDb)
  • BizTalkMsgBoxDb 作業:
    • MessageBox_DeadProcesses_Cleanup_BizTalkMsgBoxDb
    • MessageBox_Message_Cleanup_BizTalkMsgBoxDb
    • MessageBox_Message_ManageRefCountLog_BizTalkMsgBoxDb
    • MessageBox_Parts_Cleanup_BizTalkMsgBoxDb
    • MessageBox_UpdateStats_BizTalkMsgBoxDb
    • Operations_OperateOnInstances_OnMaster_BizTalkMsgBoxDb
    • PurgeSubscriptionsJob_BizTalkMsgBoxDb
    • TrackedMessages_Copy_BizTalkMsgBoxDb
  • 其他 msgbox 上的作業
  • BizTalkDTADb 作業:
    • DTA 清除與封存 (BizTalkDTADb)
  • BizTalkRulesEngineDb 作業:
    • Rules_Database_Cleanup_BizTalkRuleEngineDb
  • BAMAlertsApplication 作業:
    • 0 或更多 DelAlertHistJob

不同于 SQL 容錯移轉叢集實例,在可用性群組中,所有複本都是使用中、執行中且可用的。 當每個複本上的 SQL Agent 作業重複進行容錯移轉時,會針對對應的複本執行,不論它目前是主要角色還是次要角色。 若要確定這些作業只會在目前的主要複本上執行,每個作業中的每個步驟都必須包含在 IF 區塊內,如下所示:

IF (sys.fn_hadr_is_primary_replica(‘dbname’) = 1)  
BEGIN  
…  
END

將 取代 ‘dbname’ 為設定要執行作業的對應資料庫名稱。 下列範例顯示 BizTalkMsgBoxDb 上TrackedMessages_Copy_BizTalkMsgBoxDb這項變更:

使用 BizTalk Server 變更 AlwaysOn 可用性群組中的 SQL Agent 作業名稱

設定可用性群組時,設定 BizTalk

  1. 檢查您的 OS 需求:
  2. 建立必要的可用性群組。 請確定已使用 [每個資料庫 DTC 支援 ] 選項建立可用性群組。
  3. 設定BizTalk Server並指定 SQL Server 名稱時,請使用可用性群組的接聽程式名稱,而不是實際的電腦名稱稱。 這會在目前的主要複本上建立 BizTalk 資料庫、登入和 SQL Agent 作業。
  4. 停止 BizTalk 處理 (主機實例、SSO 服務、IIS、規則引擎更新服務、BAMAlerts 服務等) ,並停止 SQL Agent 作業。
  5. 現在,將 BizTalk 資料庫新增至個別的可用性群組。
  6. 將 SQL Agent 作業步驟本文封入 IF 先前所述的區塊 () ,以確保只有在目標是主要複本時才會執行。
  7. 編寫登入和 SQL Agent 作業的腳本,以在對應的複本上複寫它們。
  8. 在裝載次要複本的對應 SQL 實例上複寫 SQL DBMail 設定檔和 BAM 警示的帳戶。
  9. 如果您要新增其他訊息方塊資料庫或稍後部署新的 BAM 活動/檢視,則會針對目前主要複本上的新訊息方塊資料庫或 BAM 警示資料庫建立新的 SQL 作業。 請務必在主要複本上加以編輯,然後在對應的次要複本上手動建立它們。
  10. 從 BizTalk Server 2020 和更新版本開始,BAM DTS 套件會部署到 SSIS 目錄。 將 SSISDB 資料庫新增至與 BizTalk 資料庫相同的可用性群組。 如需詳細資訊,請參閱 SSIS 目錄的 AlwaysON

您也可以使用裝載主要複本的 SQL 實例來完成此設定。 在此情況下,在 BizTalk 設定之後,請在上述步驟之後,在 BizTalk 機器上執行 UpdateDatabase.vbsUpdateRegistry.vbs 腳本。 下一節會更詳細地討論這一點。

將現有的 BizTalk 資料庫移至可用性群組

  1. 檢查您的 OS 需求:

  2. 建立必要的可用性群組。 請確定已使用 [每個資料庫 DTC 支援 ] 選項建立可用性群組。

  3. 停止 BizTalk 處理和 SQL Agent 作業。

  4. 執行所有 BizTalk 資料庫的完整備份。

  5. 在可用性群組中目前處於主要角色的 SQL 實例上還原 BizTalk 資料庫。

  6. 在可用性群組中目前處於主要角色的對應 SQL 實例上編寫登入和 SQL Agent 作業的腳本。

  7. UpdateDatabase.vbs使用下列步驟在 BizTalk 機器上執行 和 UpdateRegistry.vbs 腳本。 在輸入更新資訊 xml 中,輸入可用性群組接聽程式作為新的伺服器名稱。

    1. 停止BizTalk Server上的所有 BizTalk 服務和 Enterprise SSO 服務。 停止SQL Server上的 SQL Agent 服務。

    2. 在BizTalk Server上,編輯下列資料夾中的 SampleUpdateInfo.xml:

      32 位電腦: %SystemRoot%\Program Files\Microsoft BizTalk Server 20xx\Schema\Restore

      64 位電腦: %SystemRoot%\Program Files (x86)\Microsoft BizTalk Server 20xx\Bins32\Schema\Restore

      1. 將 「SourceServer」 取代為來源伺服器名稱, (舊SQL Server裝載舊資料庫) 。
      2. 將 「DestinationServer」 取代為目的地伺服器的名稱,這應該是可用性群組接聽程式名稱。
      3. 如果您有 BAMAnalysis、BAM 資料庫或 RuleEngineDB,請取消批註適當的區段。
    3. 開啟命令提示字元,然後移至:

      32 位電腦: %SystemRoot%\Program Files\Microsoft BizTalk Server 20xx\Schema\Restore

      64 位電腦: %SystemRoot%\Program Files (x86)\Microsoft BizTalk Server 20xx\Bins32\Schema\Restore

      在命令提示字元中,執行:
      cscript UpdateDatabase.vbs SampleUpdateInfo.xml

      只在 BizTalk 群組中的一部伺服器上執行 UpdateDatabase.vbs。

    4. 將編輯的 SampleUpdateInfo.xml 檔案複製到此 BizTalk 群組中每部BizTalk Server電腦上的下列資料夾:

      32 位電腦: %SystemRoot%\Program Files\Microsoft BizTalk Server 20xx\Schema\Restore

      64 位電腦: %SystemRoot%\Program Files (x86)\Microsoft BizTalk Server 20xx\Bins32\Schema\Restore

    5. 在BizTalk Server群組中的每個電腦上,開啟命令提示字元,然後移至:

      32 位電腦: %SystemRoot%\Program Files\Microsoft BizTalk Server 20xx\Schema\Restore

      64 位電腦: %SystemRoot%\Program Files (x86)\Microsoft BizTalk Server 20xx\Bins32\Schema\Restore

      在命令提示字元中,執行:
      cscript UpdateRegistry.vbs SampleUpdateInfo.xml

      在 BizTalk 群組中的 每部 伺服器上執行 UpdateRegistry.vbs。

  8. 現在,將資料庫移至其各自的可用性群組。

  9. 複寫裝載 BAMAlerts 資料庫複本之 SQL 實例上的 SQL DBMail 設定檔和 BAM 警示帳戶。

  10. 在 IF 區塊內封住 SQL Agent 作業步驟的主體,以確保只有在目標為主要時才會執行。

  11. 編寫登入和 SQL Agent 作業的腳本,以在對應的複本上複寫它們。 UpdateDatabase 腳本也會更新Operations_OperateOnInstances_OnMaster_BizTalkMsgBoxDb和TrackedMessages_Copy_BizTalkMsgBoxDb作業中的伺服器名稱。 因此,只有在執行 UpdateDatabase 腳本之後,才編寫 SQL Agent 作業的腳本。

規格需求

  • BizTalk Server:
    • BizTalk Server 2020 企業版
    • BizTalk Server 2016 企業版 CU5
  • SQL Server:
    • SQL Server 2019 Enterprise 或 Standard

    • SQL Server 2017 Enterprise 或 Standard

    • SQL Server 2016 Enterprise 或 Standard。

      如需 SQL Server Standard Edition 限制,請參閱本文中的已知限制

  • Windows Server
    • Windows Server 2019
    • Windows Server 2016
    • Windows Server 2012 R2

可用性群組接聽程式設定為非預設埠 (1433)

在BizTalk Server電腦上使用 SQL 別名。

多重子網可用性群組

BizTalk Server不支援 MultiSubnetFailover (=TRUE) 連線選項。

如需將不支援此選項的 SQL 用戶端連線到多子網 SQL 可用性群組時可能發生之問題的詳細資訊,請參閱 SQL 檔。 下列連結將討論其中一些問題:

唯讀路由

唯讀路由是指SQL Server將可用性群組接聽程式的連入連線路由至設定為允許唯讀工作負載的次要複本的能力。

BizTalk 不會針對其資料庫的任何連線使用 Read-Only 路由。 這表示可用性群組中可用性複本上的「可讀取次要」選項不會影響 BizTalk 資料庫連結。

SQL Server容錯移轉期間 BizTalk 主機實例的行為

如果SQL Server可用性群組遇到容錯移轉,可用性群組上的BizTalk Server資料庫暫時無法使用。

SQL Server 容錯移轉期間的內含式主控件執行個體行為

如果BizTalk Server資料庫無法使用,則會回收BizTalk Server主機的進程內實例,直到還原SQL Server的連接為止。 還原SQL Server資料庫的連線之後,檔處理會正常繼續。

SQL Server 容錯移轉期間的外掛式主控件執行個體行為

如果BizTalk Server資料庫無法使用,則BizTalk Server主機的隔離實例會暫停,而類似下列的錯誤會在BizTalk Server應用程式記錄檔中產生:

All receive locations are being temporarily disabled because either the MessageBox or Configuration database is not available. When these databases become available, the receive locations will be automatically enabled.

還原SQL Server資料庫的連線之後,類似下列的資訊訊息會寫入BizTalk Server應用程式記錄檔,然後正常繼續檔處理:

All receive locations are being enabled because both the MessageBox and Configuration databases are back online.

災害復原的記錄傳送

BizTalk Server透過使用資料庫記錄傳送來實作資料庫待命功能。 BizTalk Server記錄傳送會將資料庫及其交易記錄檔的備份和還原自動化,讓待命伺服器在生產資料庫伺服器失敗時繼續處理資料庫。

可用性群組中的次要資料庫不是備份。 使用BizTalk Server記錄傳送作業,繼續備份 BizTalk 資料庫及其交易記錄。 BizTalk 記錄傳送實作的方式可確保一律針對每個資料庫目前的主要複本執行備份。 BizTalk Server記錄傳送作業不接受可用性群組上的備份喜好設定。

如果您要將其他 BizTalk 資料庫新增至 BizTalk 資料庫備份作業,請務必在設定備份時,使用可用性群組接聽程式名稱作為其資料庫伺服器。

參考資料

已知的限制

這些限制適用于BizTalk Server、SQL Server AlwaysOn 可用性群組和 Azure 虛擬機器。 這些限制未來可能無法解決。

  • 登入、SQL Agent 作業、SQL DB 郵件設定檔和帳戶不會在可用性群組內管理。 這需要在作業中手動修改,以確保它們針對主要複本執行。

  • SQL Server Analysis Services和SQL Server Integration Services 不會參與可用性群組。 如果沒有SQL Server這項支援,Azure 虛擬機器中沒有 HA 解決方案。 BizTalk Server的 BAM 功能相依于這些服務。

  • 在 SQL Server 2016 SP2 之前,可用性群組不支援相同 SQL 實例上的資料庫之間的 MSDTC。

    從 SQL Server 2016 SP2BizTalk Server 2016 CU5開始,BizTalk 資料庫可以使用相同的SQL Server實例。

  • BizTalk Server無法使用路由 Read-Only。

  • BizTalk Server未設定 MultiSubnetFailover 連接屬性。

  • 不論可用性群組上的備份喜好設定設定為何,使用記錄傳送的 BizTalk 備份作業一律會以主要複本為目標。

  • SQL Server 2016 Standard 在每個 SQL AlwaysOn AG 中只支援一個單一資料庫。 由於 BizTalk 使用許多資料庫,因此通常建議使用 SQL Server Enterprise 版本。

  • 如果使用 Azure VM,建議您針對 MSDTC 使用專用的固定 TCP/IP 埠。 使用固定 TCP/IP 埠時,您不會限制通常與舊版作業系統搭配使用的 RPC 埠範圍;它有助於簡化防火牆和負載平衡器規則。 若要避免與已知較低的埠發生衝突,請考慮使用較高的固定埠 (,例如 > 20000) 。 設定 DTC 單一端口支援 描述 ServerTcpPort 登錄機碼。 除了 MSDTC 的固定埠之外,也會使用主要 RPC 埠 135。

下一步

規劃容錯