本教學課程說明如何使用 Internet Small Computer System Interface (iSCSI) 通訊協定,透過 Google Cloud NetApp Volumes 區塊儲存空間,在 Compute Engine 虛擬機器 (VM) 執行個體上部署 Microsoft SQL Server Always On 可用性群組。使用 NetApp Volumes 做為 SQL Server 儲存空間,即可存取高效能的全代管儲存服務,並享有快照和複製等進階資料管理功能。
目標
本教學課程會逐步引導您完成下列工作:費用
本教學課程使用下列 Google Cloud計費元件:如要根據預測用量估算費用,請使用 Pricing Calculator。
事前準備
開始之前,請確認您具備以下項目:
-
在 Google Cloud 控制台的專案選擇器頁面中,選取或建立 Google Cloud 專案。
選取或建立專案所需的角色
- 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您已獲授角色,即可選取任何專案。
-
建立專案:如要建立專案,您需要「專案建立者」角色 (
roles/resourcemanager.projectCreator),其中包含resourcemanager.projects.create權限。瞭解如何授予角色。
- 具有 Compute Engine、網路、身分與存取權管理和 Cloud Storage 管理權限的專案。 Google Cloud
- 虛擬私有雲網路,且子網路位於目標地區。
- 在該區域內建立的 Active Directory 和 DNS 服務。
- 有權將電腦加入網域,並使用遠端桌面通訊協定存取 VM 的 Active Directory 使用者。
- 確認 VPC 防火牆規則允許節點間的 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。
-
在 Google Cloud 控制台中啟用 Cloud Shell。
設定網域帳戶
為 SQL Server 設定兩個 Active Directory 帳戶:
- 安裝帳戶:具備網域管理員權限的帳戶 (例如 DOMAIN\DomainAdmin),可登入 VM 並設定叢集和可用性群組。
- 服務帳戶:SQL Server VM 上的 SQL Server 服務和 SQL 代理程式服務帳戶 (例如 DOMAIN\sqlsvc)。
為 SQL Server 建立 Compute Engine VM
在 Windows Server 2025 上建立兩個執行 SQL Server 2022 Enterprise 的 Compute Engine 執行個體 (sqlnode1 和 sqlnode2):
前往 Google Cloud 控制台的「Create an instance」(建立執行個體) 頁面。
在「Name」(名稱) 中輸入
sqlnode1。在「機器設定」部分,選取「一般用途」,然後執行下列操作:
- 在「系列」清單中選取「N4」。
- 在「機型」清單中,選取「n4-highmem-8 (8 個 vCPU,64 GB 記憶體)」。
選取設定虛擬私有雲的「Region」(區域) 和「Zone」(可用區)。
在「Boot disk」(開機磁碟) 專區中,按一下「Change」(變更),然後執行下列操作:
- 在「Public images」(公開映像檔) 分頁中,從「Operating system」(作業系統) 清單選取「SQL Server on Windows Server」(Windows Server 上的 SQL Server)。
- 在「版本」清單中,選取「Windows Server 2025 Datacenter 上的 SQL Server 2022 Enterprise」。
- 在「Boot disk type」(開機磁碟類型) 清單中,選取「Hyperdisk Balanced」(Hyperdisk Balanced)。
- 將「Size (GB)」設為
50。 - 如要儲存開機磁碟設定,請按一下「Select」(選取)。
依序展開「Advanced options」(進階選項) 和「Networking」(網路)。
在「網路介面」部分,選取專案的虛擬私有雲和「子網路」。
在「網路介面卡類型」清單中,選取「gVNIC」。
將「Network Service Tier」(網路服務級別) 設為「Premium」(進階級)。
點選「建立」。
重複上述步驟,建立名為
sqlnode2的第二個執行個體。
將伺服器加入網域,並準備叢集
請在 sqlnode1 和 sqlnode2 上執行下列步驟:
- 使用本機管理員帳戶連線至 VM。
- 在「Server Manager」(伺服器管理員) 中,選取「Local Server」(本機伺服器)。
- 選取「工作群組」連結。
- 在「電腦名稱」部分中,選取「變更」。
- 選取「網域」核取方塊,輸入網域名稱 (例如
cvsdemo.internal),然後按一下「確定」。 - 在「Windows Security」對話方塊中,輸入網域管理員帳戶的憑證,然後按一下「確定」。
- 網域顯示歡迎訊息時,請完成下列步驟: a. 按一下「確定」。 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,前往「Configuration」分頁,然後複製「Initiator Name」。或者,執行下列 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: Google Cloud 專案 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),掛接為該特定節點建立的磁碟區。
前往 Google Cloud 控制台的「Volumes」(磁碟區) 頁面,瞭解 NetApp Volumes。
選取指派給要設定節點的磁碟區。請記下 iSCSI「目標詳細資料」專區列出的「目標入口」IP 位址。您需要這些位址才能連線至磁碟區。
在 VM 中,以管理員身分開啟 PowerShell 並執行下列指令,將範例 IP 替換為磁碟區的目標入口 IP:
"10.165.128.216","10.165.128.217" | ForEach-Object { New-IscsiTargetPortal -TargetPortalAddress $_ }執行
iscsicpl.exe開啟「iSCSI Initiator Properties」。前往「目標」分頁,從清單中選取其中一個量目標,然後按一下「連結」。
在「Connect to Target」(連線至目標) 對話方塊中,選取「Enable multi-path」(啟用多重路徑),然後按一下「Advanced」(進階)。
在「進階設定」對話方塊中:
- 本機介面卡:選取「Microsoft iSCSI 啟動器」。
- 啟動器 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)」,選取「內容」,然後前往「啟動參數」分頁。
- 針對指向 C: 磁碟機的每個現有參數
-d、-e和-l,選取該參數並按一下「移除」。 - 新增下列參數,然後針對每個參數點按「新增」:
-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)。 - 在「管理」部分中,選取「驗證設定」。按照精靈的指示驗證
sqlnode1和sqlnode2。請先確認所有測試都通過,再繼續操作。 - 驗證完成後,選取「建立叢集」。
- 在建立叢集精靈中,將
sqlnode1和sqlnode2新增為叢集節點。 - 在「Access Point for Administering the Cluster」(叢集管理存取點) 中,輸入「Cluster Name」(叢集名稱) (例如
sqlcluster),並提供叢集的靜態 IP 位址。 - 按照提示建立叢集。
建立叢集仲裁的檔案共用區
建議您在第三個 VM (最好位於不同可用區) 上建立檔案共用區,做為叢集仲裁見證。
- 連線至要當做檔案共用見證的 VM。
- 在「Server Manager」(伺服器管理員) 視窗中,選取「Tools」(工具) >「Computer Management」(電腦管理)。
- 依序展開「系統工具」 >「共用資料夾」,在「共用」上按一下滑鼠右鍵,然後選取「新增共用」。
- 按照「建立共用資料夾精靈」的指示操作。在「資料夾路徑」頁面中,瀏覽或建立共用資料夾。
- 在「權限」頁面中,選取「自訂權限」。
- 按一下 新增,然後將 完整控制 授予叢集名稱物件 (CNO) 帳戶 (例如
sqlcluster$)。 - 完成精靈操作,建立共用資料夾。
設定叢集仲裁
- 在
sqlnode1上開啟「容錯移轉叢集管理員」。 - 在叢集名稱上按一下滑鼠右鍵,然後依序選取「更多動作」 >「設定叢集仲裁設定」。
- 在「設定叢集仲裁精靈」中,選取「下一步」。
- 在「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」(下一步)。 - 確認設定,然後依序按一下「下一步」和「完成」。
設定 Always On 可用性群組
對兩個 SQL Server VM 執行本節中的步驟,啟用及設定可用性群組。
在 SQL Server 中啟用可用性群組
- 開啟 SQL Server 設定管理員。
- 在瀏覽器樹狀結構中,選取「SQL Server Services」(SQL Server 服務)。
- 以滑鼠右鍵按一下「SQL Server (MSSQLSERVER)」,然後選取「內容」。
- 選取「Always On 高可用性」分頁,然後選取「啟用 Always On 可用性群組」。
- 依序點選「Apply」和「OK」。重新啟動 SQL Server 服務。
建立可用性群組的資料庫
- 使用 SSMS 連線至
sqlnode1。 - 在「物件總管」窗格中,以滑鼠右鍵按一下「資料庫」,然後選取「新增資料庫」。
- 在「資料庫名稱」中輸入
MyDB1,然後按一下「確定」。 - 以滑鼠右鍵按一下
MyDB1,然後依序選取「Tasks」 >「Back Up」。執行「完整」備份。確認資料庫復原模式為完整。 - 以滑鼠右鍵按一下
MyDB1,然後依序選取「Tasks」 >「Back Up」。執行「交易記錄」備份。 - 將完整備份和交易記錄備份檔案複製到
sqlnode2。 - 使用 SSMS 連線至
sqlnode2。以滑鼠右鍵按一下「資料庫」,然後選取「還原資料庫」。 - 從
sqlnode1還原MyDB1的完整備份,並在「選項」頁面中指定 RESTORE WITH NORECOVERY。 - 在
sqlnode2上按一下滑鼠右鍵,然後依序選取「Tasks」 >「Restore」 >「Transaction Log」。MyDB1還原交易記錄備份,同時指定 RESTORE WITH NORECOVERY。
建立可用性群組
- 使用 SSMS 連線至
sqlnode1。 - 在「物件總管」中,以滑鼠右鍵按一下「Always On 高可用性」,然後選取「新增可用性群組精靈」。
- 指定可用性群組名稱,例如
sql-ag。 - 選取要納入的資料庫
MyDB1。 - 在「Specify Replicas」(指定副本) 頁面中,按一下「Add Replica」(新增副本) 並連線至
sqlnode2。 - 為兩個複本啟用「自動容錯移轉」,將「可用性模式」設為「同步認可」,並將「可讀取的次要複本」設為「是」。
- 前往「端點」分頁,確認使用通訊埠
5022。 - 在「Select Initial Data Synchronization」(選取初始資料同步處理) 頁面上,選取「Join only」(僅加入)。
- 完成精靈,建立可用性群組。
為可用性群組建立 DNN 資源
請使用分散式網路名稱 (DNN) 將用戶端流量轉送至可用性群組接聽程式,而非負載平衡器。
- 開啟「容錯移轉叢集管理員」,展開「角色」,然後選取可用性群組角色。
- 在「Resources」中,對可用性群組資源按一下滑鼠右鍵,然後依序選取「Add Resource」 >「Client Access Point」。
- 提供 DNN 接聽程式的「名稱」,然後完成精靈。
- 將新的 DNN 資源上線。
- 根據預設,叢集會將 DNN DNS 名稱繫結至叢集中的所有節點。如果叢集中有未代管 SQL Server 副本的節點,請務必將這些節點從 DNN 的可能擁有者中排除:
- 在您建立的 DNN 資源上按一下滑鼠右鍵,然後選取「屬性」。
- 取消勾選任何非可用性群組副本的節點。
- 按一下 [確定]。
- 更新應用程式連線字串,以連線至 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 High Availability」下方,對可用性群組按一下滑鼠右鍵,然後選取「Show Dashboard」。
清除所用資源
刪除專案
如要避免系統向您的 Google Cloud 專案收取本教學課程所用資源的費用,請刪除專案。詳情請參閱「關閉專案」。