Load balancing multiple NICs on single machine presenting a virtual IP
I've inherited a network setup, where the NFS/Samba linux RAID server ("Ubuntu 14.04.5 LTS") is serving everything over one NIC. As a result, the 1Gb network bandwidth is saturated.
Unfortunately, the entire subnet attaches to this server via it's direct IP.
I'm trying to find a load balancing solution where I can re-assign the current server IP address to a virtual server IP, and have traffic to that virtual IP load balanced across two or more NICs that reside within the same (actual NFS) server.
Currently, there's a traditional switch connecting all incoming ethernet cables, and only one cable going out to the server's NIC.
The only solution I have found so far is the Kemp LoadMaster LM-X3 hardware solution.
I've also looked into LACP, but I'm not clear that this would support a virtual IP. It seems to only aggregate the outgoing packets (or still require multiple NICs to have individual IPs). Although, perhaps for this use - it's fine if only outgoing packets are load balanced.
Are there better solutions available?
What flavor of Linux is the server running? Do you think network teaming could work? It's the updated version of interface bonding. With teaming you can join multiple interfaces into a team in an active/active, active/backup, or roundrobin architecture. The team will all be seen as the same L2 interface and the vIP belongs to the team (parent) virtual interface. Teaming allows for multiple different 'runners' (aka methods):
broadcast -- Simple runner which directs the team device to transmit packets via all ports.
roundrobin -- Simple runner which directs the team device to transmits packets in a round-robin fashion.
activebackup -- Watches for link changes and selects an active port to be used for data transfers.
(*)loadbalance -- To do passive load balancing, runner only sets up BPF hash function which will determine port for packet transmit. To do active load balancing, runner moves hashes among available ports trying to reach perfect balance.
lacp -- Implements 802.3ad LACP protocol. Can use same Tx port selection possibilities as loadbalance runner.
From your requirements, I think a loadbalance runner could work. This is a good guide for teaming: https://www.rootusers.com/how-to-configure-network-teaming-in-linux/
Hope it helps