OpenStack Migrate Routers and DHCP
Move agent assignments from a source node to a target node using the OpenStack CLI.
Prerequisites
Ensure admin access (source openrc admin admin) and that target agents are UP.
Migrating L3 Routers
1. Identify Agents
SOURCE_L3_ID=$(openstack network agent list --agent-type l3 --host network-node-01 -f value -c ID)
TARGET_L3_ID=$(openstack network agent list --agent-type l3 --host network-node-02 -f value -c ID)
2. Migrate Routers
ROUTERS=$(openstack router list --agent $SOURCE_L3_ID -f value -c ID)
for ROUTER_ID in $ROUTERS; do
openstack network agent remove router $SOURCE_L3_ID $ROUTER_ID
openstack network agent add router $TARGET_L3_ID $ROUTER_ID
echo "Migrated router: $ROUTER_ID"
done
3. Verify
openstack network agent list --router <router-id>
Migrating DHCP Agents
1. Identify Agents
SOURCE_DHCP_ID=$(openstack network agent list --agent-type dhcp --host network-node-01 -f value -c ID)
TARGET_DHCP_ID=$(openstack network agent list --agent-type dhcp --host network-node-02 -f value -c ID)
2. Migrate Networks
NETWORKS=$(openstack network list --agent $SOURCE_DHCP_ID -f value -c ID)
for NET_ID in $NETWORKS; do
openstack network agent remove network $SOURCE_DHCP_ID $NET_ID
openstack network agent add network $TARGET_DHCP_ID $NET_ID
echo "Migrated network: $NET_ID"
done
3. Verify
openstack network agent list --network <network-id>
Automated Drain Script
#!/bin/bash
SOURCE_HOST=$1
TARGET_HOST=$2
if [ -z "$SOURCE_HOST" ] || [ -z "$TARGET_HOST" ]; then
echo "Usage: $0 <source-host> <target-host>"
exit 1
fi
SRC_L3=$(openstack network agent list --agent-type l3 --host $SOURCE_HOST -f value -c ID)
TGT_L3=$(openstack network agent list --agent-type l3 --host $TARGET_HOST -f value -c ID)
if [ -z "$SRC_L3" ] || [ -z "$TGT_L3" ]; then
echo "Error: Could not find L3 agents for hosts."
exit 1
fi
for R in $(openstack router list --agent $SRC_L3 -f value -c ID); do
openstack network agent remove router $SRC_L3 $R
openstack network agent add router $TGT_L3 $R
done
SRC_DHCP=$(openstack network agent list --agent-type dhcp --host $SOURCE_HOST -f value -c ID)
TGT_DHCP=$(openstack network agent list --agent-type dhcp --host $TARGET_HOST -f value -c ID)
if [ -z "$SRC_DHCP" ] || [ -z "$TGT_DHCP" ]; then
echo "Error: Could not find DHCP agents for hosts."
exit 1
fi
for N in $(openstack network list --agent $SRC_DHCP -f value -c ID); do
openstack network agent remove network $SRC_DHCP $N
openstack network agent add network $TGT_DHCP $N
done
openstack network agent set --disable $SRC_L3
openstack network agent set --disable $SRC_DHCP
echo "Drain complete. Host $SOURCE_HOST is safe to reboot."
Usage:
chmod +x drain-network-node.sh
./drain-network-node.sh network-node-01 network-node-02
High Availability (HA)
Edit /etc/neutron/neutron.conf:
[DEFAULT]
l3_ha = true
max_l3_agents_per_router = 2
dhcp_agents_per_network = 2
Create HA router:
openstack router create --ha ha-router
Troubleshooting
- Agent not found: Check
systemctl status neutron-l3-agent. - DHCP leases lost: VMs renew automatically.
- HA failover fails: Check
keepalivedand/var/log/syslog. - Agent status DOWN: Run
systemctl restart neutron-l3-agent. - Target overloaded: Verify CPU/RAM availability.