使用資料庫異地複寫進行多租用戶 SaaS 應用程式的災害復原

適用於:Azure SQL Database

本教學課程中,您可探索以每個租用戶一個資料庫模型實作的多租用戶 SaaS 應用程式的完整災害復原案例。 要保護應用程式免於中斷,您可以使用異地複寫,為替代恢復區域中的目錄和租用戶資料庫建立複本。 如果發生中斷,您可以快速容錯移轉至這些複本,以繼續正常的業務營運。 在容錯移轉時,原始區域中的資料庫會變成恢復區域中資料庫的次要複本。 一旦這些復本重新上線,它們就會自動掌握恢復區域中資料庫的狀態。 中斷解決之後,您可以容錯回復到原始生產區域中的資料庫。

本教學課程會探索容錯移轉和容錯回復工作流程。 您將了解如何:

  • 將資料庫和彈性集區組態資訊同步至租用戶目錄
  • 在替代區域中設定復原環境,其中包括應用程式、伺服器和集區
  • 使用異地複寫將目錄和租用戶資料庫複寫至恢復區域
  • 將應用程式和目錄和租用戶資料庫容錯移轉至恢復區域
  • 稍後,在中斷解決後,將應用程式、目錄和租用戶資料庫容錯移轉回原始區域
  • 在容錯移轉每個租用戶資料庫時更新目錄,以追蹤每個租用戶資料庫的主要位置
  • 確定應用程式與主要租用戶資料庫一律共置在相同的 Azure 區域中,以減少延遲

在開始本教學課程之前,請確定滿足下列必要條件:

異地複寫復原模式簡介

Recovery Architecture

災害復原 (DR) 是許多應用程式的重要考量,無論是基於合規性原因還是商務持續性原因。 如果有長時間的服務中斷,則完善的 DR 方案可將業務中斷降至最低。 使用異地複寫可提供最低的 RPO 和 RTO,方法是在恢復區域中維護可短時間內進行容錯移轉的資料庫複本。

基於異地複寫的 DR 計劃包含三個不同的部分:

  • 設定 - 復原環境的建立和維護
  • 復原 - 如果發生中斷,應用程式與資料庫容錯移轉至復原環境,
  • 回傳 - 應用程式解析後,應用程式與資料庫容錯移轉回原始區域

所有組件都必須經過仔細考慮,特別是在大規模運作時。 整體來說,計劃必須完成數個目標:

  • 設定
    • 在恢復區域中建立和維護鏡映影像環境。 建立彈性集區,並複寫此恢復環境中的任何資料庫會保留恢復區域中的容量。 維護此環境包括在佈建新的租用戶資料庫時進行複寫。
  • 復原
    • 使用縮小的恢復環境將日常成本降到最低時,必須擴大集區和資料庫,才能在恢復區域中取得完整的作業容量
    • 儘快在恢復區域中啟用新的租用戶佈建
    • 最佳化以依優先順序還原租用戶
    • 藉由在實際的情況下平行執行步驟,實現最佳化以儘快讓租用戶上線
    • 可從失敗復原、可重新啟動和等冪性
    • 如果原始區域重新上線,可以取消中途的處理序。
  • 回傳
    • 將資料庫從恢復區域容錯移轉至原始區域中的複本,對租用戶的影響最小:每個租用戶不會遺失資料,並且離線期間最短。

本教學課程使用 Azure SQL 資料庫和 Azure 平台的功能來應對這些挑戰:

  • Azure Resource Manager 範本,用以儘快保留所有必要的容量。 Azure Resource Manager 範本可用來佈建恢復區域中生產伺服器和彈性集區的鏡映影像。
  • 異地複寫,為所有資料庫建立異步複寫的唯讀次要資料庫。 在中斷期間,您可以容錯移轉至恢復區域中的複本。 中斷解決之後,您會容錯回復到原始區域中的資料庫,且不會遺失資料。
  • 以租用戶優先順序傳送的異步容錯移轉作業,以將大量資料庫的容錯移轉時間降到最低。
  • 分區管理復原功能,用於在復原和回傳期間維護目錄中的資料庫位置項目。 這些功能可讓應用程式連線到租用戶資料庫,而不論位置為何,而無需重新設定應用程式。
  • SQL Server DNS 別名,無論應用程式運作所在的區域為何,都能順暢佈建新的租用戶。 DNS 別名還用於允許目錄同步處理程式連線到使用中目錄,而不論其位置為何。

取得災害復原指令碼

重要

如同所有 Wingtip Tickets 管理指令碼,DR 指令碼都是範例品質,不會用於生產環境。

可在 Wingtip Tickets SaaS Database per Tenant GitHub 存放庫中使用本教學課程中使用的復原指令碼和 Wingtip 應用程式原始程式碼。 關於下載和解除封鎖 Wingtip Tickets 管理指令碼的步驟,請參閱一般指引

教學課程概觀

在本教學課程中,您可以先使用異地複寫,在不同的區域中建立 Wingtip Tickets 應用程式的複本及其資料庫。 然後,您可以容錯移轉至此區域,以模擬從中斷中復原。 完成時,應用程式會在恢復區域完全地正常運作。

稍後,在個別的回傳步驟中,您可以將恢復區域中的目錄和租用戶資料庫容錯移轉至原始區域。 應用程式與資料庫會在整個回傳期間維持可用狀態。 完成時,應用程式會在原始區域完全地正常運作。

注意

應用程式會復原到部署應用程式之區域的配對區域。 如需詳細資訊,請參閱 Azure 配對區域

檢閱應用程式的良好狀態

開始恢復程序之前,請先檢閱應用程式的標準良好狀態。

  1. 在您的網頁瀏覽器中,開啟 Wingtip Tickets 事件中樞 (http://events.wingtip-dpt.<user>.trafficmanager.net,以部署的使用者值取代 <user>)。

    • 捲動至頁面底部,並注意頁尾中的目錄伺服器名稱和位置。 位置是您部署應用程式的區域。 提示:將滑鼠停留在位置上以放大顯示。Events hub healthy state in original region
  2. 按下 Contoso Concert Hall 租用戶,然後開啟其活動頁面。

    • 在頁尾中,請注意租用戶伺服器名稱。 位置將與目錄伺服器的位置相同。
  3. Azure 入口網站中,開啟您部署應用程式的資源群組

    • 注意部署伺服器的區域。

將租用戶組態同步至目錄

在這項工作中,您可以啟動處理序,將伺服器、彈性集區和資料庫組態同步至租用戶目錄。 此處理充會將此資訊保持在目錄中的最新狀態。 此處理序適用於作用中的目錄,無論是在原始區域還是恢復區域中。 組態資訊會當做復原處理序的一部分使用,以確保復原環境與原始環境一致,然後在回傳期間稍後確保原始區域與復原環境中所做的任何變更保持一致。 目錄也用來追蹤租用戶資源的復原狀態

重要

為了簡單起見,同步處理序和其他長時間執行的復原和回傳處理序會在這些教學課程中實作,作為在您的用戶端使用者登入下執行的本機 PowerShell 作業或工作階段。 您登入時發出的驗證令牌會在數小時後到期,然後作業將會失敗。 在生產案例中,長時間執行的程序應該實作為某種可靠的 Azure 服務,在服務主體下執行。 請參閱使用 Azure PowerShell 建立具有證書的服務主體

  1. PowerShell ISE 中,開啟 ...\Learning Modules\UserConfig.psm1 檔案。 以部署應用程式時所使用的值取代第 10 行和第 11 行上的 <resourcegroup><user>。 儲存檔案!

  2. PowerShell ISE 中,開啟 .....\Learning Modules\Business Continuity and Disaster Recovery\DR-FailoverToReplica\Demo-FailoverToReplica.ps1 指令碼並設定:

    • $DemoScenario = 1,開始將租用戶伺服器和集區組態資訊同步處理到目錄中的背景工作
  3. F5 以執行同步指令碼。 隨即開啟新的 PowerShell 工作階段,以同步處理租用戶資源的組態。 Screenshot that shows the new PowerShell session that is opened to sync the configuration of tenant resources.

讓 PowerShell 視窗在背景中執行並繼續教學課程的其餘部分。

注意

同步處理序會透過 DNS 別名連線到目錄。 此別名會在還原和回傳期間修改,以指向作用中的目錄。 同步處理序會讓目錄保持在最新狀態,並在恢復區域中進行任何資料庫或集區設定變更。 在回傳期間,這些變更會套用至原始區域中的對等資源。

在恢復區域中建立次要資料庫複本

在這項工作中,您可以啟動一個處理序,以部署重複的應用程式執行個體,並將目錄和所有租用戶資料庫複寫至恢復區域。

注意

本教學課程會將異地複寫保護新增至 Wingtip Tickets 範例應用程式。 在使用異地複寫的應用程序生產案例中,每個租用戶都會從一開始就佈建異地複寫的資料庫。 請參閱使用 Azure SQL 資料庫設計高可用性服務

  1. PowerShell ISE 中,開啟 .....\Learning Modules\Business Continuity and Disaster Recovery\DR-FailoverToReplica\Demo-FailoverToReplica.ps1 指令碼並設定下列值:

    • $DemoScenario = 2,建立鏡映影像復原環境,並複寫目錄和租用戶資料庫
  2. F5 以執行指令碼。 隨即開啟新的 PowerShell 工作階段以建立複本。 Sync process

檢閱一般應用程式狀態

此時,應用程式會在原始區域中正常執行,並且現在受到異地複寫的保護。 唯讀次要複本,存在於所有資料庫的恢復區域中。

  1. 在 Azure 入口網站,查看您的資源群組,並注意已在恢復區域中建立了帶 -recovery 尾碼的資源群組。

  2. 探索復原資源群組中的資源。

  3. 按一下 tenants1-dpt-<user>-recovery 伺服器上的 Contoso Concert Hall 資料庫。 按一下左側的異地複寫。

    Contoso Concert geo-replication link

在 Azure 區域對應中,記下原始區域中的主要區域與恢復區域中次要區域之間的異地複寫連結。

將應用程式容錯移轉至恢復區域

異地複寫復原處理序概觀

復原指令碼會執行下列工作:

  1. 停用原始區域中 Web 應用程式的流量管理員端點。 如果原始區域在恢復期間上線,停用端點可防止使用者連線到處於無效狀態的應用程式。

  2. 使用恢復區域中目錄資料庫的強制容錯移轉,使其成為主要資料庫,並更新 activecatalog 別名以指向復原目錄伺服器。

  3. 更新新的租用戶別名,以指向恢復區域中租用戶伺服器。 變更此別名可確保在恢復區域中佈建任何新租用戶的資料庫。

  4. 將復原目錄中的所有現有租用戶標示為離線,以避免在容錯移轉之前存取租用戶資料庫。

  5. 更新恢復區域中所有彈性集區和複寫的單一資料庫組態,以鏡像其在原始區域中的組態。 (只有在復原環境中的集區或複寫資料庫在正常作業期間縮小以降低成本時,才需要這項工作。

  6. 在恢復區域中啟用 Web 應用程式的流量管理員端點。 啟用此端點可讓應用程式佈建新的租用戶。 在這個階段,現有的租用戶仍然離線。

  7. 提交批次要求,以強制依優先順序容錯移轉資料庫。

    • 系統會組織批次,以便跨所有集區平行容錯移轉資料庫。
    • 容錯移轉要求會使用異步操作提交,以便快速提交,而且可以同時處理多個要求。

    注意

    在中斷案例中,原始區域中的主要資料庫已離線。 強制容錯移轉次要複本會中斷與主要資料庫的連線,而不需要嘗試套用任何剩餘的佇列交易。 在類似本教學課程的 DR 演練案例中,如果在容錯移轉時有任何更新活動,可能會遺失一些資料。 稍後,在回傳期間,當您將恢復區域中的資料庫容錯移轉回原始區域時,會使用一般容錯移轉來確保不會遺失資料。

  8. 監視服務,以確定資料庫何時容錯移轉。 一旦租用戶資料庫容錯移轉之後,它會更新目錄以記錄租用戶資料庫的復原狀態,並將租用戶標示為上線。

    • 租用戶資料庫在目錄中標示為上線時,應用程式就可以立即存取租用戶資料庫。
    • 租用戶資料庫中的 rowversion 值總和會儲存在目錄中。 此值可作為指紋,讓回傳流程判斷資料庫是否已在恢復區域中更新。

執行指令碼以容錯移轉至恢復區域

現在假設應用程式部署在的區域發生中斷,並執行復原指令碼:

  1. PowerShell ISE 中,開啟 .....\Learning Modules\Business Continuity and Disaster Recovery\DR-FailoverToReplica\Demo-FailoverToReplica.ps1 指令碼並設定下列值:

    • $DemoScenario = 3,透過容錯移轉至複本,將應用程式復原到恢復區域
  2. F5 以執行指令碼。

    • 指令碼會在新的 PowerShell 視窗中開啟,然後啟動一系列平行執行的 PowerShell 作業。 這些作業會將租用戶資料庫容錯移轉至恢復區域。
    • 恢復區域是與您部署應用程式的 Azure 區域相關聯的配對區域。 如需詳細資訊,請參閱 Azure 配對區域
  3. 在 PowerShell 視窗中監視恢復程序的狀態。 failover process

注意

若要探索復原作業的程序代碼,請檢閱 ...\Learning Modules\Business Continuity and Disaster Recovery\DR-FailoverToReplica\RecoveryJobs 資料夾中的 PowerShell 指令碼。

在恢復期間檢閱應用程式狀態

在「流量管理員」中停用應用程式端點時,應用程式無法使用。 將目錄容錯移轉至恢復區域,且所有租用戶標示為離線之後,應用程式將重新上線。 雖然應用程式可供使用,但每個租用戶會在事件中樞顯示為離線,直到其資料庫容錯移轉為止。 請務必設計應用程式來處理離線租用戶資料庫。

  1. 在目錄資料庫復原之後,請在網頁瀏覽器中重新整理 Wingtip Tickets 事件中樞。
    • 請注意,在頁尾中,目錄伺服器名稱現在具有 -recovery 尾碼,且位於恢復區域中。

    • 請注意,尚未還原的租用戶會標示為離線,而且無法選取。

      注意

      由於只有少數要復原的資料庫,您可能無法在復原完成之前重新整理瀏覽器,因此可能看不到租戶離線時的情況。

      Events hub offline

    • 如果您直接開啟離線租用戶的事件頁面,頁面會顯示「租用戶離線」通知。 例如,如果 Contoso Concert Hall 離線,請嘗試開啟 http://events.wingtip-dpt.<user>.trafficmanager.net/contosoconcerthall Contoso Offline page

在恢復區域中佈建新的租用戶

即使在容錯移轉所有現有租用戶資料庫之前,您也可以在恢復區域中佈建新的租用戶。

  1. PowerShell ISE 中,開啟 ...\Learning Modules\Business Continuity and Disaster Recovery\DR-FailoverToReplica\Demo-FailoverToReplica.ps1 指令碼並設定下列屬性:

    • $DemoScenario = 4:在恢復區域中佈建新的租用戶
  2. F5 以執行指令碼並佈建新的租用戶。

  3. Hawthorn Hall 事件頁面將在完成時於瀏覽器中開啟。 請注意,Hawthorn Hall 資料庫會佈建在恢復區域中的頁尾。 Hawthorn Hall Events Page

  4. 在瀏覽器中,重新整理 Wingtip Tickets 事件中樞頁面,以查看包含的 Hawthorn Hall。

    • 如果您佈建 Hawthorn Hall 而不等待其他租用戶還原,其他租用戶可能仍然離線。

檢閱應用程式的復原狀態

當恢復流程完成時,應用程式和所有租用戶都會在恢復區域中完全正常運作。

  1. 一旦 PowerShell 主控台視窗中的顯示指出所有租用戶都已復原,請重新整理事件中樞。 租用戶將全都顯示為上線,包括新的租用戶 Hawthorn Hall。

    recovered and new tenants in the events hub

  2. Azure 入口網站中,開啟資源群組的清單。

    • 請注意您部署的資源群組,以及帶有 -recovery 尾碼的恢復資源群組。 恢復資源群組包含恢復程序期間建立的所有資源,以及中斷期間建立的新資源。
  3. 開啟恢復資源群組,並注意下列項目:

    • 目錄和 tenants1 伺服器的復原版本,尾碼為 -recovery。 這些伺服器上的還原目錄和租用戶資料庫全都有原始區域中所使用的名稱。

    • tenants2-dpt-<user>-recovery SQL Server。 此伺服器用於在中斷期間佈建新的租用戶。

    • 名為 events-wingtip-dpt-<recoveryregion>-<user> 的應用程式服務,這是事件應用程式的復原執行個體。

      Azure recovery resources

  4. 開啟 tenants2-dpt-<user>-recovery SQL server。 請注意,它包含資料庫 hawthornhall 和彈性集區 Pool1hawthornhall 資料庫會設定為 Pool1 彈性集區中的彈性資料庫。

  5. 瀏覽回資源群組,並按一下 tenants1-dpt-<user>-recovery 伺服器上的 Contoso Concert Hall 資料庫。 按一下左側的異地複寫。

    Contoso database after failover

變更租用戶資料

在這項工作中,您會更新其中一個租用戶資料庫。

  1. 在您的瀏覽器中,找到 Contoso Concert Hall 的事件清單,並記下最後一個事件名稱。
  2. PowerShell ISE 中,開啟 ...\Learning Modules\Business Continuity and Disaster Recovery\DR-FailoverToReplica\Demo-FailoverToReplica.ps1 指令碼並設定下列值:
    • $DemoScenario = 5 從恢復區域中的租用戶刪除事件
  3. 要執行指令碼,請按 F5
  4. 重新整理 Contoso Concert Hall 事件頁面 (http://events.wingtip-dpt.<user>.trafficmanager.net/contosoconcerthall - 以部署的使用者值替代<使用者>),並注意最後一個事件已刪除。

將應用程式回傳至其原始生產區域

此工作會將應用程式回傳至其原始區域。 在實際案例中,您會在中斷解決時起始回傳。

回傳程序概觀

Repatriation Architecture

回傳處理序:

  1. 取消任何未完成或是進行中的資料庫還原要求。
  2. 更新新的租用戶別名,以指向原始區域中租用戶伺服器。 變更此別名可確保現在將在原始區域中佈建任何新租用戶的資料庫。
  3. 將任何已變更的租用戶資料植入原始區域
  4. 依優先級容錯移轉租用戶資料庫。

容錯移轉可有效地將資料庫移至原始區域。 當資料庫容錯移轉時,會卸除所有開啟的連線,並且資料庫將在幾秒鐘內不可用。 應用程式應該以重試邏輯撰寫,以確保其再次連線。 雖然通常不會注意到此短暫的中斷連線,但您可以選擇將資料庫在上班時間之外回傳。

執行回傳指令碼

假設中斷已解決,並執行回傳指令碼。

  1. PowerShell ISE 中,開啟 ...\Learning Modules\Business Continuity and Disaster Recovery\DR-FailoverToReplica\Demo-FailoverToReplica.ps1 指令碼。

  2. 確認目錄同步處理序仍在其 PowerShell 執行個體中執行。 如有必要,可藉由下列設定重新啟動該程序:

    • $DemoScenario = 1,開始將租用戶伺服器、集區和資料庫設定資訊同步處理到目錄中
    • F5 以執行指令碼。
  3. 然後,若要啟動回傳程序,請設定:

    • $DemoScenario = 6,將應用程式回傳至其原始區域
    • 要在新 PowerShell 視窗中執行復原指令碼,請選取 F5。 回傳將需要幾分鐘的時間,而且可以在 PowerShell 視窗中監視。 Repatriation process
  4. 執行指令碼時,請重新整理事件中樞頁面 (http://events.wingtip-dpt.<user>.trafficmanager.net)

    • 請注意,所有租用戶都已上線且可在整個程序中存取。
  5. 回傳完成後,請重新整理 [事件] 中樞,然後開啟 Hawthorn Hall 的事件頁面。 請注意,此資料庫已回傳至原始區域。 Events hub repatriated

設計應用程式以確保應用程式與資料庫在相同位置

應用程式的設計目的是一律從與租用戶資料庫相同區域中的執行個體連線。 此設計可減少應用程式與資料庫之間的延遲。 此最佳化假設應用程式與資料庫的互動比使用者與應用程式的互動交換更多訊息。

在回傳期間,租用戶資料庫有時可能會分散到復原和原始區域。 針對每個資料庫,應用程式會藉由對租用戶伺服器名稱執行 DNS 查閱,來查詢資料庫所在的區域。 在 SQL Database 中,伺服器名稱是別名。 使用別名的伺服器名稱包含區域名稱。 如果應用程式不在與資料庫相同的區域中,則會重新導向至與伺服器位於相同區域中的執行個體。 重新導向至與資料庫相同區域中的執行個體,可將應用程式與資料庫之間的延遲降到最低。

下一步

在本教學課程中,您已了解如何:

  • 將資料庫和彈性集區組態資訊同步至租用戶目錄
  • 在替代區域中設定復原環境,其中包括應用程式、伺服器和集區
  • 使用異地複寫將目錄和租用戶資料庫複寫至復原區域
  • 將應用程式和目錄和租用戶資料庫容錯移轉至復原區域
  • 在中斷解決後,將應用程式、目錄和租用戶資料庫容錯回復至原始區域

您可以在《商務持續性概觀》文件中深入瞭解 Azure SQL 資料庫提供的技術,以啟用商務持續性。

其他資源