我在 Google Cloud Platform 中配置了一个负载平衡环境。负载平衡器后面是两台服务器,它们的配置几乎相同。一台服务器位于美国东部地区,另一台位于美国中部地区。美国东部地区的服务器可以轻松独自处理整个负载,平均 CPU 使用率约为 45%。每当我将中部地区的服务器添加到负载平衡器时,它的 CPU 就会突然飙升,只要它连接到负载平衡器,使用率就会保持在 99% 左右。
附加背景信息:这些服务器是运行 ASP.NET Umbraco 7 网站的 Windows 服务器。我还有两个运行 MariaDB 的数据库服务器,一个是主服务器,一个是复制从服务器。东部服务器连接到主服务器(也在东部地区)。中央服务器连接到从服务器(也在中央地区)。
有人能解释一下中央服务器为何出现问题吗?
我尝试过的事情:
- 我调整了平衡参数,试图让更多的请求发送到东部服务器,认为这可能会减轻中央服务器的一些压力。
- 我尝试将中央服务器连接到东部地区的主数据库。
- 我上传了网站文件的最新副本,以防某个地方出现损坏并引发问题。
- 我遵循了 Google 的(自动)建议并增加了 RAM(一开始并没有真正感到压力;使用率从未超过 50%)。
- 我尝试启动一台全新的服务器,同样位于中心区域,从头开始配置。性能问题相同。
目前我能想到的最好的办法是,服务器很难跟上健康检查器的 ping,但为什么另一台服务器没有问题呢?是否是因为位于不同的地区导致了这个问题?
我还没有尝试过的事情。请随意建议优先考虑以下事项:
- 将中央服务器移动到另一个区域。
- 将中央服务器与其他服务器一起移至东部地区。
- 添加 CPU
我试图避免最后一种情况,因为它似乎是治标不治本。
答案1
首先,Google L7 负载均衡器会尝试将流量路由到离请求者最近的后端。就您而言,来自东海岸的任何请求都将转到美国东部后端,而来自北美的所有其他请求都将转到美国中部后端。这是预期行为。
您可以通过转到管理控制台 > 网络服务 > 负载平衡并单击“高级菜单”来检查 L7LB 流量分布。从这里转到“后端服务”并单击您的 LB 后端。您现在可以在后端查看每个实例的 RPS。如果您使用 2 个独立的后端,则可以分别检查每个后端。
如果us-central服务器的流量比较大的话,CPU使用率会更高。
关于健康检查,您可以完全控制检查频率(理想情况下应与 us-east 服务器的频率一致)。您可以在 Compute Engine > 健康检查中或从负载均衡器详细信息屏幕查看健康检查。
您可以随时增加 CPU 而不增加内存,因为这是您目前遇到的问题。但是,这只能解决症状,而不能解决问题。
以上内容介绍了在 Google Cloud Platform 方面需要注意的问题。如果两个实例的流量大致相同,请开始监控服务器的性能,检查 CPU 使用率最高的是什么,以确保它实际上是 IIS 而不是其他应用程序。