【问题标题】:Handling load balancer处理负载均衡器
【发布时间】:2023-12-08 03:45:02
【问题描述】:

我有一个网站,它有主域和子域(我对不同的国家有不同的子域)例如:mysite.com(是主域),country-a.m​​ysite.com(对于国家 A),country- b.mysite.com(适用于 B 国)注意:每个国家/地区都有独立的用户/数据,并与单独的数据库链接。

现在我在一个 EC2 实例中管理它们。我在每个国家/地区都有子文件夹,并使用 Route53 将它们指向子域。他们工作正常。

但现在我希望它们可扩展,因为我期待更多流量。这种情况的最佳做法是什么?

是否可以获取另一个 EC2 实例并克隆所有子文件夹并引入负载均衡器来处理这 2 个实例之间的流量?我的意思是,当来自 A 国和 B 国的用户访问负载均衡器时,负载均衡器会正确处理它并将用户重定向到这 2 个实例中的正确子文件夹并管理流量?

如果是,我应该如何配置Route53?

负载平衡器如何处理用户会话?我的意思是,假设用户第一次点击负载均衡器将用户定向到第一个实例,而当另一个请求来自同一用户时点击第二个实例。如果在第一个实例上创建会话并且此会话数据将在第二个实例上可用?

我还想知道如何在这些情况下管理源代码。我的意思是,如果我想更新代码,我必须分别在这两个实例中更新吗?或者是否有一种简单的方法可以将文件上传到其中一个实例,然后它会克隆到其他实例?

顺便说一句,我的网站是使用 Laravel 框架和 Postgres 构建的。

我是负载均衡器的新手,请帮我找到完美的解决方案。

【问题讨论】:

    标签: amazon-web-services load-balancing amazon-elb aws-load-balancer aws-application-load-balancer


    【解决方案1】:

    如果是,我应该如何配置Route53?

    在 R53 中你不应该做任何事情。它的负载均衡器 (LB) 在​​您的实例之间分配流量,而不是 R53。 R53 只会将流量引导到 LB,没有别的。

    负载均衡器如何处理用户会话?

    它不处理它。您可以在您的目标组 (TG) 中启用sticky sessions,以便 LB 尝试“维护状态信息以便为客户提供持续的体验”。

    不过,更好的解决方案是让您的实例无状态。这意味着您的应用程序的所有会话/状态信息都保存在实例之外,例如在 DynamoDB、ElastiCache 或 S3 中。通过这种方式,您可以使您的应用程序具有可扩展性,并消除跟踪存储在各个实例上的会话数据的问题。

    我还想知道如何在这些情况下管理源代码。我的意思是,如果我想更新代码,我必须分别在这 2 个实例中更新吗?

    是的。您的实例应该是相同的。通常CodeDeploy 用于确保实例数量的平滑和可重复更新。

    【讨论】: