My apologies if this is an obvious question, I'm a newbie as far as redundant networking goes, and I'm not sure what keywords to Google for. My application scenario is this:
The obvious thing to do in order to get network redundancy is to have two high-speed Ethernet switches, and connect each Linux server to both switches. That way if one of the switches fails, or somebody accidentally cuts through an Ethernet cable, communication can continue via the other cable/switch, and the system will remain fully functional.
My question is, is there a way to make the redundancy 100% transparent to the application software? (By transparent, I mean that the application software shouldn't have to know or care that there is more than one Ethernet port; ideally it would only see an eth0 and not an eth1... and if data stops flowing over one of the two physical Ethernet ports for whatever reason, the application software shouldn't have to detect the fault or do anything special in order to keep working).
Extra bandwidth isn't important for my purposes (one "lane" of gigabit ethernet is fast enough), but simplicity and reliability are.
The google juice you want is "Ethernet bonding". It's a work of art.
If you want simplicity and reliability, just get two switches that support multi-chassis link aggregation (vendors have their own names for it, sometimes it's just "stacking") and support enough Link Aggregates per switch to meet your needs. The set up LACP on the switch ports and servers so all your applications see is a single "bond0" interface on each server.
Linux also supports something called "adaptive load balancing", which still looks like one "bond0" interface to the application layer, but does not use LACP nor does it require switches with multi-chassis link aggregation support (but the switches must be cross-connected with good bandwidth). This mode uses ARP tricks to direct incoming traffic to each physical interface instead of using the link-layer bonding standards. It only requires dumb switches with no special features, and works well for us in production with IPv4, not sure about IPv6.