抱歉,如果以前有人问过这个问题,但我似乎找不到太多关于它的信息。
我们将使用 HAProxy 来平衡我们的 MariaDB Galera 集群。我在这方面看到的所有文章/教程都使用 Keepalived(或类似的东西)来进行主动/被动 HAProxy 设置。
是否有充分的理由说明您不应该进行主动/主动设置?
每个 HAProxy 节点可以有一个固定 IP,也可以有一个浮动 IP。正常情况下,请求是在两个 HAProxy 节点之间共享的,如果一个节点宕机,另一个会使用它的浮动 IP 并处理两个 IP 下的请求。当另一个重新启动时,它会重新获取其浮动 IP 和负载份额。
我很感激你对此的意见。
卢克
对于同一资源,不要使用两个虚拟 IP 地址进行主动/主动设置的重要注意事项是
2020 年更新:
keepalived
已经过时了一段时间,因为它在虚拟云 (AWS) 中不起作用。一点历史
曾几何时,办公室里有一个(思科)互联网路由器。路由器为所有机器提供互联网访问,这很好。
...然后路由器死了,每个人的互联网都被破坏了,而且很糟糕。
事实证明,任何东西都需要两个才能有冗余。因此,思科开始提供成对的可协同工作的路由器。
这是通过称为HSRP、VRRP或CARP的协议完成的。HSRP是解决问题的原始 cisco 制造的协议。它后来被标准化为VRRP https://www.rfc-editor.org/rfc/rfc3768(1998年),并被大多数网络设备和供应商实施。BSD 人重新发明了他们自己的协议CARP来做同样的事情,由于对许可或专利的担忧,他们无法采用 VRRP。
Keepalived(和 uCARP)是实现 VRRP(和 CARP)的软件。可以在两个常规 Linux 服务器上设置它以在它们之间进行故障转移。
AWS 的崛起与 VRRP 的终结
VRRP如何运作?对于初学者来说,它需要一个浮动 IP,比如说 192.168.1.254,在任何时间点只有一个路由器拥有该 IP 的所有权。网络中的设备只是将流量发送到该(浮动)IP 并到达活动路由器,他们不知道它是浮动的,也不在乎。两台路由器不断相互通信,如果其中一台挂掉,另一台路由器接管 IP 并开始处理流量。
此时需要熟悉 OSI 网络第 2 层和第 3 层(MAC 和 IP)。网络设备使用MAC和IP地址进行通信,地址使用ARP 解析。
浮动 IP 被接管的概念涉及网络堆栈中的许多恶作剧(上面的所有首字母缩略词),它不是完全设计的,也不是预期的行为。
在物理网络上,多台计算机以物理方式插入一个以太网交换机,它通常可以工作。
在虚拟机上,它通常不起作用。虚拟网络必须处理网络流量(MAC 和 IP 层),它通常会阻止魔术数据包或隔离虚拟主机以防止 VRRP 运行。
在主要的虚拟云(AWS、Google 和 co)上。这绝对行不通,而且是故意的。想象一下,如果一个 AWS 实例可以从另一个 Linux 实例(可能来自另一个客户)接管 IP(所有流量)。我勒个去?!
云和 CDN 解决方案
云提供商提供负载均衡器解决方案,请参阅 AWS ELB 和 Google Cloud 负载均衡器。它们带有针对此问题的内置冗余,因此您不必考虑它。keepalived 已经过时了。
下一个方面是 CDN(CloudFlare、Akamai)。如今,所有公共网站都运行在提供缓存、过滤和 DDoS 保护的 CDN 后面。CDN 可以在多个上游服务器之间提供负载平衡。只需配置所有单独的服务器,流量就会被拆分。
最后但并非最不重要的。keepalived 只允许在众多服务器中拥有一个活动服务器,轻描淡写会浪费资源。这实际上是现实世界中的一个灾难性问题,因为事情需要扩展,而不能通过设计扩展。今天使用的故障转移解决方案(如在云和 CDN 中发现的那样)旨在将流量分配到多个活动的目的地。实现起来要复杂得多,并且是在不同的层上累积完成的(参见
DNS
,Anycast
,OSPF
,BGP
)。keepalived 不再是全局的一部分。