本教學課程說明如何使用 Google Cloud NetApp Volumes 區塊儲存空間和網際網路小型電腦系統介面 (iSCSI) 通訊協定,在 Compute Engine 虛擬機器 (VM) 執行個體上部署 Microsoft SQL Server Always On 可用性群組。使用 NetApp Volumes 做為 SQL Server 儲存空間,即可享有高效能、全代管的儲存服務,以及快照和複製等進階資料管理功能。
目標
本教學課程會逐步引導您完成下列工作:費用
本教學課程使用下列 Cloud de Confiance by S3NS計費元件:您可以使用 Pricing Calculator,根據預測用量估算費用。
事前準備
開始前,請確認您具備下列項目:
-
在 Cloud de Confiance 控制台的專案選取器頁面中,選取或建立 Cloud de Confiance 專案。
選取或建立專案所需的角色
- 選取專案:選取專案時,不需具備特定 IAM 角色,只要您在專案中獲派角色,即可選取該專案。
-
建立專案:如要建立專案,您必須具備專案建立者角色 (
roles/resourcemanager.projectCreator),其中包含resourcemanager.projects.create權限。瞭解如何授予角色。
- 具備 Compute Engine、網路、Identity and Access Management 和 Cloud Storage 管理權限的 Cloud de Confiance 專案。
- 虛擬私有雲網路,且在目標區域中設有子網路。
- 在區域內建立的 Active Directory 和 DNS 服務。
- Active Directory 使用者,具備將電腦加入網域,以及透過 RDP 存取 VM 的權限。
- 確認虛擬私有雲防火牆規則允許節點之間的流量,包括 iSCSI (TCP 3260)、WSFC (UDP/TCP 3343)、SQL Server (TCP 1433)、SQL Server AG 端點 (TCP 5022)、SMB (TCP 445) 和 RPC (TCP 135、TCP 49152-65535)。
- 啟用 NetApp Volumes API。
-
在 Cloud de Confiance 控制台啟用 Cloud Shell。
設定網域帳戶
為 SQL Server 設定兩個 Active Directory 帳戶:
- 安裝帳戶:具備網域管理員權限的帳戶 (例如 DOMAIN\DomainAdmin),用於登入 VM 並設定叢集和可用性群組。
- 服務帳戶:兩個 SQL Server VM 上 SQL Server 服務和 SQL Agent 服務的帳戶 (例如 DOMAIN\sqlsvc)。
建立 SQL Server 適用的 Compute Engine VM
建立兩個 Compute Engine 執行個體 (sqlnode1 和 sqlnode2),在 Windows Server 2025 上執行 SQL Server 2022 Enterprise:
前往 Cloud de Confiance 控制台的「Create an instance」(建立執行個體) 頁面。
在「Name」(名稱) 中輸入
sqlnode1。在「Machine configuration」(機器設定) 部分,選取「General Purpose」(一般用途),然後執行下列操作:
- 在「系列」清單中,選取「N4」。
- 在「機器類型」清單中,選取「n4-highmem-8 (8vCPU, 64 GB memory)」。
選取您設定虛擬私有雲的「區域」和「可用區」。
在「Boot disk」(開機磁碟) 區段中,按一下「Change」(變更),然後執行下列操作:
- 在「Public images」(公開映像檔) 分頁中,從「Operating system」(作業系統) 清單選取「SQL Server on Windows Server」。
- 在「版本」清單中,選取「SQL Server 2022 Enterprise on Windows Server 2025 Datacenter」。
- 在「Boot disk type」(開機磁碟類型) 清單中,選取「Hyperdisk Balanced」。
- 將「Size (GB)」(大小 (GB)) 設為
50。 - 如要儲存開機磁碟設定,請按一下「選取」。
依序展開「進階選項」和「網路」。
在「網路介面」部分,選取專案的虛擬私有雲和「子網路」。
在「網路介面卡類型」清單中,選取「gVNIC」。
將「Network Service Tier」(網路服務級別) 設為「Premium」。
點選「建立」。
重複上述步驟,建立第二個執行個體
sqlnode2。
將伺服器加入網域,並準備叢集
在 sqlnode1 和 sqlnode2 上執行下列步驟:
- 使用本機管理員帳戶連線至 VM。
- 在「Server Manager」中,選取「Local Server」。
- 選取「WORKGROUP」連結。
- 在「電腦名稱」部分,選取「變更」。
- 勾選「網域」核取方塊,輸入網域名稱 (例如
cvsdemo.internal),然後按一下「確定」。 - 在「Windows 安全性」對話方塊中,輸入網域管理員帳戶的憑證,然後按一下「確定」。
- 網域顯示歡迎訊息時,請完成下列步驟: a. 按一下「OK」。 b. 按一下「關閉」,然後選取「立即重新啟動」。
- VM 重新啟動後,請使用網域管理員帳戶連線至 VM。
- 將
DOMAIN\sqlsvc帳戶新增至 VM 上的本機管理員群組。您可以使用下列 PowerShell 指令:Add-LocalGroupMember -Group "Administrators" -Member "DOMAIN\sqlsvc"
以管理員身分開啟 PowerShell,並執行下列指令來安裝必要的 Windows 功能:
# Install Failover Clustering and tools Install-WindowsFeature Failover-Clustering, RSAT-Clustering-PowerShell, RSAT-Clustering-CmdInterface -IncludeAllSubFeature -IncludeManagementTools # Install and enable MPIO for iSCSI Install-WindowsFeature -Name Multipath-IO Enable-MSDSMAutomaticClaim -BusType "iSCSI" # Install .NET and other SQL prereqs Install-WindowsFeature NET-Framework-45-Core, NET-Framework-45-Features Install-WindowsFeature RSAT-AD-PowerShell
如要取得 VM 的 iSCSI 限定名稱 (IQN),請執行
iscsicpl.exe,前往「設定」分頁,然後複製「啟動器名稱」。或者,您也可以執行下列 PowerShell 指令:Get-InitiatorPort | Select-Object NodeAddress
記錄
sqlnode1和sqlnode2的 IQN。下一節會用到。範例:iqn.1991-05.com.microsoft:sqlnode1.cvsdemo.internal。
建立 NetApp Volumes 區塊儲存空間磁碟區
請按照下列步驟建立主機群組、儲存空間集區和 iSCSI 磁碟區。
建立主機群組
主機群組可確保只有指定的主機 (SQL Server VM) 才能存取您建立的磁碟區。
在 Cloud Shell 中,建立包含
sqlnode1和sqlnode2IQN 的主機群組:gcloud netapp host-groups create HOST_GROUP_NAME
--location=LOCATION
--type=ISCSI_INITIATOR
--hosts=SQLNODE1_IQN,SQLNODE2_IQN
--os-type=WINDOWS
--description="SQL Server AG nodes"替換下列資訊:
HOST_GROUP_NAME:主機群組的名稱,例如sql-ag-hosts。LOCATION:主機群組的區域,例如us-west1。SQLNODE1_IQN:sqlnode1的 IQN。SQLNODE2_IQN:sqlnode2的 IQN。
佈建儲存空間集區
在 Cloud Shell 中,為磁碟區建立儲存空間集區:
gcloud netapp storage-pools create POOL_NAME
--project=PROJECT_ID
--location=ZONE
--service-level=Flex
--type=Unified
--capacity=1024
--total-throughput=64
--total-iops=1024
--network=name=VPC_NAME,psa-range=PSA_RANGE_NAME替換下列資訊:
POOL_NAME:儲存空間集區的名稱,例如sql-pool。PROJECT_ID: Cloud de Confiance 專案 ID。ZONE:儲存空間集區的可用區,必須與 VM 的可用區相符,例如us-west1-b。VPC_NAME:虛擬私有雲網路的名稱。PSA_RANGE_NAME:私人服務存取權連線的分配範圍名稱。
建立磁碟區
為每個節點的 SQL Server 資料、記錄、tempdb 和備份建立個別磁碟區。
在 Cloud Shell 中,針對要建立的每個磁碟區執行下列指令:
gcloud netapp volumes create VOLUME_NAME
--project=PROJECT_ID
--location=ZONE
--storage-pool=POOL_NAME
--capacity=200
--protocols=ISCSI
--block-devices="name=VOLUME_NAME,host-groups=projects/PROJECT_ID/locations/LOCATION/hostGroups/HOST_GROUP_NAME,os-type=WINDOWS"
--snapshot-directory=false將
VOLUME_NAME替換為每個磁碟區的專屬名稱。在本教學課程中,您需要執行指令八次,為兩個節點建立資料、記錄、tempdb 和備份磁碟區 (例如sqlnode1-data、sqlnode1-log、sqlnode1-temp、sqlnode1-backup、sqlnode2-data、sqlnode2-log、sqlnode2-temp和sqlnode2-backup)。
在各個 SQL VM 掛接 iSCSI 磁碟區
針對每個 VM (sqlnode1 和 sqlnode2),掛接您為該特定節點建立的磁碟區。
在 Cloud de Confiance 控制台中,前往 NetApp Volumes 的「Volumes」(磁碟區) 頁面。
選取指派給設定中節點的磁碟區。記下 iSCSI「Target details」(目標詳細資料) 區段中列出的「Target portal」(目標入口網站) IP 位址。您需要這些位址才能連線至磁碟區。
在 VM 上,以管理員身分開啟 PowerShell 並執行下列指令,將範例 IP 替換為磁碟區的目標入口網站 IP:
"10.165.128.216","10.165.128.217" | ForEach-Object { New-IscsiTargetPortal -TargetPortalAddress $_ }執行
iscsicpl.exe,開啟「iSCSI Initiator Properties」。前往「目標」分頁,從清單中選取一個數量目標,然後按一下「連結」。
在「連線到目標」對話方塊中,選取「啟用多重路徑」,然後點選「進階」。
在「Advanced Settings」對話方塊中:
- 本機介面卡:選取「Microsoft iSCSI 啟動器」。
- Initiator IP (啟動器 IP):選取 VM 上的 IP 位址。
- 目標入口網站 IP:選取您探索到的其中一個入口網站 IP。
- 按一下 [確定]。
在「連線到目標」對話方塊中,點選「確定」。
針對與 VM 相關聯的所有目標,重複執行連線步驟。
如要為 iSCSI 裝置設定 MPIO,請從「控制台」或「伺服器管理員」開啟「MPIO 內容」。
按一下「探索多重路徑」分頁標籤。
選取「新增 iSCSI 裝置支援」,然後按一下「新增」。如果系統提示,請重新啟動 VM。
重新啟動後,開啟「裝置管理員」,然後展開「磁碟機」。iSCSI 磁碟會顯示為多路徑裝置。
開啟「磁碟管理」(
compmgmt.msc)。針對每個新磁碟:- 將磁碟上線。
- 初始化磁碟 (GPT)。
- 建立新磁碟區、指派磁碟機代號 (例如 D 代表資料、E 代表記錄、F 代表備份、G 代表 tempdb),並使用 NTFS 格式化,配置單位大小為 64K。
在新格式化的磁碟機上,建立 SQL Server 的目錄結構。例如:
$paths = "D:\MSSQL\DATA","E:\MSSQL\Log","F:\MSSQL\Backup","G:\MSSQL\Temp" $paths | ForEach-Object { New-Item -ItemType Directory -Path $_ -Force }
設定 SQL Server
在 sqlnode1 和 sqlnode2 掛接各自的磁碟區後,請在兩者上執行下列步驟。
- 開啟 SQL Server 組態管理員。
- 在左側窗格中,選取「SQL Server Services」。
- 在右側窗格中,在「SQL Server (MSSQLSERVER)」上按一下滑鼠右鍵,選取「內容」,前往「登入」分頁,然後將「帳戶名稱」變更為服務帳戶 (DOMAIN\sqlsvc)。輸入密碼,然後按一下「確定」。
- 對「SQL Server Agent (MSSQLSERVER)」重複執行上一個步驟。
- 使用 SQL Server Management Studio (SSMS) 搭配網域管理員帳戶,連線至 SQL Server 執行個體。
- 為服務帳戶建立登入資訊,並授予必要權限:
USE [master]; GO CREATE LOGIN [DOMAIN\sqlsvc] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]; GO ALTER SERVER ROLE [sysadmin] ADD MEMBER [DOMAIN\sqlsvc]; GO
- 在 SSMS 中執行下列指令碼,將預設資料庫、記錄、備份和 tempdb 路徑重新導向至您掛接的 iSCSI 磁碟區:
USE [master]; GO EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'BackupDirectory', REG_SZ, N'F:\MSSQL\Backup'; GO EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultData', REG_SZ, N'D:\MSSQL\DATA'; GO EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog', REG_SZ, N'E:\MSSQL\Log'; GO -- Modify model and msdb paths ALTER DATABASE model MODIFY FILE (NAME = modeldev, FILENAME = 'D:\MSSQL\DATA\model.mdf'); ALTER DATABASE model MODIFY FILE (NAME = modellog, FILENAME = 'E:\MSSQL\Log\modellog.ldf'); ALTER DATABASE msdb MODIFY FILE (NAME = MSDBData, FILENAME = 'D:\MSSQL\DATA\MSDBData.mdf'); ALTER DATABASE msdb MODIFY FILE (NAME = MSDBLog, FILENAME = 'E:\MSSQL\Log\MSDBLog.ldf'); GO -- Modify tempdb paths ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'G:\MSSQL\Temp\tempdb.mdf'); ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'G:\MSSQL\Temp\templog.ldf'); GO
- 停止 SQL Server (MSSQLSERVER) 服務。
- 將現有的
model、msdb和tempdb檔案從舊位置 (例如C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA) 移至 D:、E: 和 G: 磁碟機上的新位置。 - 如要移動
master資料庫和ERRORLOG:- 開啟 SQL Server 組態管理員。
- 在「SQL Server (MSSQLSERVER)」上按一下滑鼠右鍵,選取「Properties」,然後前往「Startup Parameters」分頁。
- 針對指向 C: 磁碟機的每個現有參數
-d、-e和-l,選取該參數並按一下「Remove」。 - 新增下列參數,並為每個參數點選「新增」:
-dD:\MSSQL\DATA\master.mdf-lE:\MSSQL\Log\mastlog.ldf-eE:\MSSQL\Log\ERRORLOG
- 按一下 [確定]。
- 手動將
master.mdf和mastlog.ldf從C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA分別移至D:\MSSQL\DATA\` andE:\MSSQL\Log`。 - 將
ERRORLOG檔案從舊位置移至「E:\MSSQL\Log」。
- 啟動 SQL Server (MSSQLSERVER) 服務。
設定 Windows Server 容錯移轉叢集
請按照下列步驟建立叢集,並設定仲裁見證。
設定 Windows 防火牆
建立叢集前,請確認每個節點的 Windows 防火牆都允許 WSFC、SQL Server 和 iSCSI 的流量。
在 sqlnode1 和 sqlnode2 上,以管理員身分開啟 PowerShell,並執行下列指令:
New-NetFirewallRule -DisplayName 'Failover Clusters (UDP-In)' -Direction Inbound -Protocol UDP -LocalPort 3343 -Action Allow New-NetFirewallRule -DisplayName 'Failover Clusters (TCP-In)' -Direction Inbound -Protocol TCP -LocalPort 3343 -Action Allow New-NetFirewallRule -DisplayName 'RPC Endpoint Mapper' -Direction Inbound -Protocol TCP -LocalPort 135 -Action Allow New-NetFirewallRule -DisplayName 'File and Printer Sharing (SMB-In)' -Direction Inbound -Protocol TCP -LocalPort 445 -Action Allow New-NetFirewallRule -DisplayName 'Failover Cluster Manager RPC' -Direction Inbound -Protocol TCP -LocalPort 49152-65535 -Action Allow New-NetFirewallRule -DisplayName 'iSCSI' -Direction Inbound -Protocol TCP -LocalPort 3260 -Action Allow New-NetFirewallRule -DisplayName 'SQL Server' -Direction Inbound -Protocol TCP -LocalPort 1433 -Action Allow New-NetFirewallRule -DisplayName 'SQL Server AG Endpoint' -Direction Inbound -Protocol TCP -LocalPort 5022 -Action Allow
建立叢集
- 在
sqlnode1上,開啟「容錯移轉叢集管理工具」(cluadmin.msc)。 - 在「Management」(管理) 部分,選取「Validate Configuration」(驗證設定)。按照精靈的指示驗證
sqlnode1和sqlnode2。確認所有測試都通過,再繼續操作。 - 驗證完成後,選取「建立叢集」。
- 在「Create Cluster Wizard」(建立叢集精靈) 中,新增
sqlnode1和sqlnode2做為叢集節點。 - 在「Access Point for Administering the Cluster」部分,輸入叢集名稱 (例如
sqlcluster),並提供叢集的靜態 IP 位址。 - 按照提示建立叢集。
為叢集仲裁建立檔案共用區
建議您在第三個 VM (最好位於不同可用區) 建立檔案共用,做為叢集仲裁見證。
- 連線至要用做檔案共用見證的 VM。
- 在「Server Manager」視窗中,依序選取「Tools」>「Computer Management」。
- 依序展開「系統工具」>「共用資料夾」,在「共用」上按一下滑鼠右鍵,然後選取「新增共用」。
- 按照「Create a Shared Folder Wizard」(建立共用資料夾精靈) 的指示操作。在「Folder Path」(資料夾路徑) 頁面中,瀏覽或建立共用資料夾。
- 在「權限」頁面,選取「自訂權限」。
- 按一下「Add」,然後將「Full control」權限授予叢集名稱物件 (CNO) 帳戶 (例如
sqlcluster$)。 - 完成精靈,建立共用。
設定叢集仲裁
- 在
sqlnode1上,開啟「Failover Cluster Manager」(容錯移轉叢集管理工具)。 - 在叢集名稱上按一下滑鼠右鍵,然後依序選取「More Actions」>「Configure Cluster Quorum Settings」。
- 在「Configure Cluster Quorum Wizard」中,選取「Next」。
- 在「Select Quorum Configuration Option」頁面中,選擇「Select the quorum witness」,然後按一下「Next」。
- 在「Select Quorum Witness」頁面中,選擇「Configure a file share witness」,然後點選「Next」。
- 在「File Share Path」(檔案共用路徑) 中,輸入您建立的共用路徑 (例如
\\witness-server\quorum),然後按一下「Next」(下一步)。 - 確認設定,然後依序點選「Next」和「Finish」。
設定 Always On 可用性群組
請對兩個 SQL Server VM 執行本節步驟,啟用及設定可用性群組。
在 SQL Server 中啟用可用性群組
- 開啟 SQL Server 組態管理員。
- 在瀏覽器樹狀結構中,選取「SQL Server Services」。
- 在「SQL Server (MSSQLSERVER)」上按一下滑鼠右鍵,然後選取「內容」。
- 選取「Always On 高可用性」分頁標籤,然後選取「Enable Always On availability groups」。
- 依序點選「Apply」和「OK」。重新啟動 SQL Server 服務。
為可用性群組建立資料庫
- 使用 SSMS 連線至
sqlnode1。 - 在「Object Explorer」窗格中,在「Databases」上按一下滑鼠右鍵,然後選取「New Database」。
- 在「資料庫名稱」部分輸入
MyDB1,然後點選「確定」。 - 在
MyDB1上按一下滑鼠右鍵,然後依序選取「Tasks」>「Back Up」。執行完整備份。確認資料庫復原模式為「Full」。 - 在
MyDB1上按一下滑鼠右鍵,然後依序選取「Tasks」>「Back Up」。執行交易記錄備份。 - 將完整備份和交易記錄備份檔案複製到
sqlnode2。 - 使用 SSMS 連線至
sqlnode2。在「Databases」上按一下滑鼠右鍵,然後選取「Restore Database」。 - 從
sqlnode1還原MyDB1的完整備份,並在「Options」(選項) 頁面中指定「RESTORE WITH NORECOVERY」。 - 在
sqlnode2上,在MyDB1上按一下滑鼠右鍵,然後依序選取「Tasks」>「Restore」>「Transaction Log」。還原交易記錄備份,並指定 RESTORE WITH NORECOVERY。
建立可用性群組
- 使用 SSMS 連線至
sqlnode1。 - 在「Object Explorer」中,在「Always On 高可用性」上按一下滑鼠右鍵,然後選取「New Availability Group Wizard」。
- 指定可用性群組名稱,例如
sql-ag。 - 選取要納入的資料庫
MyDB1。 - 在「Specify Replicas」(指定副本) 頁面中,按一下「Add Replica」(新增副本) 並連線至
sqlnode2。 - 為兩個副本啟用「自動容錯移轉」,將「可用性模式」設為「同步提交」,並將「可讀取的次要副本」設為「是」。
- 前往「Endpoints」(端點) 分頁,確認使用的是通訊埠
5022。 - 在「Select Initial Data Synchronization」(選取初始資料同步處理) 頁面中,選取「Join only」(僅加入)。
- 完成精靈,建立可用性群組。
為可用性群組建立 DNN 資源
不使用負載平衡器,而是使用分散式網路名稱 (DNN),將用戶端流量轉送至可用性群組接聽器。
- 開啟「容錯移轉叢集管理工具」,展開「角色」,然後選取可用性群組角色。
- 在「Resources」中,在可用性群組資源上按一下滑鼠右鍵,然後依序選取「Add Resource」>「Client Access Point」。
- 提供 DNN 接聽器的「Name」(名稱),然後完成精靈。
- 將新的 DNN 資源上線。
- 根據預設,叢集會將 DNN DNS 名稱繫結至叢集中的所有節點。如果叢集中的節點未託管 SQL Server 副本,您必須將這些節點從 DNN 的可能擁有者中排除:
- 在您建立的 DNN 資源上按一下滑鼠右鍵,然後選取「Properties」。
- 取消勾選非可用性群組副本的節點。
- 按一下 [確定]。
- 更新應用程式連線字串,連線至 DNN 接聽器名稱,並加入
MultiSubnetFailover=True。
測試容錯移轉
使用 SSMS 連線至
sqlnode1或sqlnode2,並執行下列查詢,檢查哪個副本是主要副本,以及兩個副本是否都已設定為同步提交和自動容錯移轉:-- Check primary replica SELECT ag.name AS AG_Name, ar.replica_server_name as PrimaryReplica FROM sys.dm_hadr_availability_replica_states AS ars JOIN sys.availability_groups AS ag ON ag.group_id = ars.group_id JOIN sys.availability_replicas ar ON ar.replica_id = ars.replica_id WHERE ars.role_desc = 'PRIMARY';
-- Check replica configuration SELECT replica_server_name, availability_mode_desc, failover_mode_desc FROM sys.availability_replicas WHERE group_id = (SELECT group_id FROM sys.availability_groups WHERE name = N'sql-ag');
如要啟動手動容錯移轉,請在 SSMS 中連線至次要副本,然後執行下列指令:
ALTER AVAILABILITY GROUP [sql-ag] FAILOVER;
容錯移轉後,請執行
SELECT @@SERVERNAME;或重新連線至 DNN 接聽器並檢查伺服器名稱,藉此驗證新的主要執行個體。您也可以在 SSMS 中查看可用性群組狀態,方法是在「Always On 高可用性」下方,在可用性群組上按一下滑鼠右鍵,然後選取「顯示資訊主頁」。
清除所用資源
刪除專案
為避免系統向您的 Cloud de Confiance 專案收取本教學課程所用資源的費用,請刪除專案。詳情請參閱「關閉專案」。