networking - 使用 Firefox 时,负载平衡会忽略我一半的节点数
问题描述
我尝试了两种不同的负载平衡设置,无论我使用哪种技术,我都看到了相同的结果,所以一定有我遗漏的东西。
数字海洋负载平衡器到液滴
Traefik 负载均衡器到容器
在这两种情况下,当我尝试对偶数个容器或液滴进行负载平衡时,它都会忽略一半。例如:
- 1 个节点,负载均衡将流量发送到 1。
- 2 个节点,负载均衡将流量发送到 1 个。
- 3 个节点,负载均衡将流量发送到 3 个。
- 4 个节点,负载均衡将流量发送到 2 个。
我从我在 Digital Ocean 上的设置中制作了一个屏幕截图视频,您可以查看该视频以查看行为: https ://youtu.be/EP_eOtuPGLs
如您所见,当我有 2 个液滴时,它只向 1 发送流量。当我添加第三个液滴时,它向 3 发送流量。请注意,我在 Traefik 中也看到了相同的行为,因此它可能不是特定于任何一个技术,但只是我在一般负载平衡中缺少的东西。
解决方案
经过大量测试后,我注意到问题仅限于使用 Firefox。在执行 CURL 或 Chrome 请求时,它返回了正确的响应。
在比较了 Firefox 和 Chrome 中的请求后,我意识到 Firefox 总是发送一个额外的 HTTP 请求来获取一个网站图标——无论 HTML 是否定义了一个。
这意味着每次我在 Firefox 中访问负载均衡器时,它实际上都发送了 2 个请求。因此,Web 请求转到了 Droplet A,而 Favicon 请求转到了 Droplet B。当我刷新页面时,由于负载均衡,Web 请求再次转到了 Droplet A。所以我从来没有看到来自 Droplet B 的任何响应。
总而言之,负载均衡器从来没有出现过问题。只是我使用 Firefox 的测试方法有缺陷。
推荐阅读
- javascript - Preventing "not wrapped in act(...)" Jest warning when state update doesn't affect UI
- python - Selenium chromedriver cannot click href link
- python - 根据某些条件合并python数据框的行数据
- bash - 使用 sed 或 awk 将 .profile 中的一段代码替换为文件
- java - java.lang.module.FindException:找不到模块 javafx.controls
- python - 如何添加不和谐的 ID/用户名
- google-apps-script - 为什么我的日期/时间出现在不同的时区?
- javascript - 如何在嵌套回调和 foreach 循环中停止代码?
- azure - Azure HDInsight Spark 群集 - 异地复制?
- r - R - Dataframe - 使用包含位置和字符列表的两列替换字符串中的字符