我已经研究了几天的高可用性解决方案,到目前为止我发现加州大学研究生院对于 IP 故障转移非常有用。
它非常简单,而且能完成工作。
我在考虑更进一步:
如果路由器连接共享同一 IP 的两个节点将所有数据包发送到两个节点(在任何时候),那么我就可以实现更好的负载平衡。
这就像是一个“主-主”解决方案,而不是“主-备份”。
源 IP 是可分割的。
这冗余组,假设两个这样的节点共享一个(“虚拟”)IP,如上所述。
当它们都启动时,它们只需划分客户端的源 IP(其纯数字)并知道如何做出反应。
例如,Node1 取除以 2 的 IP。Node2
取除以 2 的 IP。
客户端发起 TCP/IP 连接(通过共享 IP)。
连接两个节点的路由器将此请求发送给两个节点。
如果客户端的 IP 正好除以 2,则 Node1 会应答。
此时 Node2 会忽略,因为它知道 Node1。
如果一个节点发生故障(例如 Node1),另一个节点(Node2)会检测到该故障 - 通常情况下,就像 UCARP 所做的那样!
此时,Node2 将开始为其余客户端提供服务。
当 Node1 恢复时,Node2 将停止回答来自可被 2 整除的 IP 的 SYN 请求(TCP/IP 连接启动的第一步),让 Node1 继续提供服务。
一个可能的问题可能来自路由器的方向:需要将每个传入的数据包发送到冗余组中的 X 个节点。内部网络负载较高。
另一个可能的问题每个节点实际上都会收到很多很多的数据包,甚至包括那些它“不想要”的数据包。
对于今天的路由器/网卡,我认为这与以下好处相比是一个很小的代价极高的可用性。
更不用说在这种情况下我会以良好的方式充分利用我的资源而不是拥有一个或多个只起到“待机”作用的“待机”服务器。
我的确切问题是:
1)是否已经有这样的解决方案?(开源、免费软件、基于 Linux)。
2) 路由器能支持这种东西吗?它应该支持什么标准?关于这种能力,我会问 DS/VPS 提供商什么问题?
无论如何,这是我对这个问题的一些思考。我很高兴得到一个简洁的答案,并附上链接和几句话。当然,更多的答案也欢迎 :)
答案1
我认为这是不可能的。这肯定不存在,因为与标准方法相比,它的用途非常有限。
我看到的主要问题是跟踪每个进出的 IP 数据包,并以对应用程序完全透明的方式同步两台计算机上的 IP 堆栈状态。如何“模拟”节点 1 上的应用程序执行工作但不应答,或神奇地获取节点 2 的状态?它不能在没有特殊编程的情况下继续节点 1 应用程序的 TCP 通信。