為 Microsoft SQL Server 持久磁碟啟用災難復原功能

本教學課程說明如何跨兩個 Cloud de Confiance by S3NS 區域啟用永久磁碟非同步複製 (PD 非同步複製),做為災難復原 (DR) 解決方案,以及如何在發生災難時啟動 DR 執行個體。

就本文而言,「災難」是指主要資料庫高可用性 (HA) 叢集發生故障或無法使用的事件。如果主要資料庫所在的區域發生故障或無法存取,資料庫可能會故障。

本教學課程適用於資料庫架構師、管理員和工程師。

目標

  • 為在 Cloud de Confiance上執行的所有 SQL Server AlwaysOn 可用性群組叢集節點,啟用非同步永久磁碟複製功能。
  • 模擬災難事件,並執行完整的災難復原程序,驗證災難復原設定。

費用

在本文件中,您將使用下列 Cloud de Confiance by S3NS計費元件:

完成本文所述工作後,您可以刪除建立的資源,避免繼續計費,詳情請參閱「清除所用資源」。

事前準備

本教學課程需要 Cloud de Confiance 專案。您可以建立新專案,或選取已建立的專案:

  1. 在 Cloud de Confiance 控制台的專案選取器頁面中,選取或建立 Cloud de Confiance 專案。

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您在專案中獲派角色,即可選取該專案。
    • 建立專案:如要建立專案,您需要專案建立者角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色。

    前往專案選取器

  2. 確認 Cloud de Confiance 專案已啟用計費功能。

  3. 在 Cloud de Confiance 控制台中啟用 Cloud Shell。

    啟用 Cloud Shell

災難復原 Cloud de Confiance

在 Cloud de Confiance,DR 是指提供處理作業的連續性,特別是在區域發生故障或無法存取時。災難復原網站有多種部署選項,具體取決於復原點目標 (RPO) 和復原時間目標 (RTO) 的要求。本教學課程涵蓋其中一種選項,即將虛擬機器 (VM) 磁碟從主要區域複製到災難復原區域。

非同步永久磁碟複製的災難復原

Persistent Disk 非同步複製 (PD 非同步複製) 提供低 RPO 和 RTO 區塊儲存空間複製功能,適用於跨區域主動對被動災難復原。

PD 非同步複製是一種儲存空間選項,可在兩個區域之間非同步複製資料。如果發生區域性服務中斷 (這種情況相當少見),您可以透過 PD Async Replication 將資料容錯移轉至次要區域,並在該區域重新啟動工作負載。

永久磁碟非同步複製功能會將資料從附加至執行中工作負載的磁碟 (稱為主要磁碟),複製到位於其他區域的獨立磁碟。接收複製資料的磁碟則稱為次要磁碟。

為確保附加至每個 SQL Server 節點的所有磁碟副本都包含相同時間點的資料,這些磁碟會加入一致性群組。一致性群組可讓您跨多個磁碟執行 DR 和 DR 測試。

災難復原架構

下圖顯示 PD 非同步複製的最低架構,支援主要區域的資料庫高可用性,以及從主要區域到 DR 區域的磁碟複製。

主要和待命執行個體位於 R1 區域的兩個可用區,基礎磁碟會使用非同步複製功能複製到 R2 區域。

圖 1. 使用 Microsoft SQL Server 和 PD 非同步複製功能建構災難復原架構

架構的運作方式如下:

  • 兩個 Microsoft SQL Server 執行個體 (主要執行個體和待命執行個體) 屬於可用性群組,位於相同區域 (R1),但位於不同可用區 (可用區 A 和 B)。R1 中的兩個執行個體會使用同步提交模式協調狀態。之所以使用同步模式,是因為該模式支援高可用性,並能維持一致的資料狀態。
  • SQL 節點的磁碟會新增至一致性群組,並複製到 DR 區域 R2。基礎架構會以非同步方式複製資料。
  • 只有磁碟會複製到 R2 區域。在 DR 期間,系統會建立新的 VM,並將現有的複製磁碟連接至 VM,以便將節點上線。

災難復原程序

當某個區域無法使用時,就會啟動 DR 程序。DR 程序會規定必須採取的操作步驟 (手動或自動),以緩解區域故障,並在可用區域中建立執行中的主要執行個體。

資料庫基本災害復原程序包含下列步驟:

  1. 執行主要資料庫執行個體的第一個區域 (R1) 無法使用。
  2. 營運團隊會確認並正式承認發生災害,然後決定是否需要容錯移轉。
  3. 如果需要容錯移轉,系統會終止從主要區域到 DR 區域的磁碟複製作業。系統會從磁碟副本建立新的 VM,並將其上線。
  4. 災難復原區域 (R2) 中的新主要資料庫經過驗證並上線,可啟用連線。
  5. 使用者會在新的主要資料庫繼續處理作業,並存取 R2 中的主要執行個體。

雖然這個基本程序會重新建立可運作的主要資料庫,但不會建立完整的高可用性架構,也就是新主要資料庫具有待命節點。

主要和待命執行個體位於 R1 區域的兩個可用區,基礎磁碟會使用非同步複製功能複製到 R2 區域。

圖 2:使用永久磁碟非同步複製功能進行災難復原後,部署 SQL Server

容錯回復至復原區域

主要區域 (R1) 恢復連線後,您就可以規劃及執行容錯回復程序。容錯回復程序包含本教學課程中列出的所有步驟,但在此情況下,R2 是來源,R1 是復原區域。

選擇 SQL Server 版本

本教學課程支援下列 Microsoft SQL Server 版本:

  • SQL Server 2016 Enterprise 版
  • SQL Server 2017 Enterprise 版
  • SQL Server 2019 Enterprise 版
  • SQL Server 2022 Enterprise 版

本教學課程使用 SQL Server 的 AlwaysOn 可用性群組功能。

如果您不需要高可用性 Microsoft SQL Server 主要資料庫,且單一資料庫執行個體就足以做為主要資料庫,則可以使用下列版本的 SQL Server:

  • SQL Server 2016 Standard 版
  • SQL Server 2017 Standard 版
  • SQL Server 2019 Standard 版
  • SQL Server 2022 Standard 版

2016、2017、2019 和 2022 版 SQL Server 的映像檔中已安裝 Microsoft SQL Server Management Studio,您不需要另外安裝。不過,在正式環境中,建議您在各區域的獨立 VM 上安裝一個 Microsoft SQL Server Management Studio 執行個體。如果您設定高可用性環境,請為每個可用區安裝一次 Microsoft SQL Server Management Studio,確保在其他可用區無法使用時,該環境仍可運作。

設定 Microsoft SQL Server 的災難復原機制

本教學課程使用 Microsoft SQL Server Enterprise 的 sql-ent-2022-win-2022 映像檔。

如需完整清單,請參閱「OS 映像檔」。

設定雙執行個體高可用性叢集

如要為 SQL Server 設定磁碟複製功能,將資料複製到 DR 區域,請先在某個區域中建立兩個執行個體的高可用性叢集。其中一個執行個體做為主要執行個體,另一個則做為待命執行個體。如要完成這個步驟,請按照「設定 SQL Server AlwaysOn 可用性群組」中的操作說明進行。本教學課程使用 us-central1 做為主要區域 (稱為 R1)。如果您已按照「設定 SQL Server AlwaysOn 可用性群組」一文中的步驟操作,應該會在相同區域 (us-central1) 中建立兩個 SQL Server 執行個體。您會在 us-central1-a 中部署主要 SQL Server 執行個體 (node-1),並在 us-central1-b 中部署待命執行個體 (node-2)。

啟用磁碟非同步複製功能

建立及設定所有 VM 後,請為連接至 VM 的所有磁碟建立一致性群組,啟用跨區域複製磁碟功能。資料會從來源磁碟複製到指定區域中新建立的空白磁碟。

  1. 為 SQL 節點和網域控制站建立一致性群組。 區域磁碟的限制之一,是一致性群組無法跨區域。

    gcloud compute resource-policies create disk-consistency-group node-1-disk-const-grp \
    --region=$REGION
    
    gcloud compute resource-policies create disk-consistency-group node-2-disk-const-grp \
    --region=$REGION
    
    gcloud compute resource-policies create disk-consistency-group witness-disk-const-grp \
    --region=$REGION
    
  2. 將主要和備用 VM 的磁碟新增至對應的一致性群組。

    gcloud compute disks add-resource-policies node-1 \
    --zone=$REGION-a \
    --resource-policies=node-1-disk-const-grp
    
    gcloud compute disks add-resource-policies node-1-datadisk \
    --zone=$REGION-a \
    --resource-policies=node-1-disk-const-grp
    
    gcloud compute disks add-resource-policies node-2 \
    --zone=$REGION-b \
    --resource-policies=node-2-disk-const-grp
    
    gcloud compute disks add-resource-policies node-2-datadisk \
    --zone=$REGION-b \
    --resource-policies=node-2-disk-const-grp
    
    gcloud compute disks add-resource-policies witness \
    --zone=$REGION-c \
    --resource-policies=witness-disk-const-grp
    
  3. 在配對區域建立空白次要磁碟

    DR_REGION="us-west1"
    gcloud compute disks create node-1-replica \
      --zone=$DR_REGION-a \
      --size=50 \
      --primary-disk=node-1 \
      --primary-disk-zone=$REGION-a
    
    gcloud compute disks create node-1-datadisk-replica \
      --zone=$DR_REGION-a \
      --size=$PD_SIZE \
      --primary-disk=node-1-datadisk \
      --primary-disk-zone=$REGION-a
    
    gcloud compute disks create node-2-replica \
      --zone=$DR_REGION-b \
      --size=50 \
      --primary-disk=node-2 \
      --primary-disk-zone=$REGION-b
    
    gcloud compute disks create node-2-datadisk-replica \
      --zone=$DR_REGION-b \
      --size=$PD_SIZE \
      --primary-disk=node-2-datadisk \
      --primary-disk-zone=$REGION-b
    
    gcloud compute disks create witness-replica \
      --zone=$DR_REGION-c \
      --size=50 \
      --primary-disk=witness \
      --primary-disk-zone=$REGION-c
    
  4. 開始複製磁碟。資料會從主要磁碟複製到 DR 區域中新建立的空白磁碟。

    gcloud compute disks start-async-replication node-1 \
      --zone=$REGION-a \
      --secondary-disk=node-1-replica \
      --secondary-disk-zone=$DR_REGION-a 
    
    gcloud compute disks start-async-replication node-1-datadisk \
      --zone=$REGION-a \
      --secondary-disk=node-1-datadisk-replica \
      --secondary-disk-zone=$DR_REGION-a 
    
    gcloud compute disks start-async-replication node-2 \
      --zone=$REGION-b \
      --secondary-disk=node-2-replica \
      --secondary-disk-zone=$DR_REGION-b 
    
    gcloud compute disks start-async-replication node-2-datadisk \
      --zone=$REGION-b \
      --secondary-disk=node-2-datadisk-replica \
      --secondary-disk-zone=$DR_REGION-b 
    
    gcloud compute disks start-async-replication witness \
      --zone=$REGION-c \
      --secondary-disk=witness-replica \
      --secondary-disk-zone=$DR_REGION-c 
    

此時,資料應會在區域之間複製。 每個磁碟的複製狀態應顯示為 Active。

模擬災難復原

在本節中,您將測試本教學課程中設定的災難復原架構。

模擬服務中斷情形,並執行災難復原容錯移轉

在 DR 容錯移轉期間,您會在 DR 區域中建立新的 VM,並將複製的磁碟連接至這些 VM。為簡化容錯移轉程序,您可以在 DR 區域使用不同的虛擬私有雲 (VPC) 進行復原,以便使用相同的 IP 位址。

開始容錯移轉前,請確認 node-1 是您建立的 AlwaysOn 可用性群組的主要節點。請啟動網域控制器和主要 SQL Server 節點,以免發生資料同步問題,因為這兩個節點受到兩個不同的一致性群組保護。如要模擬中斷,請按照下列步驟操作:

  1. 建立復原虛擬私有雲。

    DRVPC_NAME="default-dr"
    DRSUBNET_NAME="default-recovery"
    
    gcloud compute networks create $DRVPC_NAME \
    --subnet-mode=custom
    CIDR = $(gcloud compute networks subnets describe default \
    --region=$REGION --format=value\(ipCidrRange\))
    
    gcloud compute networks subnets create $DRSUBNET_NAME \
    --network=$DRVPC_NAME --range=$CIDR --region=$DR_REGION
    
  2. 終止資料複製作業。

    PROJECT=$(gcloud config get-value project)
    gcloud compute disks stop-group-async-replication projects/$PROJECT/regions/$REGION/resourcePolicies/node-1-disk-const-grp \
    --zone=$REGION-a
    
    gcloud compute disks stop-group-async-replication projects/$PROJECT/regions/$REGION/resourcePolicies/node-2-disk-const-grp \
    --zone=$REGION-b
    
    gcloud compute disks stop-group-async-replication projects/$PROJECT/regions/$REGION/resourcePolicies/witness-disk-const-grp \
    --zone=$REGION-c
    
  3. 停止主要區域中的來源 VM。

    gcloud compute instances stop node-1 \
      --zone=$REGION-a
    
    gcloud compute instances stop node-2 \
      --zone=$REGION-b
    
    gcloud compute instances stop witness \
      --zone=$REGION-c
    
  4. 使用磁碟副本在 DR 區域中建立 VM。這些 VM 會使用來源 VM 的 IP 位址。

    NODE1IP=$(gcloud compute instances describe node-1 --zone $REGION-a --format=value\(networkInterfaces[0].networkIP\))
    NODE2IP=$(gcloud compute instances describe node-2 --zone $REGION-a --format=value\(networkInterfaces[0].networkIP\))
    WITNESSIP=$(gcloud compute instances describe witness --zone $REGION-a --format=value\(networkInterfaces[0].networkIP\))
    
    gcloud compute instances create node-1 \
      --zone=$DR_REGION-a \
      --machine-type $MACHINE_TYPE \
      --network=$DRVPC_NAME \
      --subnet=$DRSUBNET_NAME \
      --private-network-ip $NODE1IP\
      --disk=boot=yes,device-name=node-1-replica,mode=rw,name=node-1-replica \
      --disk=auto-delete=yes,boot=no,device-name=node-1-datadisk-replica,mode=rw,name=node-1-datadisk-replica
    
    gcloud compute instances create witness \
      --zone=$DR_REGION-c \
      --machine-type=n2-standard-2 \
      --network=$DRVPC_NAME \
      --subnet=$DRSUBNET_NAME \
      --private-network-ip $WITNESSIP \
      --disk=boot=yes,device-name=witness-replica,mode=rw,name=witness-replica
    

我們已模擬中斷,並容錯移轉至 DR 區域。現在可以測試次要執行個體是否正常運作。

確認 SQL Server 連線

建立 VM 後,請確認資料庫已成功復原,且伺服器運作正常。為了測試資料庫,您將從復原的資料庫執行選取查詢。

  1. 使用遠端桌面連線至 SQL Server VM。
  2. 開啟 SQL Server Management Studio。
  3. 在「Connect to server」對話方塊中,確認伺服器名稱已設為 NODE-1,然後選取「Connect」。
  4. 在檔案選單中,依序選取「檔案」>「新增」>「查詢」,並使用目前的連線。

    USE [bookshelf];
    SELECT * FROM Books;
    

清除所用資源

如要避免系統向您的 Cloud de Confiance 帳戶收取本教學課程所用資源的費用,請執行下列操作:

刪除專案

  1. 前往 Cloud de Confiance 控制台的「Manage resources」(管理資源) 頁面。

    前往「Manage resources」(管理資源)

  2. 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)。
  3. 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。

後續步驟