I learn't an important lesson today, never ever remove ms_bind_ipv4 = false from ceph.conf or the cephFS will be fucked. note also recreating the mgrs and mds seems advisable too
only ever reboot one node, if that doesn work or you see libceph error storm when it reboot - solve that first (make sure no wrong mons defined in storage.cfg or ceph.conf)
This document describes a safe, production-grade method for migrating a Proxmox+Ceph cluster to new /64 IPv6 loopback addresses for monitor daemons (MONs) without downtime, following best practices and using native Proxmox tools (pveceph
, GUI).
- Old configuration: MONs bound to
/128
loopback IPv6 addresses (e.g.,fc00::81/128
) - New configuration: MONs bound to
/64
routed loopback IPv6 addresses (e.g.,fc00:81::1/64
) - Goal: Gracefully migrate monitors to new IPs with no client disruption
- Cluster type: Proxmox nodes are the only Ceph clients (no external clients)
On each node (pve1, pve2, pve3):
Edit /etc/network/interfaces.d/thunderbolt
:
# Loopback for Ceph MON
auto lo
iface lo inet loopback
up ip -6 addr add fc00::81/128 dev lo
up ip -6 addr add fc00:81::1/64 dev lo
Apply live without reboot:
ip -6 addr add fc00:81::1/64 dev lo
Verify:
ip -6 addr show lo
β Confirm full FRR/OpenFabric routing.
Immediately after networking is expanded, update /etc/pve/ceph.conf
:
[global]
public_network = fc00::/8
cluster_network = fc00::/8
β No Ceph restart needed yet.
Per Node:
pveceph mon create --mon-address fc00:81::1
β Wait for MON to become healthy.
Using GUI or CLI:
pveceph mon destroy pve1
β Clean removal from MONmap.
systemctl reload [email protected]
β Forces GUI refresh if needed.
- pve2:
pveceph mon create --mon-address fc00:82::1 pveceph mon destroy pve2
- pve3:
pveceph mon create --mon-address fc00:83::1 pveceph mon destroy pve3
After full migration:
- Edit
/etc/network/interfaces.d/thunderbolt
- Remove old
/128
address lines. - Keep only
/64
addresses.
Apply:
ifreload -a
Feature | Benefit |
---|---|
Dual IPs during migration | No disruption to MON binding |
pveceph mon create |
Clean MON creation, automatic key/cert |
pveceph mon destroy |
Clean MON removal from MONmap |
No manual monmaptool needed | Safer, faster |
No client downtime | Proxmox internal clients auto-adapt |
- Brackets
[ ]
not needed around IPv6 inmon_host
for Proxmox ceph.conf - Only Proxmox nodes are Ceph clients β no need to update external clients
- Quorum preserved throughout the migration
Time | Action |
---|---|
T+0m | Add /64 loopbacks |
T+5m | Update public_network , cluster_network |
T+10m | Create new MONs |
T+20m | Remove old MONs |
T+30m | Confirm HEALTH_OK |
T+35m | Clean old /128 loopback (optional) |
- Pure /64 routed IPv6 Proxmox+Ceph cluster
- Fully healthy MON set
- Zero downtime migration
- Future IPv6 client-ready
- Production-grade best practice
note this isn't 100% complete - one had to also destroy and recreate the mgrs and the mds
libceph (the kernel client) can get very confused during this process - this will block cephFS volumes from being mounted until your troubleshoot why its still picking the wrong mons....