最近我学习了如何使用 aws 设置负载均衡器并将其指向根/子域。
但在尝试的过程中,我发现有一些延迟。例如,我的设置是
3 个实例,使用nginx
、node
、 和pm2
我改变了html
每个实例的内容,例如<h1>load 1</h1>
<h1>load 2</h1>
<h1>load 3</h1>
然后,当我继续重新加载负载均衡器 DNS 时,它确实显示实例正在随机切换,所以我知道它正在正常工作。
然后我进入其中一个实例,停止pm2
我再次刷新我的页面,有时它会显示,gateway error
我相信这是因为它进入了我停止的实例,有时它会显示页面,但是使用非常糟糕的 CSS,当我打开 console.log 时,会出现错误提示,说无法找到文件。
大约需要 1-2 分钟,直到一切恢复正常。
我想知道这是否正常以及应该如何发生?或者有没有什么方法可以优化它以便让用户获得更好的用户体验?
谢谢您的任何建议。
答案1
当您停止实例时,出现了两个问题:
- 您收到网关错误,因为页面请求被重定向到失败的实例。
- 您收到了页面,但 CSS 错误。发生这种情况的原因是页面请求发往了正常实例,但后续的 CSS 文件请求发往了错误实例。
这就是 ELB 的工作原理。ELB 使用健康检查来了解您的实例是否出现问题。但这需要时间。您所看到的 1 到 2 分钟是 ELB 确定实例是否失败的时间。
您可以在 ELB 配置中配置健康检查的频率。
答案2
配置负载均衡器时,会涉及健康检查。故障节点的检测不是即时的,健康检查必须先失败,然后该节点才会从负载均衡器中移除。
您可以将健康检查时间设置得非常短,但这会使情况变得更糟。如果您的网站非常繁忙,并且一个实例未通过健康检查,则该实例将被删除,然后其他实例将有更多工作要做,它们将开始未通过健康检查,就像多米诺骨牌一样,您的网站将瘫痪。