使用異地還原從資料庫備份復原多租用戶 SaaS 應用程式

適用於:Azure SQL Database

本教學課程會探索以每個租用戶一個資料庫模型實作的多租用戶 SaaS 應用程式的完整災害復原案例。 您可以使用異地還原,將目錄和租用戶資料庫從自動維護的異地備援備份復原到替代恢復區域。 中斷解決之後,使用異地複寫將已變更的資料庫回復到其原始區域。

Diagram shows an original and recovery regions, both of which have an app, catalog, original or mirror images of servers and pools, automatic backups to storage, with the recovery region accepting geo-replication of backup and having server and pool for new tenants.

異地還原是 Azure SQL 資料庫成本最低的災害復原解決方案。 不過,從異地備援備份還原可能會導致最多一小時的資料遺失。 視每個資料庫的大小而定,可能需要相當長的時間。

注意

藉由使用異地複寫而不是異地還原,以可能的最低 RPO 和 RTO 來復原應用程式。

本教學課程會探索還原和回復工作流程。 您將學習如何:

  • 將資料庫和彈性集區設定資訊同步至租用戶目錄。
  • 在包含應用程式、伺服器和集區的恢復區域中設定鏡映影像環境。
  • 藉由使用異地還原來復原目錄和租用戶資料庫。
  • 使用異地複寫,在中斷解決之後,回復租用戶目錄和已變更的租用戶資料庫。
  • 在還原 (或回復) 每個資料庫時更新目錄,以追蹤每個租用戶資料庫的作用中拷貝的目前位置。
  • 確定應用程式和租用戶資料庫一律共置於相同的 Azure 區域中,以減少延遲。

開始本教學課程之前,應完成下列必要條件:

異地還原復原模式簡介

災害復原 (DR) 是許多應用程式的重要考量,無論是基於合規性原因還是商務持續性原因。 如果發生長時間的服務中斷,則備妥良好的 DR 方案可將業務中斷最小化。 以異地還原為基礎的 DR 方案必須完成數個目標:

  • 儘快保留所選恢復區域中所有必要的容量,以確保其可以用於還原租用戶資料庫。
  • 建立可反映原始集區和資料庫設定的鏡映影像恢復環境。
  • 如果原始區域重新上線,允許在航程中取消還原程序。
  • 快速啟用租用戶佈建,讓新租用戶上線可以儘快重新啟動。
  • 最佳化為依優先順序還原租用戶。
  • 藉由在可行的情況下平行執行步驟進行最佳化,以盡快讓租用戶上線。
  • 能夠從失敗復原、可重新啟動且等冪。
  • 中斷解決後,將資料庫回復至其原始區域,對租用戶的影響最小化。

注意

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

本教學課程使用 Azure SQL 資料庫和 Azure 平台的功能來解決以下挑戰:

  • Azure Resource Manager 範本,用以儘快保留所有必要的容量。 Azure Resource Manager 範本可用來佈建恢復區域中原始伺服器和彈性集區的鏡映影像。 也會建立個別的伺服器和集區來佈建新的租用戶。
  • 彈性資料庫用戶端程式庫 (EDCL),以建立和維護租用戶資料庫目錄。 擴充目錄包含定期重新整理的集區和資料庫設定資訊。
  • EDCL 的分區管理恢復功能,以在恢復和回復期間維護目錄中的資料庫位置項目。
  • 異地還原,以從自動維護的異地備援備份復原目錄和租用戶資料庫。
  • 以租用戶優先順序傳送的非同步還原作業會依系統排入每個集區的佇列,並以批次方式進行處理,因此集區不會多載。 如有必要,在執行之前或執行期間可以取消這些作業。
  • 異地複寫,以在中斷後將資料庫回復至原始區域。 當您使用異地複寫時,不會遺失資料,而且對租用戶的影響最小。
  • SQL Server DNS 別名,以允許目錄同步程序連線到作用中的目錄,而不論其位置為何。

取得災害復原指令碼

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

重要

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

檢閱應用程式的良好狀態

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

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

    捲動至頁面底部,並注意頁尾中的目錄伺服器名稱和位置。 位置是您部署應用程式的區域。

    提示

    將滑鼠停留在位置上以放大顯示。

    Events hub healthy state in original region

  2. 選取 Contoso Concert Hall 租用戶,然後開啟其事件頁面。

    在頁尾中,注意租用戶的伺服器名稱。 該位置與目錄伺服器的位置相同。

    Contoso Concert Hall original region

  3. Azure 入口網站中,檢閱並開啟您部署應用程式的資源群組。

    注意部署應用程式服務元件和 SQL Database 的資源和區域。

將租用戶設定同步至目錄

在這項工作中,您會開始將伺服器、彈性集區和資料庫的設定同步至租用戶目錄的程序。 此資訊稍後會用來在恢復區域中設定鏡映影像環境。

重要

為了簡單起見,同步處理序和其他長時間執行的恢復和回復程序會在這些範例中實作,做為在您的用戶端使用者登入下執行的本機 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-RestoreFromBackup\Demo-RestoreFromBackup.ps1 指令碼。

    在本教學課程中,您會在此 PowerShell 指令碼中執行每個案例,因此讓此檔案保持開啟。

  3. 設定下列內容:

    $DemoScenario = 1:啟動將租用戶伺服器和集區設定資訊同步至目錄的背景工作。

  4. 若要執行同步指令碼,請選取 F5。

    這項資訊稍後會用來確保恢復會在恢復區域中建立伺服器、集區和資料庫的鏡映影像。

    Sync process

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

注意

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

異地還原恢復程序概觀

異地還原恢復程序會部署應用程式,並將資料庫從備份還原到恢復區域。

恢復程序會執行下列動作:

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

  2. 在恢復區域中佈建恢復目錄伺服器、異地還原目錄資料庫,以及更新 activecatalog 別名以指向還原的目錄伺服器。 變更目錄別名可確保目錄同步程序一律會同步至作用中的目錄。

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

  4. 在恢復區域中佈建應用程式的執行個體,並將其設定為使用該區域中還原的目錄。 為了將延遲保持在最低,範例應用程式一律設計為連線到相同區域中的租用戶資料庫。

  5. 佈建伺服器和彈性集區,新的租用戶會佈建在其中。 建立這些資源可確保佈建新租用戶不會干擾現有租用戶的恢復。

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

  7. 在恢復區域中佈建伺服器和彈性集區,以還原租用戶資料庫。 這些伺服器和集區是原始區域中設定的鏡映影像。 預先佈建集區會保留還原所有資料庫所需的容量。

    區域內的中斷可能會對配對區域中的可用資源造成重大壓力。 如果您依賴異地還原進行 DR,則建議快速保留資源。 如果應用程式在特定區域中恢復非常重要,請考慮異地複寫。

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

  9. 依優先順序提交要求批次以還原資料庫。

    • 系統會組織批次,以便跨所有集區平行還原資料庫。

    • 還原要求會以非同步方式提交,以便快速提交,並排入佇列以在每個集區中執行。

    • 由於還原要求會跨所有集區平行處理,因此最好將重要的租用戶散發到許多集區。

  10. 監視服務,以判斷資料庫何時還原。 租用戶資料庫還原之後,會在目錄中標示為上線,並會記錄租用戶資料庫的 rowversion 總和。

    • 租用戶資料庫在目錄中標示為上線後,應用程式就可以立即存取租用戶資料庫。

    • 租用戶資料庫中的 rowversion 值總和會儲存在目錄中。 此總和可做為指紋,讓回復程序判斷資料庫是否已在恢復區域中更新。

執行恢復指令碼

重要

本教學課程會從異地備援備份還原資料庫。 雖然這些備份通常可在 10 分鐘內獲取,但最多可能需要一小時的時間。 指令碼會暫停,直到備份可用為止。

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

  1. 在 PowerShell ISE 的 ...\Learning Modules\Business Continuity and Disaster Recovery\DR-RestoreFromBackup\Demo-RestoreFromBackup.ps1 指令碼中,設定下列值:

    $DemoScenario = 2:透過從異地備援備份還原,將應用程式復原到恢復區域。

  2. 若要執行指令碼,請選取 F5。

    • 指令碼會在新的 PowerShell 視窗中開啟,然後啟動一組平行執行的 PowerShell 工作。 這些工作會將伺服器、集區和資料庫還原至恢復區域。

    • 恢復區域是與您部署應用程式的 Azure 區域相關聯的配對區域。 如需詳細資訊,請參閱 Azure 配對區域

  3. 在 PowerShell 視窗中監視恢復程序的狀態。

    Screenshot that shows the PowerShell window where you can monitor the status of the recovery process.

注意

若要探索恢復工作的程式碼,請檢閱 ...\Learning Modules\Business Continuity and Disaster Recovery\DR-RestoreFromBackup\RecoveryJobs 資料夾中的 PowerShell 指令碼。

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

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

  • 在目錄資料庫復原之後,但在租用戶重新上線之前,請在網頁瀏覽器中重新整理 Wingtip Tickets 事件中樞。

    • 請注意,在頁尾中,目錄伺服器名稱現在具有 -recovery 尾碼,且位於恢復區域中。

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

      Recovery process

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

      Screenshot that shows an offline events page.

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

即使在租用戶資料庫還原之前,您也可以在恢復區域中佈建新的租用戶。 在恢復區域中佈建的新租用戶資料庫稍後會與復原的資料庫一起回復。

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

    $DemoScenario = 3:在恢復區域中佈建新的租用戶。

  2. 若要執行指令碼,請選取 F5。

  3. 佈建完成時,Hawthorn Hall 事件頁面會在瀏覽器中開啟。

    請注意,Hawthorn Hall 資料庫位於恢復區域中。

    Hawthorn Hall provisioned in the recovery region

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

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

檢閱應用程式的復原狀態

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

  1. 在 PowerShell 主控台視窗中的顯示指出所有租用戶都已復原之後,重新整理事件中樞。

    租用戶全都顯示上線,包括新租用戶 Hawthorn Hall。

    Recovered and new tenants in the events hub

  2. 按一下 [Contoso Concert Hall],隨後開啟其事件頁面。

    在頁尾中,注意資料庫位於恢復區域中的恢復伺服器上。

    Contoso in the recovery region

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

    請注意您部署的資源群組,以及帶有 -recovery 尾碼的恢復資源群組。 恢復資源群組包含恢復程序期間建立的所有資源,以及中斷期間建立的新資源。

  4. 開啟恢復資源群組,並注意下列項目:

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

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

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

      Contoso resources in the recovery region

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

變更租用戶資料

在這項工作中,您會更新其中一個還原的租用戶資料庫。 回復程序會拷貝已變更為原始區域的已還原資料庫。

  1. 在您的瀏覽器中,尋找 Contoso Concert Hall 的事件清單,捲動事件,並注意最後一個事件 Seriously Strauss。

  2. 在 PowerShell ISE 的 ...\Learning Modules\Business Continuity and Disaster Recovery\DR-RestoreFromBackup\Demo-RestoreFromBackup.ps1 指令碼中,設定下列值:

    $DemoScenario = 4:從恢復區域中的租用戶刪除事件。

  3. 若要執行指令碼,請選取 F5 鍵。

  4. 重新整理 Contoso Concert Hall 事件頁面 (http://events.wingtip-dpt.<user>.trafficmanager.net/contosoconcerthall),請注意,其中遺漏了事件 Seriously Strauss。

本教學課程至此,您已復原恢復區域中現正執行的應用程式。 您已在恢復區域中佈建新的租用戶,並修改其中一個已還原租用戶的資料。

注意

範例中的其他教學課程並非為執行處於恢復狀態的應用程式而設計。 如果想要探索其他教學課程,請務必先回復應用程式。

回傳程序概觀

回復程序會在中斷解決之後,將應用程式及其資料庫還原至其原始區域。

Geo-restore repatriation

程序:

  1. 停止任何持續的還原活動,並取消任何未完成或正在進行的資料庫還原要求。

  2. 重新啟用自中斷以來未變更的原始區域租用戶資料庫。 這些資料庫包括尚未復原的資料庫,以及已復原但之後未變更的資料庫。 重新啟用的資料庫與租用戶上次存取的資料庫完全相同。

  3. 在原始區域中佈建新租用戶伺服器和彈性集區的鏡映影像。 完成此動作之後,新的租用戶別名會更新為指向此伺服器。 更新別名會導致新租用戶上線發生在原始區域中,而不是恢復區域。

  4. 使用異地複寫,將目錄從恢復區域移至原始區域。

  5. 更新原始區域中的集區設定,使其與中斷期間恢復區域中所做的變更一致。

  6. 建立必要的伺服器和集區,以裝載在中斷期間建立的任何新資料庫。

  7. 使用異地複寫來回復還原後更新的已還原租用戶資料庫,以及中斷期間佈建的所有新租用戶資料庫。

  8. 清理還原程序期間在恢復區域中建立的資源。

若要限制需要回復的租用戶資料庫數目,請立即完成步驟 1 到 3。

只有當恢復區域中的目錄在中斷期間發生修改時,才會執行步驟 4。 如果建立了新的租用戶,或在恢復區域中有任何資料庫或集區設定變更,則會更新目錄。

務必讓步驟 7 對租用戶造成最少的干擾,且不會遺失任何資料。 為了達成此目標,此程序會使用異地複寫。

在每個資料庫進行異地複寫之前,都會刪除原始區域中的對應資料庫。 恢復區域中的資料庫接著會進行異地複寫,並在原始區域中建立次要複本。 複寫完成後,租用戶會在目錄中標示為離線,這會中斷恢復區域中資料庫的任何連線。 資料庫接著會進行容錯移轉,導致任何擱置的交易都在次要資料庫上處理,因此不會遺失任何資料。

在容錯移轉時,資料庫角色會反轉。 原始區域中的次要資料庫會變成主要讀寫資料庫,而恢復區域中的資料庫會變成唯讀次要資料庫。 目錄中的租用戶項目會更新為參考原始區域中的資料庫,而且租用戶會標示為上線。 此時,資料庫回復已完成。

應用程式應該撰寫重試邏輯,以確保它們會在連線中斷時自動重新連線。 當它們使用目錄來協調重新連線時,它們會連線到原始區域中的已回復資料庫。 雖然通常不會注意到短暫的中斷連線,但您可以選擇在上班時間之外回復資料庫。

回復資料庫之後,就可以刪除恢復區域中的次要資料庫。 原始區域中的資料庫接著會再次依賴異地還原進行 DR 保護。

在步驟 8 中,會刪除恢復區域中的資源,包括恢復伺服器和集區。

執行回傳指令碼

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

如果您已遵循本教學課程,指令碼會立即在原始區域中重新啟用 Fabrikam Jazz Club 和 Dogwood Dojo,因為它們保持不變。 然後,它會回復新租用戶 Hawthorn Hall 和 Contoso Concert Hall,因為它已經過修改。 指令碼也會回復目錄,該目錄在佈建 Hawthorn Hall 時已更新。

  1. 在 PowerShell ISE 的 ...\Learning Modules\Business Continuity and Disaster Recovery\DR-RestoreFromBackup\Demo-RestoreFromBackup.ps1 指令碼中,確認目錄同步程序仍在其 PowerShell 執行個體中執行。 如有必要,可藉由下列設定重新啟動該程序:

    $DemoScenario = 1:開始將租用戶伺服器、集區和資料庫設定資訊同步到目錄中。

    若要執行指令碼,請選取 F5。

  2. 然後,若要啟動回傳程序,請設定:

    $DemoScenario = 5:將應用程式回復到其原始區域。

    若要在新的 PowerShell 視窗中執行恢復指令碼,請選取 F5。 回復需要幾分鐘的時間,而且可以在 PowerShell 視窗中監視。

  3. 執行指令碼時,請重新整理事件中樞頁面 (http://events.wingtip-dpt.<user>.trafficmanager.net)。

    請注意,所有租用戶都已上線且可在整個程序中存取。

  4. 選取 Fabrikam Jazz Club 將其開啟。 如果您未修改此租用戶,在頁尾中您會注意到,伺服器已還原至原始伺服器。

  5. 開啟或重新整理 Contoso Concert Hall 事件頁面。 在頁尾中您會注意,一開始,資料庫仍在 -recovery 伺服器上。

  6. 當回復程序完成時,重新整理 Contoso Concert Hall 事件頁面,您會注意到資料庫現在位於原始區域中。

  7. 再次重新整理事件中樞,然後開啟 Hawthorn Hall。 請注意,其資料庫也位於原始區域中。

在回復後清理恢復區域資源

回復完成後,可以安全地刪除恢復區域中的資源。

重要

立即刪除這些資源,以停止其所有計費。

還原程序會建立恢復資源群組中的所有恢復資源。 清理程序會刪除此資源群組,並從目錄中移除這些資源的所有參考。

  1. 在 PowerShell ISE 的 ...\Learning Modules\Business Continuity and Disaster Recovery\DR-RestoreFromBackup\Demo-RestoreFromBackup.ps1 指令碼中,設定:

    $DemoScenario = 6:從恢復區域刪除過時的資源。

  2. 若要執行指令碼,請選取 F5。

清理指令碼之後,應用程式會回到其開始位置。 此時,您可以再次執行指令碼,或嘗試其他教學課程。

設計應用程式以確保應用程式與資料庫共置

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

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

下一步

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

  • 使用租用戶目錄來保存定期重新整理的設定資訊,這允許在另一個區域中建立鏡映影像恢復環境。
  • 藉由使用異地還原來將資料庫復原到恢復區域。
  • 更新租用戶目錄以反映還原的租用戶資料庫位置。
  • 使用 DNS 別名可讓應用程式連線到整個租用戶目錄,而不需重新設定。
  • 在中斷解決後,使用異地複寫將復原的資料庫回復到其原始區域。

嘗試使用資料庫異地複寫為多租用戶 SaaS 應用程式進行災害復原教學課程,了解如何使用異地複寫來大幅縮短復原大規模多組織用戶共享應用程式所需的時間。

其他資源

其他以 Wingtip SaaS 應用程式為基礎的教學課程