高可用性如何工作?

Wap*_*pac 3 failover high-availability

我不明白如何为我非常简单的场景设置故障转移。我正在为 API 构建服务网关。我想要的是两台服务器托管在不同的数据中心. 而且我只是希望用户能够在其中一台服务器停机的情况下访问该服务。数据库同步没有问题,我只关心服务的可用性。

我该如何做到这一点,同时防止用户在他们的一端实施任何类型的故障转移逻辑?我希望为用户提供单个域或单个 IP 地址,并且能够始终使用该单个端点访问该服务。

我不明白这是如何实现的。我知道我可以设置一个网络节点,将请求转发到第一台或第二台服务器,具体取决于这两个服务器中的哪一个当前在线。但是,我没有看到这个设置如何解决 HA 问题,因为我们刚刚向系统引入了一个单点故障 - 转发节点。因此,如果此节点出现故障,则该服务将不可用。

你能解释一下如何在现实世界中实现这一点吗?是否有可能以合理的成本实现这一目标(即不超过托管服务器本身的成本).

编辑:有人建议不同的数据中心要求是昂贵的。因此,请随时为 1 个数据中心内的 2 个服务器提供建议。

编辑 2:请随意提及该设置的合理成本。

Ond*_*idr 7

它的工作原理很简单。第一条规则是你必须拥有不止一次的东西。为简单起见,我将在一个数据中心设置它,并使用此 DC 拥有的 IP 地址(您可以使用自己的 IP 地址和多个数据中心,但我们正在谈论一些多宿主 AS 的东西、BGP 和其他一些不是如此便宜且易于实施)。

你至少需要 4 台服务器(你可以只用两台,但这不是好方法)。2 个用于应用程序,2 个用于负载平衡,每个服务器有多个网卡。

基本设置是这样的:

       /---\     /------\     /----------\
       | S |-----| LB 1 |-----| SERVER 1 |
--NET--| W |     \------/\   /\----------/
       | I |              \_/
       | T |              / \
--NET--| C |     /------\/   \/----------\
       | H |-----| LB 2 |-----| SERVER 2 |
       \---/     \------/     \----------/
Run Code Online (Sandbox Code Playgroud)

你有两条独立的线路到你的 DC 提供的网络。这两条线路都在同一个 VLAN 中,并且都连接到交换机(最好的方法是 2 个交换机)。2 个负载均衡器连接到这些交换机并共享一个虚拟 IP。可以在这两台机器之间流动的是IP。您可以使用 VRRP 和 keepalived 来很好地实现这一点。

在这两个负载均衡器后面,放置了两个镜像服务器。魔法来了:

  1. 您将您的 DNS 记录指向该虚拟 IP
  2. 当有人访问您的应用程序时,它将通过一个 LB 并在一台服务器上结束
  3. 当一台服务器死机时,负载均衡器会通过healtcheck 之类的东西注意到它并禁用该服务器。每个新请求都将发送到健康服务器。
  4. 当一个负载均衡器死亡时,keepalived 会注意到它(再次通过一些健康检查)并将浮动 IP 移动到健康负载均衡器,没有人会注意到它。

您应该知道 HA 是一种昂贵的方式,而且您无法以低预算做到这一点。您需要计算服务中断是否比 HA 成本便宜,有时确实如此。

您应该查看关键字 vrrp、keepalived 和 haproxy 以获得一些想法和思考方式。