我计划使用单独的 Nginx 服务器作为软件负载平衡器来平衡应用服务器之间的负载。但实际上,这是因为应用服务器前面的负载平衡器允许我在需要时更新应用服务器(操作系统、应用程序等),而无需停机。
然后我意识到,如何更新负载均衡器本身?例如,当我需要更新作为我的应用程序的负载均衡器的服务器上的操作系统和 Nginx 时,我的网站仍然会关闭。
由于硬负载平衡是不可能的,我想知道是否可以将两个 Nginx Web 服务器连接在一起,以便它们一起在应用服务器之间平衡负载,同时允许我在需要时一次更新一个,而不会导致停机。
这现实吗?
答案1
您需要通用接入点。这应该通过虚拟地址或路由来实现。这是无需额外硬件和协议即可实现此目的的最佳/最简单方法使用 LVS。
LVS 是内核级 IP 平衡器,可以完成这项工作,并且非常快速有效,吞吐量令人印象深刻。您还可以在同一节点上配置文件墙。
对于您的配置,最简单的方法是配置具有两个节点(主动备份)的 LVS-NAT,它支持节点之间的心跳,并为双方使用虚拟 IP。如果主节点发生故障,则从属节点一将向交换机推送 arp 更新并接管 IP 地址。
有大量的配置实用程序,一些发行版具有用于配置的精美实用程序,例如 RHEL/Centos/Fedora 有 piranha web GUI。
对于真实服务器,您可以配置超时、调度、比率、监控、会话持久性等。非常灵活。
此外,在节点之间共享会话信息也是很好的。
推荐文档:
答案2
这实际上取决于您托管机器的方式。租用硬件服务器或虚拟机的更好的廉价托管商提供某种故障转移 IP,可能会路由到不同的服务器上;通常可以手动切换(或通过某些监控工具自动切换,但不推荐这样做)。这对于简单的设置来说已经足够舒适了。
如果您使用某种服务器机柜并运行具有多个网卡的服务器,从而能够在具有绑定网卡、本地网络、服务器之间的直接链接等的机器之间设置自己的网络,那么您可以使用 keepalived 或 pacemaker 之类的解决方案。但设置和调整应该由熟悉此内容的人员完成(我的经验)。如果设置正确,此解决方案可以完全自动化且稳定地工作。可以手动切换 ips 和服务而不会丢失软件包;对于更新、维护和重启非常有用。
这两种解决方案仍然是穷人的 HA 解决方案,但总比没有好。关键是,有一个解决方案,即使它在某种程度上受到限制。
顺便说一句,您所要求的不是负载平衡而是故障转移;仅供记录:)