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