I've been playing around with high-availability solutions for a few days and so far I find UCARP very useful for IP fail-overing.
It's dead simple and does the job.
I was thinking about taking it a step further:
If the router which connects the two nodes sharing the same IP would send ALL packets to both nodes (at all times), then I could achieve much greater load balancing.
It's like a "master-master" solution instead of "master-backup".
Source IPs are dividable.
The group of redundancy, let's say two such nodes, share one ("virtual") IP, as said.
While they are both up they would simply divide the source IP (its plain number) of the client and know how to react.
For example, Node1 takes IPs which are divided by 2.
Node2 takes the rest.
A client initiates a TCP/IP connection (through the shared IP).
The router that connects both nodes send this request to both.
If the client's IP perfectly divides by 2 then Node1 answers.
At this point Node2 ignores, because it knows about Node1.
If one node fails, for example Node1, the other (Node2) detects it - normally, as UCARP does anyway!
At that point Node2 would start serving the rest of the clients.
When Node1 comes back Node2 will stop answering SYN requests (first steps of TCP/IP connection initiation) coming from an IP dividable by 2, letting Node1 continue serving.
A possible issue might rise from the router's direction: It needs to send each incoming packet to X nodes in the group of redundancy. High(er) internal network load.
Another possible issue is that each node practically gets many many packets, even those it doesn't "want".
With today's routers/networkd-cards I see this as a very small price compared to the benefit of very high availability.
Not to mention that in such case I'd utilize 100% of my resource (in a good way) instead of having one or more "stand-by" servers which do nothing more than "standing-by".
My exact question is:
1) Is there already such a solution? (open-source, freeware, linux-based).
2) Can a router support such thing? What standards should it support? What would I ask a DS/VPS provider regarding this ability?
Anyway this is some of my reflections regarding this subject. I'd be happy to get a concise answer supported by links and a few words. More than that is obviously welcome :)
I do not think this is possible / feasible. It definitely does not exist because it is of very limited use compared starndard aproaches.
The main issue i see is tracking every ip packet in and out and syncing the state of the IP stack on both computers in a way that is fully transparent for the application. How do you "simulate" an application on node 1 doing the work but not answering, or magically picking up the stae of a node 2? It can not just continue the tcp communication of a nocde 1 application without... special programming.