在 Azure VM 上,如果我将一个大磁盘划分为多个驱动器(希望更连续 - 不确定它是否虚拟重要),如果需要空间,那么它需要动态分配(至于操作系统)?或者当似乎需要扩展时,我通常应该坚持每个驱动器的磁盘吗?
参考:Azure 托管磁盘
SQL Server 2019;视窗 2016
C:操作系统映射到 128 GB (S10 @ 60mb/sec)。
到目前为止,一切都很好。我有用于数据、索引、临时数据库、日志和本地备份的驱动器。
数据、索引、TempDB 磁盘模式:读/写;日志和本地备份:(大部分)顺序写入。
现在这里变得不确定:
我是否更喜欢拥有多个 Azure 磁盘(例如 1 x P10 @ 100mb/s [128 GB]、3 x P20 @150mb/s [512 GB])
或者我应该做得更大(吞吐量更高)并将所有内容存储在同一个磁盘上(例如 P40 @250mb/s [2 TB])?
这允许为操作系统提供 512GB 的数据驱动器、512GB 的索引驱动器和 128GB 的 TempDB 驱动器。512 GB 的 SQL 日志和备份。
这个问题涉及通过操作系统访问数据库文件的 SQL Server,以及暴露虚拟磁盘的虚拟基础架构......
针对 P40 磁盘的每个线程是否有 250mb/s 的容量?如果我在 VM 的操作系统中将此 2TB VHD 文件分配为 4 个逻辑磁盘......它会比分配为单个驱动器的 3 个较低层磁盘的性能更高吗?
根据fsutil fsinfo ntfsinfo [drive letter]:\
.
它是来自具有 512 个存储驱动器的本地服务器的 DR 复制节点。
VM 报告 9012 错误,这可能是由于存储或复制服务器和主服务器之间的差异。
我正在尝试评估这是否会引起可用性组延迟和最佳 SQL Server 设置的担忧,如果我要将它变成主要的。
我正在阅读的所有内容似乎都在说不推荐使用 512e 和 SQL Server。但是这些文章是 2011 年的 - 11 年没有任何变化吗?或者是512e仍然不是要走的路。
Azure 文档没有提及这些,我只能推测 512e 对于新的 SSD 磁盘可能是可选的。
注意:启用跟踪标志 1800 并未解决该错误。
Microsoft 甚至不推荐 HDD,现在仅将它们列为 Dev 的推荐。我在等着看我是否有能力打开支持票,但也想知道人们在这里的经历。
我正在尝试在 Azure 中构建具有 2 个节点的 SQL Server AlwaysOn 可用性组。我创建了 2 个 SQL Server 虚拟机并托管创建了一个集群,其中两个节点都作为该集群的成员。
我已按照本文中的步骤构建 Windows 集群 https://learn.microsoft.com/en-us/azure/azure-sql/virtual-machines/windows/availability-group-manually-configure-tutorial with 1重大变化,我使用 powershell 创建集群。
New-Cluster -Name SQLClusterName -Node ("SQLNode1","SQLNode2") –StaticAddress 172.100.10.100 -NoStorage -ManagementPointNetworkType Singleton
因为,如果我使用故障转移集群管理器来构建集群,它并没有创建集群核心资源,也没有给我选择集群 IP 的选项。
无论如何,一旦集群配置完成,我尝试配置 AlwaysOn 可用性组,但向导无法创建 AlwaysOn 可用性组,抱怨它无法连接到集群。
我在两个节点上都进行了,我意识到我可以 ping 到集群名称或 IP,并且只能从所有者节点获得响应。从集群非所有者节点我无法 ping 集群名称或 IP。如果我将集群故障转移到第二个节点,则我的 ping 行为将相反。
其他人都经历过这个问题吗?是这样,你是如何设法解决的?非常感谢任何帮助或正确方向的指针。提前致谢。
这是我今天早些时候遇到的一个问题,最终找到了答案。不介意更好的东西,但想把它提供给同样需要的人。
首先,在 Azure VM 上,您可以免费获得一个 D:\ 驱动器,即 SSD。需要注意的是,它通常会在 VM 重新启动时被破坏。高写入量的 MS 最佳实践是将此驱动器用于 tempdb。他们没有进入的是它没有格式化为 64kb。隐藏的 pagefile.sys 位于此处,因此如果您尝试重新格式化(它会失败),您需要考虑到这一点。
您需要将他们的启动 powershell 脚本更改为更像下面的内容,我首先完全删除页面文件,然后格式化为 64k,按照脚本通常的方式创建文件,然后在启动之前将 pagefile.sys 放回原处启动服务。
$SQLService=”SQL Server (MSSQLSERVER)”
$SQLAgentService=”SQL Server Agent (MSSQLSERVER)”
$tempfolder=”D:\SQLTEMP”
if (!(test-path -path $tempfolder)) {
(Get-WmiObject -Class Win32_PageFileSetting).Delete()
Format-Volume -DriveLetter D -FileSystem NTFS -AllocationUnitSize 65536 -NewFileSystemLabel "Temporary Storage" -Confirm:$false
New-Item -ItemType directory -Path $tempfolder
Set-WMIInstance -Class Win32_PageFileSetting -Arguments @{ Name = 'D:\pagefile.sys';}
}
Start-Service $SQLService
Start-Service $SQLAgentService
有没有人有更好的或在这个过程中看到任何漏洞?
为了给其他人更多的自动化/帮助,我还编写了上面的脚本以及创建它的触发器,并在启动后使用下面的 30 秒运行它。这基本上允许某人自动执行我参考的 cloudblogs 文章中的步骤。
#1 - Set Services to manual startup so that windows scheduler will start after tempdb adjusted
Set-Service -Name MSSQLSERVER -StartupType Manual
Set-Service -Name SQLSERVERAGENT -StartupType Manual
IF (Get-Service MsDtsServer130 -ErrorAction SilentlyContinue)
{
Set-Service -Name MsDtsServer130 -StartupType Manual
}
<#2 - using below powershell script to create the startup script#>
$script=
'
$SQLService="SQL Server (MSSQLSERVER)"
$SQLAgentService="SQL Server Agent (MSSQLSERVER)"
$tempfolder="D:\SQLTEMP"
if (!(test-path -path $tempfolder)) {
(Get-WmiObject -Class Win32_PageFileSetting).Delete()
Format-Volume -DriveLetter D -FileSystem NTFS -AllocationUnitSize 65536 -NewFileSystemLabel "Temporary Storage" -Confirm:$false
New-Item -ItemType directory -Path $tempfolder
Set-WMIInstance -Class Win32_PageFileSetting -Arguments @{ Name = "D:\pagefile.sys";}
}
Start-Service $SQLService
Start-Service $SQLAgentService
IF (Get-Service MsDtsServer130 -ErrorAction SilentlyContinue)
{
Start-Service -Name MsDtsServer130
}
'
Out-File -FilePath C:\SQL-startup.ps1 -InputObject $script -NoClobber
<#3 - using below script to create a scheduled task to call a powershell script that creates a folder on the d drive.#>
$trigger = New-JobTrigger -AtStartup -RandomDelay 00:00:30
Register-ScheduledJob -Trigger $trigger -FilePath C:\SQL-startup.ps1 -Name CreateSqlFolderOnDSsd
**编辑,上面假设 SQL 2016 和至少 powershell 5(虽然我不知道具体的依赖关系,但至少应该在 v4 上工作)。
我们能否在不停止 VM 本身的情况下扩展 Azure VM 中的磁盘。(在线的)
我们正在寻找一种在线方法来扩展我们无法破解的磁盘。我们有某些应用程序迁移到 IAAS,这些应用程序有时需要磁盘扩展。
根据下面的 MSDN 博客,我看到有 2 种方法可以创建负载均衡器侦听器。
但我没有找到需要使用它们的确切场景?我希望外部应用程序连接到我的高度可用的 SQL 服务器(AlwaysOn)。我应该配置哪个负载均衡器?
配置集群后,您将需要创建用于所有客户端访问的内部负载均衡器 (ILB)。连接到 SQL Server 的客户端将需要连接到 ILB,而不是直接连接到群集 IP 地址。如果您此时尝试直接连接到集群,您会看到无法从任何远程系统连接到集群。此时甚至 SQL Server Management Studio 也无法直接连接到集群
更新如何配置它
我正在使用下面的脚本来创建内部负载均衡器并且它成功了。
// Define variables
$ServiceName = "XYZ"
$AGNodes = "ABC01","ABC02"
$SubnetName = "MYSUBNETNAME"
$ILBStaticIP = "10.249.XXX.XXX"
$ILBName = "AGListenerLB"
// Create the ILB
Add-AzureInternalLoadBalancer -InternalLoadBalancerName $ILBName -SubnetName $SubnetName -ServiceName $ServiceName -StaticVNetIPAddress $ILBStaticIP
// Configure a load balanced endpoint for each node in $AGNodes using ILB
ForEach ($node in $AGNodes)
{
Get-AzureVM -ServiceName $ServiceName -Name $node | Add- AzureEndpoint -Name "ListenerEndpoint" -LBSetName "ListenerEndpointLB" -Protocol tcp -LocalPort 1433 -PublicPort 1433 -ProbePort 59999 -ProbeProtocol tcp -ProbeIntervalInSeconds 10 -InternalLoadBalancerName $ILBName -DirectServerReturn $true | Update-AzureVM
}
一旦上面的脚本成功,那么我们需要运行下面的脚本
# Define variables
$ClusterNetworkName = "Cluster Network 1" # the cluster network name (Use Get-ClusterNetwork on Windows Server 2012 of higher to find the name)
$IPResourceName = "DEVAG_10.249.XXX.XXX" # the IP Address resource name
$ILBIP = “10.249.XXX.XXX” # the IP Address of the Internal Load Balancer (ILB)
Import-Module FailoverClusters
如果您使用的是 Windows Server 2012 或更高版本,请使用 Get-Cluster Resource 命令。如果您使用的是 Windows Server 2008 R2,请使用 cluster res 命令。这两个命令都被注释掉了。选择适用于您的环境的选项并删除行首的 # 以将注释转换为可执行的代码行。
Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$ILBIP";"ProbePort"="59999";"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"EnableDhcp"=0}
# cluster res $IPResourceName /priv enabledhcp=0 address=$ILBIP probeport=59999 subnetmask=255.255.255.255