请不要嘲笑我。我做了很多研究,但显然我用错了关键词(我觉得我不知道我要找的是什么词)。如果我应该在其他地方发布这个问题,请告诉我。我把这个问题发布在 StackOverflow 上,但有人建议我在这里发布。
我正在开发一个 SaaS 应用程序,它可以帮助人们创建和托管网站(类似于 Shopify,但非电子商务)。我希望能够为客户提供一个永远不会改变的固定 IP 地址,以便他们可以将其域和子域指向该地址。此 IP 地址对于每个客户端都应该相同(类似于 Shopify 为每个网站使用完全相同的 IP)。我想我要找的术语是负载平衡?但我不太清楚它是如何工作的。我是否将所有流量路由到 1 个单个实例,该实例将进行一些路由以将流量分发到其他实例?如果这个单个实例失败会发生什么?如果我使用多个实例来处理负载,那么我如何仅使用一个固定 IP 来路由流量?我很困惑。
我读了很多关于 L4、L7、DNS 级别负载平衡的文章,但出于某种原因,我仍然没有完全了解。如果有任何资源或课程值得我研究,请告诉我,我愿意学习,只是不知道从哪里开始。
答案1
您要找的术语是反向代理。要实现 HA,您需要设置一个负载平衡器对来监听一个公共 IP 地址,然后使用 carp 或 vrrp 之类的协议(例如使用 keepalived)让它们就哪个节点处于活动状态达成一致。只要您保持所有组件和路径足够冗余,您就应该能够实现非常好的正常运行时间。您很可能希望添加额外的魔法,比如在需要会话粘性的情况下在反向代理节点之间共享一些有关客户端的信息;但简而言之,这就是全部。
答案2
这是错误的方法。AWS 和其他云提供商都这样做,但他们有 IP 池可供使用。我敢打赌你没有。
您想要的方法是让用户使用 A 记录将他们的域名指向您的公共 IP。所有客户端都使用一个 IP。
在您这边,您可以使用主机名重定向将它们转发到适当的应用程序/虚拟机/容器或您正在使用的任何内容。
注意:例如,这适用于 HTTP,但不适用于不支持主机名的其他协议。
至于负载平衡。有多种选择。您可以使用 DNS,只需让 A 记录指向多个 IP,客户端就会轮询这些 IP。或者例如使用 keepalived 设置虚拟 IP (VIP)。还可以看看 HAProxy,以获得更复杂、更强大的解决方案。
有两种主要方式可以设置具有高可用性的负载均衡器。主动/主动 主动/被动。在两个代理之间分散负载,或让一个代理处于待机状态,以防主动代理发生故障。