Proxmox Link Aggregation Using balance-alb Windows vs Linux
Proxmox Link Aggregation Using balance-alb Mode
Explanation
I have this nice little business switch that unfortunately doesn't support LACP for network link aggregation. One of my cables also turned out to be a little bit faulty, so to prevent any mishaps in the future I decided to configure a link bond between the proxmox box's two NICs (Network Interface Cards). Link bonding, also known as Link aggregation or NIC Teaming is where you have two network interfaces on your host working together. This can provide some redundancy, load balancing, and even increase your throughput depending on your configuration. the balance-alb setting can be used regardless of what the switch supports. It's best only used on small networks.I ran into an interesting problem. None of the VM's could access the network after changing my proxmox box to use the balance-alb bond mode. The solution turned out to be simple.
For windows VM's
- Install the VirtIO driver in windows, and then set the Networking Device model to VirtIO (paravirtualized)
- Change the Network Device model from VirtIO to Realtek.
HUH? that's kinda weird, basically opposite configurations.
I figured this out because in a Windows 11 VM to save time I never installed the VirtIO drivers. With the lack of network access, I decided maybe it was a good time to install it. It worked! Since switching the device worked for Windows why not try switching devices for the Linux VMs.
I'm a bit curious why this worked.
My friendly AI friend Claude criticizes this post because the proxmox doc's say not to use balance-alb or balance-tlb. I can confirm that this works regardless of the documentation or my friendly AI's insistence and hypothesis on why it might temporarily work and is bad to do. In a pinch when you have sad consumer level hardware you *can implement it AND it DOES improve throughput performance/redundancy in PRACTICE. The only issue that i've seen is that on power failures or reboots sometimes it struggles to properly reconnect to the network. If that out-weighs the benefits for you then don't do this.
You can help prevent the reconnect issues by delaying/staggering the start of your VM's on the restoration of power.
From my AI friend:
I figured this out because in a Windows 11 VM to save time I never installed the VirtIO drivers. With the lack of network access, I decided maybe it was a good time to install it. It worked! Since switching the device worked for Windows why not try switching devices for the Linux VMs.
I'm a bit curious why this worked.
My friendly AI friend Claude criticizes this post because the proxmox doc's say not to use balance-alb or balance-tlb. I can confirm that this works regardless of the documentation or my friendly AI's insistence and hypothesis on why it might temporarily work and is bad to do. In a pinch when you have sad consumer level hardware you *can implement it AND it DOES improve throughput performance/redundancy in PRACTICE. The only issue that i've seen is that on power failures or reboots sometimes it struggles to properly reconnect to the network. If that out-weighs the benefits for you then don't do this.
You can help prevent the reconnect issues by delaying/staggering the start of your VM's on the restoration of power.
From my AI friend:
- The VirtIO/Realtek swap most likely worked by coincidence. Changing the NIC model re-initializes the guest's interface and sends fresh ARP traffic, which can temporarily fix balance-alb's ARP-based receive balancing. Expect the problem to come back.
- Telling readers to put Linux VMs on Realtek (rtl8139) is a performance regression. It's a slow, fully emulated legacy NIC, and Linux has the VirtIO driver built in.
- The fix is to switch the bond to active-backup, which gives you the faulty-cable redundancy you wanted, and put every VM back on VirtIO.Once your LACP-capable switch is in, move to 802.3ad.
Steps
Here's some configuration steps if anyone else stumbles upon this post:
1) Create a Linux Bond in Proxmox. (You might need to remove Network Device from other settings you've setup)
In the left hand side of the screen select the node you want to configure.
Datacenter -> Node (in this case it's named myVMs) -> System -> Network
Create -> Linux Bond ->
1) Create a Linux Bond in Proxmox. (You might need to remove Network Device from other settings you've setup)
In the left hand side of the screen select the node you want to configure.
Datacenter -> Node (in this case it's named myVMs) -> System -> Network
Create -> Linux Bond ->
*Name
*Slaves
*Slaves
*Mode
2) Set your bridge to use the bond.
Click "vmbr0" -> Edit -> Bridge Ports
3) Click "Apply Configuration"
==================================================================
Setting the Network Device for your VM's
Datacenter -> MyVMs (Node) -> VM (100 Windows) -> Hardware -> Network Device -> Edit
Datacenter -> MyVMs (Node) -> VM (100 Windows) -> Hardware -> Network Device -> Edit
Select the Network Device Model
For Windows VM:
Installing VirtIO Drivers for Windows VM on Proxmox VE – Majornetwork
(Download and install the VirtIO Drivers)
Then change the model setting.
Installing VirtIO Drivers for Windows VM on Proxmox VE – Majornetwork
(Download and install the VirtIO Drivers)
Then change the model setting.
For Linux VM:
You might need to reboot or reload your network settings.
Network Configuration - Proxmox VE
Comments
Post a Comment