本教學課程說明如何在兩個 Google Cloud 區域中啟用 Hyperdisk 平衡式非同步複製功能,做為災難復原 (DR) 解決方案,以及如何在發生災難時啟動 DR 執行個體。
Microsoft SQL Server 容錯移轉叢集執行個體 (FCI) 是單一具備高可用性的 SQL Server 執行個體,會部署於多個 Windows Server 容錯移轉叢集 (WSFC) 節點。在任何時間點,其中一個叢集節點都會主動代管 SQL 例項。在區域停機或 VM 發生問題時,WSFC 會自動將執行個體資源的擁有權轉移至叢集中的另一個節點,讓用戶端重新連線。SQL Server FCI 要求資料位於共用磁碟上,這樣才能跨所有 WSFC 節點存取資料。
為確保 SQL Server 部署作業可承受區域性服務中斷情形,請啟用非同步複製功能,將主要區域的磁碟資料複製到次要區域。本教學課程使用 Hyperdisk Balanced High Availability 多寫入端磁碟,在兩個 Google Cloud 區域之間啟用非同步複製功能,做為 SQL Server FCI 的災難復原 (DR) 解決方案,以及在發生災難時如何啟動 DR 執行個體。在本文件中,災難是指主要資料庫叢集發生錯誤或無法使用,可能是因為叢集所在區域無法使用 (可能是因為自然災害)。
本教學課程適用對象為資料庫架構師、管理員和工程師。
目標
- 針對在 Google Cloud上執行的所有 SQL Server FCI 叢集節點,啟用 Hyperdisk 非同步複寫功能。
- 模擬災難事件並執行完整的 DR 程序,驗證 DR 設定。
費用
在本文件中,您會使用 Google Cloud的下列計費元件:
如要根據預測用量估算費用,請使用 Pricing Calculator。
完成本文所述工作後,您可以刪除已建立的資源,避免繼續計費。詳情請參閱清除所用資源一節。
事前準備
本教學課程需要 Google Cloud 專案。您可以建立新專案,或選取已建立的專案:
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, activate Cloud Shell.
-
按照「使用 Hyperdisk 平衡高可用性多寫入端模式設定 SQL Server FCI 叢集」指南中的步驟,在主要區域中設定 SQL Server 叢集。設定叢集後,請返回本教學課程,在次要區域啟用 DR。
在 Google Cloud 專案和 SQL Server 中具備適當的權限,才能執行備份和還原作業。
Google Cloud中的災難復原
在 Google Cloud DR 中,當某個區域發生故障或無法存取時,系統會持續存取資料。災難復原站點有許多部署選項,這些選項會根據復原點目標 (RPO) 和復原時間目標 (RTO) 需求而定。本教學課程將說明其中一個選項,說明如何將連接至虛擬機器的磁碟從主要區域複製到 DR 區域。
使用 Hyperdisk 非同步複製功能進行災難復原
Hyperdisk 非同步複製功能是一種儲存空間選項,可在兩個區域之間複製磁碟,並提供非同步儲存空間副本。萬一發生區域性服務中斷情形,Hyperdisk 非同步複製功能可讓您將資料容錯移轉至次要區域,並重新啟動該區域中的工作負載。
Hyperdisk 非同步複製功能會將附加至執行中工作負載的磁碟 (稱為主要磁碟) 中的資料,複製到位於其他區域的獨立磁碟。接收複製資料的磁碟稱為次要磁碟。主磁碟執行的區域稱為主要區域,次要磁碟執行的區域則稱為次要區域。為確保已連接至每個 SQL Server 節點的所有磁碟備用資源含有相同時間點的資料,這些磁碟會加入一致性群組。一致性群組可讓您在多個磁碟上執行 DR 和 DR 測試。
災難復原架構
針對 Hyperdisk 非同步複製,下圖所示為最小架構,可支援主要區域 R1 中的資料庫 HA,以及從主要區域到次要區域 R2 的磁碟複製。
圖 1. 使用 Microsoft SQL Server 和 Hyperdisk 非同步複製功能的災難復原架構
架構的運作方式如下:
- 兩個 Microsoft SQL Server 執行個體 (主要執行個體和待命執行個體) 是 FCI 叢集的一部分,位於主要區域 (R1) 但位於不同區域 (區域 A 和 B)。兩個執行個體共用一個 Hyperdisk 平衡高可用性磁碟,可存取兩個 VM 的資料。如需操作說明,請參閱「使用 Hyperdisk Balanced High Availability 多寫入端模式設定 SQL Server FCI 叢集」
- 兩個 SQL 節點的磁碟會新增至一致性群組,並複製至 DR 區域 R2。Compute Engine 會非同步地將資料從 R1 複製到 R2。
- 非同步複製功能只會將磁碟上的資料複製到 R2,不會複製 VM 中繼資料。在 DR 期間,系統會建立新的 VM,並將現有的複寫磁碟連接至 VM,以便將節點上線。
災難復原程序
災難復原程序會規定,在某個區域無法使用時,您必須採取哪些操作步驟,才能在其他區域恢復工作負載。
基本資料庫 DR 程序包含下列步驟:
- 執行主要資料庫執行個體的第一個區域 (R1) 無法使用。
- 營運團隊會認定並正式確認災難,並決定是否需要容錯移轉。
- 如果需要容錯移轉,您必須終止主磁碟和次要磁碟之間的複製作業。系統會使用磁碟副本建立新的 VM,並將其上線。
- 驗證 DR 區域 R2 中的資料庫,並將其上線。R2 中的資料庫會成為新的可連結的主要資料庫。
- 使用者可在新的主資料庫上繼續處理,並存取 R2 中的主執行個體。
雖然這個基本程序會再次建立可運作的主要資料庫,但不會建立完整的 HA 架構,因為新的主要資料庫不會複製。
圖 2:使用永久磁碟非同步複製功能進行災難復原後,SQL Server 的部署作業
改用已復原的區域
當主要區域 (R1) 恢復上線時,您可以規劃並執行容錯回復程序。復原程序包含本教學課程中概略說明的所有步驟,但在本例中,R2 是來源,R1 是復原區域。
選擇 SQL Server 版本
本教學課程支援下列 Microsoft SQL Server 版本:
- SQL Server 2016 Enterprise 和 Standard 版本
- SQL Server 2017 Enterprise 和 Standard 版本
- SQL Server 2019 Enterprise 和 Standard 版本
- SQL Server 2022 Enterprise 和 Standard 版本
本教學課程使用 Hyperdisk 平衡高可用性磁碟的 SQL Server 容錯移轉叢集執行個體。
如果您不需要 SQL Server Enterprise 的功能,可以使用 SQL Server 的 Standard 版本:
SQL Server 2016、2017、2019 和 2022 版本的映像檔已安裝 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 設定磁碟複製功能,請先在一個區域中建立兩個執行個體的 HA 叢集。一個執行個體做為主要執行個體,另一個做為備用執行個體。如要完成這個步驟,請按照「使用 Hyperdisk Balanced High Availability 多寫入端模式設定 SQL Server FCI 叢集」中的操作說明進行。本教學課程將 us-central1
用於主要區域 R1。如果您按照「使用 Hyperdisk 平衡高可用性多寫入模式設定 SQL Server FCI 叢集」一文中的步驟操作,就會在同一個區域 (us-central1
) 中建立兩個 SQL Server 執行個體。您會在 us-central1-a
中部署主要 SQL Server 執行個體 (node-1
),並在 us-central1-b
中部署待命執行個體 (node-2
)。
啟用磁碟非同步複製
建立及設定所有 VM 後,請完成下列步驟,在兩個區域之間啟用磁碟複製功能:
為 SQL Server 節點和代管見證和網域控制站角色的節點建立一致性群組。一致性群組的限制之一,是無法跨區域,因此您必須將每個節點加入個別的一致性群組。
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 gcloud compute resource-policies create disk-consistency-group multiwriter-disk-const-grp \ --region=$REGION
將主要和備用 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-2 \ --zone=$REGION-b \ --resource-policies=node-2-disk-const-grp gcloud compute disks add-resource-policies mw-datadisk-1 \ --region=$REGION \ --resource-policies=multiwriter-disk-const-grp gcloud compute disks add-resource-policies witness \ --zone=$REGION-c \ --resource-policies=witness-disk-const-grp
在次要區域中建立空白的次要磁碟。
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-2-replica \ --zone=$DR_REGION-b \ --size=50 \ --primary-disk=node-2 \ --primary-disk-zone=$REGION-b gcloud compute disks create multiwriter-datadisk-1-replica \ --replica-zones=$DR_REGION-a,$DR_REGION-b \ --size=$PD_SIZE \ --type=hyperdisk-balanced-high-availability \ --access-mode READ_WRITE_MANY \ --primary-disk=multiwriter-datadisk-1 \ --primary-disk-region=$REGION gcloud compute disks create witness-replica \ --zone=$DR_REGION-c \ --size=50 \ --primary-disk=witness \ --primary-disk-zone=$REGION-c
開始磁碟複製。資料會從主要磁碟複製到 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-2 \ --zone=$REGION-b \ --secondary-disk=node-2-replica \ --secondary-disk-zone=$DR_REGION-b gcloud compute disks start-async-replication multiwriter-datadisk-1 \ --region=$REGION \ --secondary-disk=multiwriter-datadisk-1-replica \ --secondary-disk-region=$DR_REGION gcloud compute disks start-async-replication witness \ --zone=$REGION-c \ --secondary-disk=witness-replica \ --secondary-disk-zone=$DR_REGION-c
此時資料應會在區域間複製。每個磁碟的複製狀態應顯示為 Active
。
模擬災難復原
在本節中,您將測試本教學課程中設定的災難復原架構。
模擬服務中斷情形並執行災難復原容錯移轉
在容錯期間,您會在 DR 區域中建立新的 VM,並將複製的磁碟連接至這些 VM。為簡化容錯移轉程序,您可以在復原的 DR 區域中使用不同的虛擬私有雲 (VPC),以便使用相同的 IP 位址。
開始容錯前,請確認 node-1
是您建立的 AlwaysOn 可用性群組的主要節點。請啟動網域控制器和主要 SQL Server 節點,以免發生任何資料同步處理問題,因為這兩個節點受到兩個獨立的一致性群組保護。如要模擬服務中斷,請按照下列步驟操作:
建立復原 VPC。
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
終止或停止資料複製。
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/multiwriter-disk-const-grp \ --zone=$REGION-c gcloud compute disks stop-group-async-replication projects/$PROJECT/regions/$REGION/resourcePolicies/witness-disk-const-grp \ --zone=$REGION-c
停止主要區域中的來源 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
重新命名現有的 VM,避免專案中出現重複名稱。
gcloud compute instances set-name witness \ --new-name=witness-old \ --zone=$REGION-c gcloud compute instances set-name node-1 \ --new-name=node-1-old \ --zone=$REGION-a gcloud compute instances set-name node-2 \ --new-name=node-2-old \ --zone=$REGION-b
使用次要磁碟在 DR 區域中建立 VM。這些 VM 將具有來源 VM 的 IP 位址。
NODE1IP=$(gcloud compute instances describe node-1-old --zone $REGION-a --format=value\(networkInterfaces[0].networkIP\)) NODE2IP=$(gcloud compute instances describe node-2-old --zone $REGION-b --format=value\(networkInterfaces[0].networkIP\)) WITNESSIP=$(gcloud compute instances describe witness-old --zone $REGION-c --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=boot=no,device-name=mw-datadisk-1-replica,mode=rw,name=mw-datadisk-1-replica,scope=regional 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 gcloud compute instances create node-2 \ --zone=$DR_REGION-b \ --machine-type $MACHINE_TYPE \ --network=$DRVPC_NAME \ --subnet=$DRSUBNET_NAME \ --private-network-ip $NODE2IP\ --disk=boot=yes,device-name=node-2-replica,mode=rw,name=node-2-replica \ --disk=boot=no,device-name=mw-datadisk-1-replica,mode=rw,name=mw-datadisk-1-replica,scope=regional
您已模擬服務中斷情形,並將服務切換至 DR 區域。現在您可以測試次要執行個體是否正常運作。
確認 SQL Server 連線
建立 VM 後,請確認資料庫已成功復原,且伺服器可正常運作。如要測試資料庫,請從已復原的資料庫執行查詢。
- 使用遠端桌面連線至 SQL Server VM。
- 開啟 SQL Server Management Studio。
- 在「連線至伺服器」對話方塊中,確認伺服器名稱已設為
node-1
,然後選取「連線」。 在檔案選單中,依序選取「檔案」>「新增」>「查詢」,並使用目前的連線。
USE [bookshelf]; SELECT * FROM Books;
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取這個教學課程所用資源的費用,請按照本節中的步驟刪除您建立的資源。
刪除專案
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
後續步驟
- 探索 Google Cloud 的參考架構、圖表和最佳做法。歡迎瀏覽我們的雲端架構中心。