修改 Libvirt 的 UUID

由于物理机器有限 , 想做 OpenStack 的多机环境一直是个问题 。 之前是在 OpenStack 上部署 OpenStack。 由于只有一台物理机 , 资源相当紧张 。 不能建太多机器 。 最近突然想 , 既然 LXC 现在已经很完善了 。 能不能就利用它来做 OpenStack 服务间的隔离呢 。 所以最近一直在搞这东西 。 搞了几天还是有效果的 。 基本搭建了 OpenStack + Ceph + Swift 的环境出来 。 其中网络用的 Neutron + ML2 + OVS + VLAN。 由于用 LXC 的隔离的 , 相对于之前来说相当节省资源 。 很好的解决了资源的问题 。 可以做一些大量机器的实验了 。 之后也会也这其中遇到的一些问题写下来 , 备忘 。

今天主要写下配置 Live Migration 过程中遇到的一个问题 。

每个 Libvirtd 实例都会有一个 UUID 存在 。 不同的 libvirt 实例的 UUID 应该是不同的 。 否则在 migrate 过程中 , libvirt 会认为自己是在向自己迁移从而导致迁移失败 。 这个 UUID 有一个默认值 , 是来自于 SMBIOS UUID。 这两个 UUID 可以通过以下方法拿到 :

$ dmidecode  -s system-uuid
4C4C4544-0032-3210-804C-C7C04F463358

$ virsh capabilities | grep uuid
<uuid>44454c4c-3200-1032-804c-c7c04f463358</uuid>

可以看到这两个值是一样的 ( 不知道为什么有一段顺序不对 )。

当我在不同的 LXC 中启动多个 libvirt 时 , 就会触发这个问题 。 所有的 libvirt 使用的是相同的 uuid 从而导致 live migration 失败 。

修改的办法也很简单 。 这个 UUID 可以在 libvirt 的配置文件 /etc/libvirt/libvirtd.conf 中修改后重启 libivrt 就可以了 。

host_uuid = "8ba976e9-1224-4339-9526-719fe6dee311"

REF

Comments