关于LVS的双机热备(或多机互备)情况下的状态复制问题

诸位好,
最近在研究一种新的负载均衡方案,本来我们一直使用F5,虽然F5的可靠性已经很高了,但
仍然存在单点问题,而且这个设备的是我们无法完全控制的,想在上面增加一些自己的规则或
算法都非常困难。所以有一种可控制、可扩展的负载均衡方案做为F5的备份和补充,以致完全
取代F5的作用是很有必要的,而且这个负载均衡LB服务器最好可以双机热备或者多机互备。

双机或者多机互备的方案,我看到有HA和CARP两种,HA家都了解,通过心跳线互联的两个机
器,可以在一台出故障是由另外一台接管。而CARP是最早在OpenBSD中实现的,可用实现IP的
冗余,即多个服务器可以配置为一个虚拟IP服务,每一时刻只有一个服务器上的VIP起作用,
当这个服务器出问题后,其他服务器会马上接管这个VIP继续服务,所以CARP不仅仅能实现HA
那样的效果,还可以实现多台服务器,多个VIP之间的相互备份。
经一些考察,我发现有两种方案可选:

第一:OpenBSD + PF + PFSYNC + CARP
这种方案中,PF负责NAT或者IP转发,PFSYNC负责在几台LB之间同步和复制状态信息,CARP
负责IP冗余,当一台LB发生故障时,其他LB会马上接管这个LB上的VIP,并通过PFSYNC同步过
来的状态信息,保持客户端会话不会中断。

第二:Linux + LVS + UCARP or HA
这个方案中,LVS负责负载均衡,UCARP是CARP的另外一种实现,效果也类似,能实现IP冗余
,这里唯一不太确定就是LVS的状态同步和复制问题,即两个LVS之间如何保持状态信息的一致
,从而使UCARP的切换可以无缝的进行。

比较而言,PF没有健康检查和不同优先级的调度算法,这个都需要你自己写脚本去实现,而
LVS则已经实现了这些,所以我很希望能采用LVS来实现负载均衡。

我看过章博士写的“调度器状态同步”的文章(http://zh.linuxvirtualserver.org/node/70),
不知道这部分代码实现了吗?

Forums:

可以实现LVS的调度连接状态同步。当主调度器失效时,主调度器会接管服务,并拥有调度连接状态,所以绝大多数已建立的连接会调度到正确的服务器,而不会影响用户的使用。

希望章博士能给我提供一些这方面的资料::Linux + LVS +HA就可以了:)

这部分代码已经实现,可以参见IPVS Connection Synchronization,看如何使用。

randomness