我们目前正在使用 OVH 负载均衡器来为我们的 LAMP 堆栈 Web 应用程序提供服务。
问题是,OVH LB 服务确实不太好,而且宕机太多。服务器也位于 OVH,但它们的正常运行时间百分比很高,因此我们对这些服务感到满意。
因此目前我正在尝试寻找一个更好的解决方案来平衡我们的 LAMP 堆栈的负载,并且如果其中一台服务器发生故障,还可以使用新的负载平衡处理故障转移。
我正在考虑nginx
在单个服务器上进行设置以充当软件负载平衡器,但需要知道我是否可以管理该设置的 cookie 或者是否有更合适的设置。
我们的客户拥有自己的子域作为其门户的入口,如果需要,我们可以为每个服务器设置一个域,因此设置将如下所示:
Entry-point: https://client.brandname.com
Application server 1: https://client.brandname1.com
Application server 1: https://client.brandname2.com
Application server 1: https://client.brandname3.com
但是我们在 2 个设置 cookie 中持有一个 sesson-key 和一个 token,名为
session|client=xxx
token|client=xxx
我们需要由应用程序服务器创建、读取、修改和删除这些 cookie,因此它们需要通过负载均衡器代理传递,使用 nginx 负载均衡器设置可以实现这一点吗?
所以基本上,这可以通过 nginx 负载均衡器来完成吗,或者是否有更合适的方法?
答案1
饼干
Cookies 是应用程序服务器回复的一部分,Nginx 会像传递页面的其他部分一样传递它们。我认为使用 Nginx 不会出现任何问题。
单点故障/DNS负载平衡
警告:单个负载平衡器是单点故障。您可以设置两台服务器并使用 DNS 负载平衡 - 基本上,您创建多个 A 记录,客户端(理论上)应该使用随机记录。但是,我相信许多人只使用第一个记录,这会将大部分或所有负载放在一台服务器上。
为了解决这个问题,您可以让 DNS 服务器随机化返回的记录的顺序,从而缓解始终使用第一个记录的情况。
多值名称服务器
云Flare将要为你进行循环 DNS,根据本文,更改 A 记录的顺序。这应该会将请求分布到两个负载均衡器上。
AWS Route53还将随机化返回记录的顺序。
我使用过这两个平台。CloudFlare 更简单,AWS 功能更强大,也更复杂。
粘性负载平衡
此设置不会为您提供粘性负载平衡。如果您需要此功能,则需要更高级的负载平衡器。云Flare有一个可以执行此操作的负载均衡器,AWS Route53。
答案2
就拥有两个负载均衡器并执行 DNS Roundrobin 将流量路由到平衡器 AWS 而言,使用 Route53 并启用已在 DNS 级别包含的健康检查可能是一个很好的解决方案。
作为负载均衡器,有很多方法,可以使用 Haorox、NGinx、Apache(mod_proxy_balancer)……
如果您不想依赖外部 DNS 提供商,keepalived 也可以帮助解决 DNS/IP 问题。与 haproxy 结合使用,这是一个常用的堆栈。还有 corosync/pacemaker 用于 IP 故障转移。