我有 2 个负载平衡的 Apache 虚拟服务器,每分钟处理几千个请求,我正在尝试诊断导致它们速度变慢的瓶颈。
我的每台 Web 服务器都配有一个虚拟 NIC,而每台 VMWare 主机都配有 7 个千兆 NIC。所有这些物理 NIC 都接入 100Mb/s 交换机端口。
起初我以为 VMWare 主机会聚合所有可用带宽,并根据需求将其分配给虚拟机。但是,我现在怀疑我是否错了。
我的同事向我解释的方式,如果我只有一个虚拟的虚拟机中的 NIC 将绑定到单个物理 NIC,而不是聚合所有 NIC 的带宽 - 因此在我的情况下,这受到交换机端口带宽的限制,为 100 Mb/s。 那是对的吗?
另外,对于每分钟仅处理 1000-2000 个请求的站点来说,两个 100Mb/s 的连接(每台服务器上一个)是否会成为瓶颈?
答案1
就 NIC 组合而言,您的同事或多或少是正确的。
默认情况下,ESX 中的 NIC 组合会将虚拟机中的每个虚拟 NIC 映射到单身的所连接的 vSwitch 上的上行链路(物理 NIC)。具体 NIC 负载平衡策略为:
- 端口 ID:每个虚拟 NIC 的所有流量都根据端口号映射到一个上行链路。
- 源 Mac 哈希:每个虚拟网卡的所有流量都根据虚拟网卡 MAC 地址的哈希映射到一个上行链路
- IP 哈希:基于 ip 的流量的源 ip 地址和目标 ip 地址的哈希用于选择上行链路。
在这三种方法中,只有 IP 哈希会给你带来聚合效果。ESX 只能控制出站流量路径选择,因此为了正确分配入站和出站流量,还必须对物理交换机进行适当配置以实现端口聚合(以太网通道\LACP)。
这里有一篇非常有用的 VMware KB 文章关于如何配置各种交换机(Cisco\HP),以便分布入站流量(交换机必须决定路径选择)和出站流量(ESX 处理路径选择)。
请注意,这些策略都不会导致流量分布在单个源 IP 地址和单个目的地之间的多个上行链路上,它们仅在涉及一系列 IP 地址时提供聚合。
回答您的第二个问题 - 这取决于每个请求涉及的数据量。单个 100 兆位连接每秒可以传输大约 8000 个数据包,如果有效负载大小远小于 1500 字节,则可能更多。但是(大大简化事情并忽略开销)如果典型请求涉及 30k 数据,则每个请求将需要 20 个数据包才能完成,因此 NIC 理论上可以处理大约 250 个此类请求/秒。如果您的请求平均涉及 1Meg 流量,那么您最多每秒会收到 7/8 个请求,在正常情况下,我认为如果您得到的实际数字大于这些速率的 50%,那么您会做得很好。
这只是大致了解链路是否可以承载原始数据带宽。要更接近了解特定链路可以处理的数据,您还需要考虑所涉及的所有握手、客户端和服务器之间的端到端延迟、您的架构可以同时保持多少个并发连接以及许多其他因素。