SQL Server
本節逐步執行建立 SQL Server 所需的建置作業。 在 VPC 中訂購虛擬伺服器實例之後,客戶可以選擇使用具有預先配置安裝的組合供應項目,或使用「自帶授權 (BYOL)」及「自行執行 (DIY)」建置程序。 客戶應該判斷哪一種方法符合他們的需求,並相應地繼續進行。 下列資訊說明如何挑選伺服器設定檔來符合您的需求。
訂購虛擬伺服器
已針對這些部署型樣中的 SQL Server 主機選取下列規格的虛擬伺服器。 若要訂購,請遵循 使用使用者介面建立虛擬伺服器實例中的指示。
- 設定檔: mx2d-4x32
- 類型: 公用
- OS: Windows 2019
- NIC 數量: 1
- 實例儲存體: 150GB
- 資料磁區:
- sqldb01-data: 1024 GB、 Tiered-5IOPS/GB、Provider Managed Encryption
- sqldb01-log: 1024 GB、 Tiered-5IOPS/GB、Provider Managed Encryption
運算
當您為 VPC 佈建 IBM Cloud 虛擬伺服器時,您可以從三個設定檔系列中選取一個 實例設定檔 : 平衡、運算及記憶體。
- 平衡-對於計算的每 1 個 vCPU ,平衡設定檔的記憶體比例為 4 GiB。
- 計算-計算設定檔對於計算的每 1 個 vCPU 具有 2 GiB 記憶體比例。
- 記憶體-記憶體設定檔最適用於記憶體密集工作負載 (例如資料庫應用程式) ,且每 1 顆計算 vCPU 有 8 GiB 記憶體比例。
「線上交易式處理 (OLTP)」通常涉及大量使用者在資料庫中大量插入、更新、刪除少量資料。 對於正式作業 MS SQL OLTP 環境,建議的下限為 4 個 vCore ,以及來自記憶體設定檔系列 mx2-4x32的 32 GB 記憶體。 如需更大的需求, 記憶體設定檔 會延伸至 mx2-128x1024 ,其具有 128vCPU、1024 GiB RAM 及 80 Gbps 網路頻寬上限。
SQL Server 資料倉儲環境通常需要比 8:1 更高的記憶體至 vCPU 需求,因此您可能必須在 vCPU 上過度佈建才能滿足記憶體需求。
記憶體設定檔系列包括隨實例儲存空間佈建的設定檔。 佈建實例時, 實例儲存空間 會提供直接連接至虛擬伺服器實例的固態硬碟。 實例儲存體磁碟提供快速的暫時儲存體,以改善許多工作負載的效能,包括交易式處理。
儲存體
在 IBM Cloud VPC上規劃 SQL Server 時,需要考量三個儲存空間元件: 啟動磁區、資料磁區及實例儲存空間。
-
開機磁區-建立虛擬伺服器時,會從區塊儲存空間建立 100 GB、3 IOPS/GB 開機磁區,並連接至實例。 依預設,開機磁區由 IBM管理的加密進行加密,不過,客戶管理的加密是一個選項。 無法分離、刪除或增加或減少開機磁區大小。 當刪除虛擬伺服器時,一律會刪除開機磁區。 開機磁區包含作業系統檔案。
-
資料磁區-資料磁區會運用 VPC 的區塊儲存體,並提供 Hypervisor 裝載的高效能資料儲存體,以備援方式儲存在「可用性區域 (AZ)」中的多個實體磁碟上,以防止因任何單一元件故障而導致資料流失。 資料磁區範圍從 10 GB 到 2000 GB ,且 IOPS 上限會根據磁區大小及選取的 IOPS 層級設定檔而有所不同。 例如, 5 IOPS/GB 磁區 2000 GB 的最大 IOPS 是 10,000 IOPS。 您可以選取最符合您需求的磁區設定檔,因為磁區設定檔是以三個預先定義的 IOPS 層級或自訂 IOPS 設定檔來提供:
- 3 IOPS/GB-一般用途層級設定檔提供適用於虛擬伺服器實例「平衡」設定檔的 IOPS/GB 效能。
- 5 IOPS/GB-此設定檔提供適用於虛擬伺服器實例 Compute 設定檔的 IOPS/GB 效能。
- 10 IOPS/GB-通常用於虛擬伺服器實例記憶體設定檔。
如需相關資訊,請參閱 IOP 層級。 可連接至虛擬伺服器的磁區數目取決於虛擬伺服器包含的 vCPU 數目。 如需相關資訊,請參閱磁區連接限制。 可以視需要分離資料磁區並將其連接至虛擬伺服器。 依預設,資料磁區會使用 IBM 管理的加密進行加密。 您也可以使用自己的根金鑰來加密資料磁區。 請參閱 區塊儲存空間容量及效能 建議,以選擇最佳區塊儲存空間磁區大小及效能層次。
-
實例儲存體-虛擬伺服器可以選擇性地包括 實例儲存體 ,該儲存體提供在佈建實例時直接連接至虛擬伺服器實例的固態硬碟。 實例儲存體磁碟提供快速的暫時儲存體,以改善許多工作負載的效能,包括交易式處理。 儲存在實例儲存空間上的資料是暫時的,表示它直接關聯於實例的生命週期。 實例儲存空間磁碟會隨實例自動建立及毀損。 不過,當實例重新開機時,實例儲存體資料不會遺失。 如果擔心效能,則 MS SQL Server tempdb 可以放置在實例儲存體上
如需相關資訊,請參閱 關於 Block Storage for VPC。
在極少的維護作業下,可能需要將虛擬伺服器即時移轉至新的主機。 虛擬伺服器將經歷大約 10 秒的短暫暫停,在某些情況下最多 30 秒。 在此處理程序中,虛擬伺服器實例不會重新開機。 不過,對於具有「實例儲存體」的虛擬伺服器,則會重新啟動伺服器。 如需進一步資訊,請參閱 瞭解雲端維護作業 。
連接至伺服器
Refer to 連接至 Windows 實例 to access the Windows Administrator's password, however, in short the following commands are used from your laptop, where the instances command returns the <INSTANCE_ID> of the virtual server:
ibmcloud is instances
ibmcloud is instance-initialization-values <INSTANCE_ID> --private-key @~/.ssh/id_rsa
結合網域
在安裝 AD 伺服器之前,不應該啟動此作業。
在 SQL Server 上的 Powershell 提示中,輸入下列指令,讓伺服器加入網域:
Get-DnsClientServerAddress
會擷取 IPv4 乙太網路介面的介面索引,以便可以將 DNS 從 IBM Cloud DNS 伺服器變更為 ADDNS 伺服器。 如果遺漏此步驟,則Add-Computer
指令會失敗,因為伺服器將無法找到網域控制站。Add-Computer -Server
僅接受 FQDN。Add-Computer
指令會<domain>
使用 ADDNS 伺服器<ad_server_fqdn>
將伺服器新增至網域,然後重新啟動伺服器以使變更生效。
$dns = "<ADDNS_IP_Address>"
$adserver = "<ad_server_fqdn>"
$domain = "<domain>"
$user = $domain + "\Administrator"
$password = "<password>"
$out=Get-DnsClientServerAddress -InterfaceAlias Ethernet -AddressFamily IPv4 | Select-Object -Property InterfaceIndex
Set-DnsClientServerAddress -InterfaceIndex $out.InterfaceIndex -ServerAddresses ($dns)
$password = ConvertTo-SecureString $password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ($user, $password)
Add-Computer -DomainName $domain -Server $adserver -Restart -Credential $credential
連接至防禦主機 SMB 共用
下列 PowerShell 指令可用來達成下列:
- 檢查以查看 SMB2的狀態,通常在虛擬伺服器映像檔中停用此通訊協定。 如果已停用,則可以使用
Set-SmbServerConfiguration
來啟用它,因為 SMB 需要它才能運作。 - 使用使用者
<smbuser>
及密碼<share_password>
,以 Z: 磁碟機身分連接至<bastion_hostname>\Downloads
上的共用。
$bastion = "<bastion_hostname>"
$user = "<smbuser>"
$shareuser = $bastion + '\' + $user
$sharepassword = "<share_password>"
$path = '\\' + $bastion + '\' + 'Downloads'
Get-SmbServerConfiguration | Select EnableSMB2Protocol
Set-SmbServerConfiguration -EnableSMB2Protocol $true -Force
New-SmbMapping -LocalPath 'Z:' -RemotePath $path -UserName $shareuser -Password $sharepassword -Persistent $true
配置儲存體
Microsoft SQL on VPC 部署型樣利用 Microsoft Storage Spaces。 「儲存體空間」是 Windows Server 中的一種技術,概念上類似於 RAID ,並在作業系統中實作。 儲存體空間可以用來將資料磁區分組到儲存區中,然後使用儲存區中的容量來建立儲存體空間 (虛擬磁碟)。 儲存體空間在 Windows 作業系統中顯示為一般磁碟機,您可以從中建立格式化磁區。
配置儲存體空間
從 IBM Cloud 主控台中,擷取 SQL Server 的儲存磁區資訊。 例如:
sqldb01-data: 0787-ff88b86a-1e29-4f0d-8a69-67b4deda3d5c-lpcn2
sqldb01-log: 0787-1d41b85e-4e8a-499e-b889-13b96db5251c-2w2n2
下列 PowerShell 指令用來擷取 SerialNumber 的 Windows OS 視圖,以在後續的 PowerShell 指令中使用; Get-StoragePool -IsPrimordial $true | Get-PhysicalDisk -CanPool $True
。 如下列範例所示,可以擷取 SerialNumbers:
Number FriendlyName SerialNumber MediaType CanPool OperationalStatus HealthStatus Usage Size
------ ------------ ------------ --------- ------- ----------------- ------------ ----- ----
1 QEMU QEMU HARDDISK cloud-init-0787_1c6e0975-a584-43ca-b Unspecified True OK Healthy Auto-Select 378 KB
5 Red Hat VirtIO cloud-init- Unspecified True OK Healthy Auto-Select 44 KB
3 Red Hat VirtIO 0787-ff88b86a-1e29-4 Unspecified True OK Healthy Auto-Select 1 TB
4 Red Hat VirtIO 0787-1d41b85e-4e8a-4 Unspecified True OK Healthy Auto-Select 1 TB
2 Red Hat VirtIO 70ab84c0-0e12-4fc2-a Unspecified True OK Healthy Auto-Select 139.7 GB
建立 sqldatapool 儲存區
下列 PowerShell 指令可用來配置 sqldatapool 儲存區,請將 <SerialNumber>
取代為 sqldb01-data 磁區的序號。 此指令可達成下列各項:
- 建立稱為 sqldatapool 的儲存區。
- 在此儲存區中建立稱為 sqldata 的虛擬磁碟,以進行分段 (-ResiliencySettingName simple)。
- 虛擬磁碟以 GPT 分割區起始設定,並獲指派磁碟機代號 D。
- 虛擬磁碟會使用區塊大小為 64KB 的 NTFS 檔案系統來格式化,並指派 SQLDATA 標籤。
$dataserial = "<SerialNumber>"
New-StoragePool -FriendlyName "sqldatapool" -StorageSubsystemFriendlyName "Windows Storage*" -PhysicalDisks (Get-PhysicalDisk -SerialNumber $dataserial) | New-VirtualDisk -FriendlyName "sqldata" -Interleave 65536 -NumberOfColumns 1 -ResiliencySettingName simple –UseMaximumSize | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -DriveLetter "D" -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel "SQLDATA" -AllocationUnitSize 65536 -Confirm:$false -UseLargeFRS
如果您使用多個資料磁區以提高效能,則必須修改此 PowerShell 指令。 2 個磁碟的範例:
New-StoragePool -FriendlyName "sqldatapool" -StorageSubsystemFriendlyName "Windows Storage*" -PhysicalDisks (Get-PhysicalDisk | where {($_.SerialNumber -eq "<Disk1_SerialNumber>") -or ($_.SerialNumber -eq "<Disk2_SerialNumber>")}) | New-VirtualDisk -FriendlyName "sqldata" -Interleave 65536 -NumberOfColumns 2 -ResiliencySettingName simple –UseMaximumSize | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -DriveLetter "D" -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel "SQLDATA" -AllocationUnitSize 65536 -Confirm:$false -UseLargeFRS
-NumberOfColumns 符合要分段資料的磁碟數目。
建立 sqllogpool 儲存區
下列 PowerShell 指令可用來配置 sqllogpool 儲存區,請將 <SerialNumber>
取代為 sqldb01-log 磁區的序號。 此指令可達成下列各項:
- 建立稱為 sqllogpool 的儲存區。
- 在此儲存區中建立稱為 sqllog 的虛擬磁碟以進行分段 (-ResiliencySettingName simple)。
- 虛擬磁碟以 GPT 分割區起始設定,並獲指派磁碟機代號 E。
- 虛擬磁碟會以區塊大小為 64KB 的 NTFS 檔案系統來格式化,並指派 SQLLOG 標籤。
$logserial = "<SerialNumber>"
New-StoragePool -FriendlyName "sqllogpool" -StorageSubsystemFriendlyName "Windows Storage*" -PhysicalDisks (Get-PhysicalDisk -SerialNumber $logserial) | New-VirtualDisk -FriendlyName "sqllog" -Interleave 65536 -NumberOfColumns 1 -ResiliencySettingName simple –UseMaximumSize | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -DriveLetter "E" -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel "SQLLOG" -AllocationUnitSize 65536 -Confirm:$false -UseLargeFRS
起始設定 tempdb 的實例儲存體
tempdb 的磁碟機不使用「儲存體空間」,因為實例儲存體僅包含單一磁區。 下列 PowerShell 指令可用來配置磁區,請將 <SerialNumber>
取代為實例儲存磁區的序號。 此指令可達成下列各項:
- 建立以 GPT 分割區起始設定的磁碟機,並指派磁碟機代號 F。
- 磁碟機使用 NTFS 檔案系統格式化,區塊大小為 64KB ,並指派 TEMPDB 標籤。
$tempdbserial = "<SerialNumber>"
Get-Disk | Where SerialNumber -eq $tempdbserial | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -DriveLetter "F" -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel "TEMPDB" -AllocationUnitSize 65536 -Confirm:$false -UseLargeFRS
安裝 SQL Server
SQL Server 安裝程式已用來下載媒體,並將檔案解壓縮至防禦主機。 使用下列 PowerShell 指令 Copy-Item "Z:\SQL2019\Extracted" -Destination "C:\Users\Administrator\Downloads\SQL2019\Extracted\" -Recurse
,將必要的檔案從共用的 SMB 複製到 SQL Server 的本端磁碟,以便從本端磁碟執行安裝。
在此階段有三個選項:
- 以互動方式執行安裝程式,以安裝 SQL Server。
- 以互動方式執行安裝程式,以擷取後者安裝的 ConfigurationFile.ini。
- 使用現有的 ConfigurationFile.ini ,即這組文件的其中一個表單,並安裝 SQL Server。
本文件假設您使用選項 3 ,已建立 ConfigurationFile.ini ,並使用下列指令來安裝 SQL Server:
C:\Users\Administrator\Downloads\SQL2019\Extracted\SETUP.exe /ConfigurationFile=C:\Users\Administrator\Downloads\ConfigurationFile.ini /TCPENABLED="1" /SQLSVCPASSWORD="<svc_password>" /AGTSVCPASSWORD="<agt_password>"
<svc_password>
是用於 SQL Server 服務之網域服務帳戶的密碼, <agt_password>
是用於 SQL Agent 之網域服務帳戶的密碼。
依預設,安裝 SQL Server 時會停用 TCP 通訊協定,且 /TCPENABLED="1"
會啟用 TCP。
驗證已在伺服器介面及迴圈位址 (127.0.0.1) 上啟用 TCP/IP:
- 在 SQL Server 上,開啟 SQL Server Configuration Manager。
- 展開 SQL Server 網路配置節點,以檢視 MSSQLSERVER 的通訊協定。
- 在詳細資料區域中,用滑鼠右鍵按一下 TCP/IP 通訊協定,然後選擇內容。
- 從「TCP/IP 內容」視窗中,選擇 IP 位址標籤。
- 尋找具有伺服器的 IPv4 IP 位址及迴圈位址 (127.0.0.1) 的介面。
- 驗證「已啟用」是否設為「是」。 如果設為「否」,請選取「是」。
- 再按一下確定,然後再按一下確定。
- 必須重新啟動服務,變更才會生效。
- 選取 SQL Server 服務,然後重新啟動 SQL Server 服務。
配置 Windows 防火牆
使用下列指令,以容許 TCP 1433 通過 Windows 防火牆 New-NetFirewallRule -DisplayName 'SQL-Inbound' -Profile Domain -Direction Inbound -Action Allow -Protocol TCP -LocalPort 1433
如果您要配置可用性群組,請使用下列指令來容許 TCP 5022 通過 Windows 防火牆
New-NetFirewallRule -DisplayName 'SQL-AG-Inbound' -Profile Domain -Direction Inbound -Action Allow -Protocol TCP -LocalPort 5022
配置 NTP 伺服器
若要從 AD 網域階層自動同步化時間,請執行下列指令:
w32tm /config /syncfromflags:domhier /update
net stop w32time
net start w32time
w32tm /query /status
安裝 Powershell SQL Server 模組
由於 SQL Server 未連接網際網路,因此需要將模組下載至防禦主機,並複製到 SQL Server 的 C:\Program Files\WindowsPowerShell \ Modules 目錄,然後安裝。 下列 PowerShell 指令假設您已將模組下載至防禦主機,並已配置連接至 Z 的共用: 磁碟機
Copy-Item "Z:\SqlServer" -Destination "C:\Program Files\WindowsPowerShell\Modules" -Recurse
Import-Module SQLServer