我不明白如何为我的简单场景设置故障转移。 我正在构buildAPI的服务网关。 我想要的是两台服务器 托pipe在不同的数据中心 。 而且我只是希望用户能够访问服务,即使其中一台服务器停机。 数据库同步没有问题,我只关心服务的可用性。
我该如何做,而防止用户在他们的最终实施任何types的故障转移逻辑? 我希望为用户提供单个域或单个IP地址,并能够使用此单一端点始终访问该服务。
我不明白的是如何做到这一点。 我知道我可以设置一个networking节点,将这些请求转发给第一台或第二台服务器,具体取决于这两台服务器当前正在联机。 但是,我没有看到这个设置如何解决了HA问题,因为我们刚刚为系统引入了单点故障 – 转发节点。 所以,如果这个节点出现故障,服务将不可用。
你能解释一下如何在现实世界中实现这一点吗? 是否有可能以合理的成本实现这一目标? (即不超过托pipe服务器本身的成本) 。
编辑:有人build议,不同的数据中心要求是昂贵的。 因此,请随时为1个数据中心内的2台服务器提供build议。
编辑2:随意提一下什么是该设置的合理成本。
它工作相当简单。 第一条规则是你必须有不止一次的东西。 为了简单起见,我将把它设置在一个数据中心,并且拥有这个DC所拥有的IP地址(你可以用你自己的IP地址和多个数据中心来完成),但是我们讨论一些多宿主AS的东西,BGP和一些其他的东西如此便宜和容易实施)。
你将需要至less有4个服务器(你可以做到只有两个,但这不是好的方法)。 2个应用程序和2个负载平衡,每个服务器有多个网卡。
基本设置是这样的:
/---\ /------\ /----------\ | S |-----| LB 1 |-----| SERVER 1 | --NET--| W | \------/\ /\----------/ | I | \_/ | T | / \ --NET--| C | /------\/ \/----------\ | H |-----| LB 2 |-----| SERVER 2 | \---/ \------/ \----------/
你有两个分开的线路由你的DC提供。 这两条线都在同一个VLAN中,都连接到交换机(最好的方式是2交换机)。 2个负载均衡器连接到这些交换机并共享一个虚拟IP。 这两台机器之间是可以stream通的IP。 你可以使用VRRP和keepalived来达到这个目标。
在这两个负载均衡器的后面,放置了两个镜像服务器。 这里来了魔法:
你应该知道,医pipe局是昂贵的方式,你不能做低预算。 你需要计算一下,如果你的服务中断不是HA的成本,有时候是这样。
你应该看看关键字vrrp,keepalived和haproxy的一些想法和方式如何思考。
当然,通常的做法是在某些forms的HA集群中使用两个转发(平衡)节点。 外部世界的一致性是通过各种forms的共享 IP地址 – VRRP,CARP(与VRRP相同,但是开放的实现)等等来实现的。因此,您将在平衡层和上数据/服务层。
数据/服务层的一致性在这个答案的范围之内,但是,通常它很简单。 您使用集中式会话存储(也可能复制,如redis或memcached)和复制的一组数据库。
一般情况下,这只能在两台物理服务器上实现,每台服务器同时扮演不同的angular色:一个平衡器,一个数据库服务器等等。