Proxmox doesn’t currently include a native way to share a single management IP across all nodes in a cluster. Instead of manually switching between individual node IPs, or sticking everything behind a proxy, we can use Keepalived to create a floating virtual IP, or VIP, that automatically moves between nodes in the event one goes down. Keepalived is extremely lightweight, reliable, and allows us to continue accessing each node directly if desired.
This guide walks you through configuring Keepalived on a 3-node Proxmox cluster to provide HA access to the management web interface.
What We’ll Achieve
✅ Assign a single management IP (VIP) (e.g., 10.103.0.50
) for all Proxmox nodes.
✅ Failover support: If the active node fails, the VIP moves to another node.
✅ No manual intervention needed when nodes go down.
✅ Always access Proxmox at https://10.103.0.50:8006
instead of per-node IPs.
Step 1: Install Keepalived on All Proxmox Nodes
Keepalived is a lightweight daemon that enables VRRP (Virtual Router Redundancy Protocol) to float an IP across multiple hosts.
Install Keepalived
Run this on each Proxmox node:
apt update && apt install -y keepalived
Step 2: Configure Keepalived on All Nodes
Each node will have slightly different configurations based on priority.
Edit Keepalived Config
On each node, edit:
nano /etc/keepalived/keepalived.conf
Node 1 (10.103.0.51
) – MASTER Configuration
vrrp_instance VI_1 {
state MASTER
interface vmbr0 # Change this if needed
virtual_router_id 51
priority 200 # Highest priority
advert_int 1
authentication {
auth_type PASS
auth_pass secretpassword
}
virtual_ipaddress {
10.103.0.50/24 # Floating VIP
}
}
Node 2 (10.103.0.52
) – BACKUP Configuration
vrrp_instance VI_1 {
state BACKUP
interface vmbr0
virtual_router_id 51
priority 150 # Medium priority
advert_int 1
authentication {
auth_type PASS
auth_pass secretpassword
}
virtual_ipaddress {
10.103.0.50/24
}
}
Node 3 (10.103.0.53
) – BACKUP Configuration
vrrp_instance VI_1 {
state BACKUP
interface vmbr0
virtual_router_id 51
priority 100 # Lowest priority
advert_int 1
authentication {
auth_type PASS
auth_pass secretpassword
}
virtual_ipaddress {
10.103.0.50/24
}
}
📌 Make sure to replace vmbr0
with the correct network interface (ip a
to check your interface name).
Step 3: Enable and Start Keepalived
After configuring all nodes, restart Keepalived to apply changes.
Run this on each node:
systemctl enable --now keepalived
Now, check if the VIP is assigned to the MASTER node (10.103.0.51
):
ip a | grep 10.103.0.50
✅ Expected Output on MASTER:
inet 10.103.0.50/24 scope global secondary vmbr0
On backup nodes, the VIP won’t appear unless the MASTER fails.
Step 4: Testing Failover
To ensure the VIP fails over properly, stop Keepalived on the MASTER:
systemctl stop keepalived
Now check where the VIP is:
ip a | grep 10.103.0.50
✅ The VIP should now move to Node 2 (10.103.0.52
).
Start Keepalived again to restore normal operation:
systemctl start keepalived
Step 5: Access Proxmox Using the Floating VIP
Instead of connecting to each node separately, use the shared VIP: https://10.103.0.50:8006
This VIP will always point to the active node.
Final Thoughts
✅ High availability for the Proxmox web UI.
✅ VIP automatically fails over in case of a node failure.
✅ No need to memorize or manually switch node IPs.
Now your Proxmox cluster has a shared, highly available management IP!