SQL Server
本部分将逐步完成创建 SQL Server 所需的构建任务。 客户可以选择将捆绑产品与预先配置的安装配合使用,或者在订购 VPC 中的虚拟服务器实例后,使用 "自带许可证" (BYOL) 和 "自带许可证" (DIY) 构建过程。 客户应确定与他们的需求匹配的方法,并相应地进行操作。 以下信息说明了如何选择服务器概要文件以满足您的需求。
订购虚拟服务器
为这些部署模式中的 SQL Server 主机选择了以下规范的虚拟服务器。 要进行排序,请遵循 使用 UI 创建虚拟服务器实例中的指示信息。
- 概要文件: mx2d-4x32
- 类型: 公用
- 操作系统: Windows 2019
- NIC 数量: 1
- 实例存储器: 150GB
- 数据卷:
- sqldb01-data: 1024 GB , Tiered-5IOPS/GB,提供者管理的加密
- sqldb01-log: 1024 GB , Tiered-5IOPS/GB,提供者管理的加密
计算
为 VPC 供应 IBM Cloud 虚拟服务器时,请从以下三个概要文件系列之一中选择 实例概要文件 : 均衡,计算和内存。
- 均衡均衡概要文件的内存比率为 4 每 1 个计算 vCPU 的内存 GiB。
- 计算-计算概要文件的内存比率为 2 GiB ,每 1 个计算 vCPU。
- 内存-内存概要文件最适用于内存密集型工作负载 (例如数据库应用程序) ,并且具有比率 8 每 1 个计算 vCPU 的内存 GiB。
联机事务处理 (OLTP) 通常涉及通过大量用户的大量事务在数据库中插入,更新,删除少量数据。 对于生产 MS SQL OLTP 环境,建议的最小值是 4 vCore with 32 GB memory profile family , mx2-4x32。 对于较大的需求, 内存概要文件 扩展至 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 的块存储器,并提供在可用性区域 (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 秒。 未在此过程中重新引导虚拟服务器实例。 但是,对于具有实例存储器的虚拟服务器,将重新启动该服务器。 请参阅 了解 Cloud Maintenance Operations 以获取更多信息。
连接到服务器
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
命令使用 ADDNS 服务器<ad_server_fqdn>
将服务器添加到域<domain>
,然后重新启动服务器以使更改生效。
$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 存储空间。 存储空间是 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 操作系统视图,以便在后续 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。
- 该驱动器使用块大小为 64KB 的 NTFS 文件系统进行格式化,并分配了 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 配置管理器。
- 展开 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
如果要配置可用性组,请使用以下命令通过 Windows 防火墙来允许 TCP 5022
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