I've added some features that I needed for our purposes to LVS, and I'd
like to submit a patch, in case they might be useful to other users.
The patch is against the Ubuntu 12.04 kernel (3.2.0).
The patch adds three features:
1. Sloppy TCP handling. When enabled (net.ipv4.vs.sloppy_tcp=1,
default 0), it allows IPVS to create a TCP connection state on any TCP
packet, not just a SYN. This allows connections to fail over to a
different director (our plan is to run multiple directors active-active)
without being reset.
2. SH rebalancing. When enabled (net.ipv4.vs.sh_rebalance=1, default
0), virtual servers using SH (or SHP --- see below) scheduling will
retry the realserver selection if the realserver selected the first time
round is unavailable (e.g., because it has weight 0). This allows
realservers to be paused on SH(P) virtual servers by setting the weight
3. SHP (SH + port) scheduler. This is a clone of the SH code, but
hacked to also take the port number (TCP, UDP, SCTP) into account. This
may seem no different to round-robin, but in our scenario, if a
connection is failed over to a different director, this guarantees that
it will continue being forwarded to the same realserver.