优化弹性 SAN 的性能

本文提供有关使用 Azure 弹性 SAN 的环境获得最佳性能的一些常规指南。

客户端优化

一般建议

Windows 和 Linux 虚拟机

  • 为了获得最佳性能,请将虚拟机(VM)和弹性 SAN 部署到同一区域和同一区域。

  • VM 存储 I/O 到弹性 SAN 卷使用 VM 网络带宽,因此 VM 上的传统磁盘吞吐量限制不适用于弹性 SAN 卷。 选择可为生产/VM 到 VM I/O 和 iSCSI I/O 到附加弹性 SAN 卷提供足够带宽的 VM。 通常,应使用第 5 代(D/E/M 系列)VM 获得最佳性能。

  • 在创建期间在 VM 上启用 加速网络 。 若要通过 Azure PowerShell 或 Azure CLI 执行此作或在现有 VM 上启用加速网络,请参阅 使用 Azure PowerShell 创建具有加速网络的 VM

VM 创建流的屏幕截图,其中突出显示了“启用加速网络”。

  • 必须对每个卷的每个目标卷使用 32 个会话来实现其最大 IOPS 和/或吞吐量限制。 使用客户端上的多路径 I/O (MPIO) 管理每个卷的这些会话,以便进行负载均衡。 脚本可用于 WindowsLinux,或在 Azure 门户中的“连接到卷”页上用于你的卷,该页面默认使用 32 个会话。 Windows 软件 iSCSI 发起程序的最大会话数限制为 256 个。 如果需要将 8 个以上的卷连接到 Windows VM,请根据需要减少每个卷的会话数。

Azure VMware 解决方案

  • 在 Azure VMware 解决方案群集所在的同一区域和可用性区域中部署 Elastic SAN

  • 在将弹性 SAN 卷装载为外部数据存储之前配置专用终结点

  • 如果计划让环境在 Azure VMware 解决方案群集中有 16 个节点,请使用以下配置之一,具体取决于你拥有的主机。

    • AV36、AV36P、AV52 - 三个专用终结点的六个 iSCSI 会话
    • AV64 - 七个 iSCSI 会话通过七个专用终结点进行
  • 如果环境没有 16 个节点,请使用以下配置之一。

    • AV36、AV36P、AV52 - 四个专用终结点的八个 iSCSI 会话
    • AV64 - 八个专用终结点上的八个 iSCSI 会话

    注释

    将弹性 SAN 卷附加到群集时,它会自动附加到所有节点。 如果你有 16 个节点,并且每个节点都配置为使用 8 个 iSCSI 会话,这些会话使用最大连接数(128 个)。 将节点配置为使用七个 iSCSI 会话可确保如果需要附加额外的节点(维护),则具有可用的 iSCSI 会话。

  • 创建虚拟磁盘时使用急切归零厚预配

  • 调整 ExpressRoute 网关的大小,使其满足吞吐量要求

  • 将弹性 SAN 的基本大小配置为至少 16 TiB,以便可以达到弹性 SAN 数据存储的最大性能

MPIO

Windows操作系统

使用以下命令更新设置:

# Enable multipath support for iSCSI devices
Enable-MSDSMAutomaticClaim -BusType iSCSI

# Set the default load balancing policy based on your requirements. In this example, we set it to round robin which should be optimal for most workloads.
mpclaim -L -M 2

# Set disk time out to 30 seconds
Set-MPIOSetting -NewDiskTimeout 30

有关 MPIO cmdlet 的详细信息,请参阅 MPIO 参考

Linux

使用以下命令更新 /etc/multipath.conf 文件:

defaults {
    user_friendly_names yes		# To create ‘mpathn’ names for multipath devices
    path_grouping_policy multibus	# To place all the paths in one priority group
    path_selector "round-robin 0"	# To use round robin algorithm to determine path for next I/O operation
    failback immediate			# For immediate failback to highest priority path group with active paths
    no_path_retry 3			# To disable I/O queueing after retrying once when all paths are down
    polling_interval 5         # Set path check polling interval to 5 seconds
}
devices {
  device {
    vendor "MSFT"
    product "Virtual HD"
  }
}

Azure VMware 解决方案

Microsoft管理 Azure VMware 解决方案的 MPIO 设置。 创建数据存储时会设置最佳值。

iSCSI

Windows操作系统

更新 Windows 上的 iSCSI 发起程序的注册表设置。

  1. 打开注册表编辑器:
  2. 选择“开始”,在搜索框中键入 regedit,然后按 Enter。
  3. 导航到以下位置:[\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e97b-e325-11ce-bfc1-08002be10318}\0004(Microsoft iSCSI 发起程序)\Parameters]
  4. 更新以下设置。 右键单击每个设置,然后选择“ 修改”。 将 Base 更改为 Decimal,更新值并选择“ 确定”。
DESCRIPTION 参数和值
将 iSCSI PDU 中发起程序发送到目标的最大数据设置为 256 KB MaxTransferLength=262144
将发起程序与目标协商的最大 SCSI 有效负载设置为 256 KB MaxBurstLength=262144
设置发起者在 iSCSI PDU 中向目标发送的最大未请求数据为 256 KB FirstBurstLength=262144
将发起程序可以在 iSCSI PDU 中从目标收到的最大数据设置为 256 KB MaxRecvDataSegmentLength=262144
禁用 R2T 流控制 InitialR2T=0
启用即时数据 ImmediateData=1
将 WMI 请求的超时值设置为 30 秒 WMIRequestTimeout = 30 秒
将链接关闭时间的超时值设置为 30 秒 LinkDownTime = 30 秒

在群集配置中,确保共享卷的所有节点中的 iSCSI 发起程序名称唯一。 在 Windows 中,可以通过 iSCSI 发起程序应用更新它们。

  1. 选择 “开始”,在搜索框中搜索 iSCSI 发起程序 。 这会打开 iSCSI 发起程序。

  2. 选择 “配置” 以查看当前发起程序名称。

    Windows 上的 iSCSI 发起程序配置的屏幕截图。

  3. 若要修改它,请选择 “更改”,输入新的发起程序名称,然后选择“确定”。

    更新 Windows 上的 iSCSI 发起程序名称的屏幕截图。

Linux

在将任何卷连接到客户端之前,请使用客户端上的全局 iSCSI 配置文件(iscsid.conf,通常位于 /etc/iscsi 目录中)中的建议值更新以下设置。 连接卷后,将创建一个节点以及特定于此节点的配置文件(例如,在 Ubuntu VM 上,可在 /etc/iscsi/nodes/$volume_iqn/portal_hostname,$port 目录中找到),从全局配置文件继承设置。 如果在更新全局配置文件之前已将一个或多个卷连接到客户端,请直接或使用以下命令更新每个卷的节点特定配置文件:

# Variable declaration
volume_iqn=<Elastic SAN volume IQN>
portal_hostname=<Elastic SAN volume portal hostname>
port=3260

# Set maximum data the initiator sends in an iSCSI PDU to the target to 256 KB
sudo iscsiadm -m node -T $volume_iqn -p $portal_hostname:$port -o update -n node.conn[0].iscsi.MaxXmitDataSegmentLength -v 262144

# Set maximum SCSI payload that the initiator negotiates with the target to 256 KB
sudo iscsiadm -m node -T $volume_iqn -p $portal_hostname:$port -o update -n node.session.iscsi.MaxBurstLength -v 262144

# Set maximum unsolicited data the initiator can send in an iSCSI PDU to a target to 256 KB 
sudo iscsiadm -m node -T $volume_iqn -p $portal_hostname:$port -o update -n node.session.iscsi.FirstBurstLength -v 262144

# Set maximum data the initiator can receive in an iSCSI PDU from the target to 256 KB 
sudo iscsiadm -m node -T $volume_iqn -p $portal_hostname:$port -o update -n node.conn[0].iscsi.MaxRecvDataSegmentLength -v 262144

# Disable R2T flow control 
sudo iscsiadm -m node -T $volume_iqn -p $portal_hostname:$port -o update -n node.session.iscsi.InitialR2T -v No

# Enable immediate data
sudo iscsiadm -m node -T $volume_iqn -p $portal_hostname:$port -o update -n node.session.iscsi.ImmediateData -v Yes

# Set timeout value for WMI requests
sudo iscsiadm -m node -T $volume_iqn -p $portal_hostname:$port -o update -n node.conn[0].timeo.login_timeout -v 30
sudo iscsiadm -m node -T $volume_iqn -p $portal_hostname:$port -o update -n node.conn[0].timeo.logout_timeout -v 15

# Enable CRC digest checking for header and data 
sudo iscsiadm -m node -T $volume_iqn -p $portal_hostname:$port -o update -n node.conn[0].iscsi.HeaderDigest -v CRC32C
sudo iscsiadm -m node -T $volume_iqn -p $portal_hostname:$port -o update -n node.conn[0].iscsi.DataDigest -v CRC32C 

在群集配置中,请确保 iSCSI 发起程序名称在所有共享卷的节点上都是唯一的。 在 Linux 中,修改 /etc/iscsi/initiatorname.iscsi 以更新发起程序名称。 更新 Linux 上的 iSCSI 发起程序名称的屏幕截图。

Azure VMware 解决方案

Microsoft管理 iSCSI 设置。 创建数据存储时会设置最佳值。

弹性 SAN 优化

在部署弹性 SAN 之前,必须确定部署的弹性 SAN 的最佳大小,以便为工作负荷和成本实现适当的性能平衡。 使用以下步骤来确定适合您的最佳尺码

使用现有存储解决方案,选择时间间隔(日/周/季度)以跟踪性能。 最佳时间间隔是应用程序/工作负载的良好快照。 在此期间,记录所有工作负荷的总 IOPS 和吞吐量。 如果使用的时间间隔高于一分钟,或者如果任何工作负荷与当前配置存在瓶颈,请考虑向弹性 SAN 部署添加更多基本容量。 确定基本容量时,应留出一些留出空间,以考虑增长。 弹性 SAN 存储的其余部分应使用额外的容量来节省成本。

有关性能的详细信息,请参阅 弹性 SAN 和虚拟机性能