我的 iSCSI 网络遇到了大问题,似乎无法让它尽快运行。
因此,我尝试了几乎所有方法来充分发挥 SAN 的性能,并让 VMware 和 EMC 的专家参与其中。
我的设备的简要描述:3x HP DL360 G7 / vSphere 5.5 / 4 个板载 NIC / 4 个用于 iSCSI 的 PCIe Intel NIC 2x HP 2510-24G 1x EMC VNXe 3100 / 2 个存储处理器,每个处理器有 2 个 iSCSI 专用 NIC / 24x 15k SAS RAID10 / 6x 7.2k SAS RAID6
我采用了最佳实践,将存储池均匀地放在两个 iSCSI 服务器上。我创建了 2 个 iSCSI 服务器,每个存储处理器上一个。请参阅我的 iSCSI 配置的图像。
iSCSI 流量通过 VLAN 进行分离(其他 VLAN 设置为禁止),我甚至尝试使用 29xx 系列的另一台 HP 交换机。流量控制已启用(也尝试禁用),Jumbo 已禁用。不涉及路由。
在 ESX 主机上,所有 iSCSI NIC 均在使用,因为我对每个数据存储都使用了 Round Robin 设置。我还尝试使用 1 IO 的路径更改策略,因为许多其他人似乎都通过这种方式获得了性能。我也尝试了内部 NIC(Broadcom),但没有任何区别。在交换机上,我可以看到 ESX 端和 VNXe 端的端口使用非常均匀。我有一个完美的负载平衡,但是:我无法超过 1 Gbit。我确实知道 VNXe 针对多个连接进行了优化,Round Robin 也需要这样做,但即使我在 2 个主机和 2 个数据存储之间执行存储 vMotion(使用不同的 iSCSI 服务器),我也可以通过 Unisphere webinterface 看到一条 84 MBit/s 左右的直线。我经常可以看到这条线处于完全相同的值,以至于我无法相信我的磁盘无法提供更多或任务要求不够高。情况甚至变得更好了:每个主机和每个存储处理器上只有一根电缆,我实现了相同的性能。因此,我获得了大量冗余,但速度却没有提高。
我看到很多人在谈论他们的 iSCSI 性能,我迫切想知道我的配置出了什么问题(已经由 VMware 和 EMC 的受过培训的人员测试和验证)。我感谢大家的意见!
编辑:
是的,我已将 vMotion 配置为使用多个 NIC。除此之外,存储 vMotion 始终通过 iSCSI 适配器,而不是 vMotion 适配器。我已附上我的配置的屏幕截图。
我知道存储 vMotion 不是基准,但是最近几天我不得不做很多这样的工作,而且上限一直在 80 MB/s 左右。RAID 10 中的 6x 15k 600 GB SAS 磁盘池应该能够轻松处理更多数据,你不觉得吗?我为你做了一个 IO 计量器测试 - 尝试了其中一些,最快的是 256 KiB 100% 读取。我得到了 64.45 MB/s - 我的 Unisphere 也显示大致相同的速度。这是在存储在 6x 15k 300 GB SAS 磁盘(RAID 10)池中的虚拟机中,一天中的这个时候几乎没有任何其他活动。
编辑2:
抱歉用户名重复,但我是在工作中写的这个问题,它没有使用我在 Stock Overflow 上已经获得的用户名。但是这是显示我的 Round Robin 设置的屏幕截图。它在所有主机和所有商店上都相同。
答案1
有可能您没有生成足够的 IOPS 来真正启动此功能。
请查看这里关于如何将设置从默认的 1,000 IOPS 更改为较小的值。(这是 symmetrix 特有的,但您可以对 VMWare Round Robin Provider 执行相同操作)
然而,我还不确定它是否真的能够完全并行地利用多个链接,并且只使用一个数据存储。我认为您必须并行对多个数据存储进行 IOMeter 测试才能看到好处。(但不是 100% 确定)
答案2
为名为 EMC 的存储供应商创建 SATP 规则,将路径策略设置为 Round Robine,并将 IOPS 从默认的 1000 设置为 1。这将在重新启动后保持不变,并且每当出现新的 EMC iSCSI LUN 时,都会采用此规则。要将此规则应用于现有的 EMC iSCSI LUN,请重新启动主机。
esxcli storage nmp satp rule add --satp="VMW_SATP_DEFAULT_AA" \
--vendor="EMC" -P "VMW_PSP_RR" -O "iops=1"
我尝试过将 IOPS 设置为 1 - 3,发现在单个虚拟机上效果最好。但是,如果您有很多虚拟机和很多数据存储,那么 1 可能不是最佳选择...
确保将 VNXe 上的每个接口设置为 9000 MTU。此外,带有 iSCSI 接口的 vSwitch 以及每个 VMKernel 也应设置为 9000 MTU。在 VNXe 上,创建两个 iSCSI 服务器 - 一个用于 SPA,一个用于 SPB。最初为每个服务器关联一个 IP。然后查看每个 iSCSI 服务器的详细信息,并为每个 SP 的每个活动接口添加额外的 IP。这将为您提供所需的循环性能。
然后至少创建两个数据存储。将一个数据存储与 iSCSIServer-SPA 关联,将另一个数据存储与 iSCSIServer-SPB 关联。这将确保您的 SP 之一不会闲置在那里。
最后,ESX 端用于 iSCSI 的所有接口都应转到单独的 vSwitch,所有接口都处于活动状态。但是,您需要在指定的 vSwitch 内为 ESX 端的每个接口设置一个 VMkernel。您必须覆盖每个 VMKernel 的 vSwitch 故障转移顺序,以便有一个活动适配器,其他所有适配器都处于未使用状态。这是我用于配置 ESX 主机的部署脚本。每个主机共有 8 个接口,4 个用于 LAN,4 个用于 iSCSI/VMotion 流量。
- 执行以下配置
a.# DNS esxcli network ip dns search add --domain=mydomain.net
esxcli 网络 ip dns 服务器添加--server = XXXX
esxcli 网络 ip dns 服务器添加--server = XXXX
b.# 相应地设置主机名更新
esxcli 系统主机名设置--host=server1--domain=mydomain.net
c. # 向 vSwitch0 添加上行链路 esxcli network vswitch standard uplink add --uplink-name=vmnic1 --vswitch-name=vSwitch0
esxcli 网络 vswitch 标准上行链路添加 --uplink-name=vmnic4 --vswitch-name=vSwitch0
esxcli 网络 vswitch 标准上行链路添加 --uplink-name=vmnic5 --vswitch-name=vSwitch0
d.# 创建用于存储的 vSwitch1,并将 MTU 设置为 9000
esxcli 网络 vswitch 标准添加 --vswitch-name=vSwitch1
esxcli 网络 vswitch 标准设置--vswitch-name=vSwitch1 --mtu=9000
e.# 向 vSwitch1 添加上行链路
esxcli 网络 vswitch 标准上行链路添加 --uplink-name=vmnic2 --vswitch-name=vSwitch1
esxcli 网络 vswitch 标准上行链路添加 --uplink-name=vmnic3 --vswitch-name=vSwitch1
esxcli 网络 vswitch 标准上行链路添加 --uplink-name=vmnic6 --vswitch-name=vSwitch1
esxcli 网络 vswitch 标准上行链路添加 --uplink-name=vmnic7 --vswitch-name=vSwitch1
f.# 为 vSwitch0 设置活动网卡
esxcli 网络 vswitch 标准策略故障转移设置 --vswitch-name=vSwitch0 --active-uplinks=vmnic0,vmnic1,vmnic4,vmnic5
g.# 为 vSwitch1 设置活动 NIC
esxcli 网络 vswitch 标准策略故障转移设置 --vswitch-name=vSwitch1 --active-uplinks=vmnic2,vmnic3,vmnic6,vmnic7
h.# 为 ESX01(而非 ESX02)创建 iSCSI 和 vmkernel 端口组
esxcli 网络 vswitch 标准端口组添加 --portgroup-name=iSCSI-vmnic2 --vswitch-name=vSwitch1
esxcli 网络 ip 接口添加 --interface-name=vmk2 --portgroup-name=iSCSI-vmnic2 --mtu=9000
esxcli 网络 ip 接口 ipv4 设置 --interface-name=vmk2 --ipv4=192.158.50.152 --netmask=255.255.255.0 --type=static
vim-cmd hostsvc/vmotion/vnic_set vmk2
esxcli 网络 vswitch 标准端口组添加 --portgroup-name=iSCSI-vmnic3 --vswitch-name=vSwitch1
esxcli 网络 ip 接口添加--接口名称=vmk3 --端口组名称=iSCSI-vmnic3 --mtu=9000
esxcli 网络 ip 接口 ipv4 设置 --interface-name=vmk3 --ipv4=192.158.50.153 --netmask=255.255.255.0 --type=static
vim-cmd hostsvc/vmotion/vnic_set vmk3
esxcli 网络 vswitch 标准端口组添加 --portgroup-name=iSCSI-vmnic6 --vswitch-name=vSwitch1
esxcli 网络 ip 接口添加--接口名称=vmk6 --端口组名称=iSCSI-vmnic6 --mtu=9000
esxcli 网络 ip 接口 ipv4 设置 --interface-name=vmk6 --ipv4=192.158.50.156 --netmask=255.255.255.0 --type=static
vim-cmd hostsvc/vmotion/vnic_set vmk6
esxcli 网络 vswitch 标准端口组添加 --portgroup-name=iSCSI-vmnic7 --vswitch-name=vSwitch1
esxcli 网络 ip 接口添加--接口名称=vmk7 --端口组名称=iSCSI-vmnic7 --mtu=9000
esxcli 网络 ip 接口 ipv4 设置 --interface-name=vmk7 --ipv4=192.158.50.157 --netmask=255.255.255.0 --type=static
vim-cmd hostsvc/vmotion/vnic_set vmk7
i.# 为 ESX02(而非 ESX01)创建 iSCSI 和 vmkernel 端口组
esxcli 网络 vswitch 标准端口组添加 --portgroup-name=iSCSI-vmnic2 --vswitch-name=vSwitch1
esxcli 网络 ip 接口添加 --interface-name=vmk2 --portgroup-name=iSCSI-vmnic2 --mtu=9000
esxcli 网络 ip 接口 ipv4 设置 --interface-name=vmk2 --ipv4=192.168.50.162 --netmask=255.255.255.0 --type=static
vim-cmd hostsvc/vmotion/vnic_set vmk2
esxcli 网络 vswitch 标准端口组添加 --portgroup-name=iSCSI-vmnic3 --vswitch-name=vSwitch1
esxcli 网络 ip 接口添加--接口名称=vmk3 --端口组名称=iSCSI-vmnic3 --mtu=9000
esxcli 网络 ip 接口 ipv4 设置 --interface-name=vmk3 --ipv4=192.168.50.163 --netmask=255.255.255.0 --type=static
vim-cmd hostsvc/vmotion/vnic_set vmk3
esxcli 网络 vswitch 标准端口组添加 --portgroup-name=iSCSI-vmnic6 --vswitch-name=vSwitch1
esxcli 网络 ip 接口添加--接口名称=vmk6 --端口组名称=iSCSI-vmnic6 --mtu=9000
esxcli 网络 ip 接口 ipv4 设置 --interface-name=vmk6 --ipv4=192.168.50.166 --netmask=255.255.255.0 --type=static
vim-cmd hostsvc/vmotion/vnic_set vmk6
esxcli 网络 vswitch 标准端口组添加 --portgroup-name=iSCSI-vmnic7 --vswitch-name=vSwitch1
esxcli 网络 ip 接口添加--接口名称=vmk7 --端口组名称=iSCSI-vmnic7 --mtu=9000
esxcli 网络 ip 接口 ipv4 设置 --interface-name=vmk7 --ipv4=192.168.50.167 --netmask=255.255.255.0 --type=static
vim-cmd hostsvc/vmotion/vnic_set vmk7
j.# 为每个 iSCSI vmkernel 设置活动 NIC
esxcli 网络 vswitch 标准端口组策略故障转移设置 --portgroup-name=iSCSI-vmnic2 --active-uplinks=vmnic2
esxcli 网络 vswitch 标准端口组策略故障转移设置 --portgroup-name=iSCSI-vmnic3 --active-uplinks=vmnic3
esxcli 网络 vswitch 标准端口组策略故障转移设置 --portgroup-name=iSCSI-vmnic6 --active-uplinks=vmnic6
esxcli 网络 vswitch 标准端口组策略故障转移设置 --portgroup-name=iSCSI-vmnic7 --active-uplinks=vmnic7
k.#创建端口组
esxcli 网络 vswitch 标准端口组添加 --portgroup-name=VMNetwork1 --vswitch-name=vSwitch0
esxcli 网络 vswitch 标准端口组添加 --portgroup-name=VMNetwork2 --vswitch-name=vSwitch0
esxcli 网络 vswitch 标准端口组添加 --portgroup-name=VMNetwork3 --vswitch-name=vSwitch0
l.# 将 VLAN 设置为虚拟机端口组
esxcli 网络 vswitch 标准端口组设置 -p VMNetwork1 --vlan-id ##
esxcli 网络 vswitch 标准端口组设置 -p VMNetwork2 --vlan-id ##
esxcli 网络 vswitch 标准端口组设置 -p VMNetwork3 --vlan-id ###
m.# 删除默认 VM 端口组
esxcli 网络 vswitch 标准端口组删除 --portgroup-name="VM 网络" -v=vSwitch0
n.# 启用 iSCSI 软件适配器
esxcli iscsi 软件设置--enabled=true
esxcli iscsi networkportal 添加 -A vmhba33 -n vmk2
esxcli iscsi networkportal 添加 -A vmhba33 -n vmk3
esxcli iscsi networkportal 添加 -A vmhba33 -n vmk6
esxcli iscsi networkportal 添加 -A vmhba33 -n vmk7
o.# 重命名本地数据存储
主机名 > $var=
vim-cmd hostsvc/datastore/重命名 datastore1 local-$var
p.#为 EMC VNXe 3300 定义本机多路径存储阵列类型插件,并将循环 IOPS 从 1000 调整为 1
esxcli 存储 nmp satp 规则添加 --satp="VMW_SATP_DEFAULT_AA" --vendor="EMC" -P "VMW_PSP_RR" -O "iops=1"
q.# 刷新网络
esxcli 网络防火墙刷新
vim-cmd hostsvc/net/refresh
- 使用 vSphere Client 为每个主机配置 NTP 客户端
a. 配置 --> 时间配置 --> 属性 --> 选项 --> NTP 设置 --> 添加 --> ntp.mydomain.net --> 勾选“重新启动 NTP 服务以应用更改” --> 确定 --> 等待… -> 选择“随主机启动和停止” --> 确定 --> 勾选“NTP 客户端已启用 --> 确定
重启主机
继续进行 EMC VNXe 存储配置,完成后返回本指南
每个主机登录到 vSphere 客户端
将每个数据存储升级到 VMFS-5
a. 配置 --> 存储 --> 突出显示数据存储 --> 升级到 VMFS-5
答案3
不幸的是,我认为您的设置没有任何问题。您无法为单个虚拟机使用超过 1 Gb/s 的速度。
这里的重点是,你不想简单地使用两个(或更多)NIC,你想同时使用它们,在类似 RAID-0 的配置中。
802.3ad 是关于链路级聚合的标准,我认为您在交换机上配置了该标准,通常无法配置为跨不同 NIC 划分单个连接。这是由于 interface-alg 选择的工作方式:它基于源和目标 MAC 和/或 IP/端口,并且单个连接将始终具有相同的 MAC/IP/端口。
这并不意味着您的设置无法提高数字(tput 和 IOPS 均如此),但这对单个 VM 可以提取的性能设置了硬性限制。尝试在 2/4 个不同的 VM 上加载 2 个或 4 个 IOMeter 实例:我敢打赌,聚合 tput 将远高于单个 VM 基准,但没有一台机器会突破 1 Gb/s 的限制。
Linux 桥接和一些高端交换机支持不同的链路聚合方法,并启用全条带化、聚合网络接口。然而,这对其他交换机/系统如何与这些“非标准”聚合方法交互有着重大影响。
无论如何,对于存储网络,如果支持的话,您应该真正启用巨型帧。