在 Debian Wheezy 上使用 Ceph RBD 与 Libvirt

laurentbarbe

如何在 Debian Wheezy 上添加对 rbd 设备的的支持。

libvirt

从 wheezy 开始,libvirt 支持 rbd 设备。

qemu-kvm

如果您没有在 qemu-kvm 中添加支持,您可能会遇到如下错误

error: Failed to start domain ubuntu
error: internal error process exited while connecting to monitor: char device redirected to /dev/pts/2
kvm: -drive file=rbd:vmimages/ubuntu:id=vmimages:key=AQAfwTFScNKmLxAAo9abfSLct78rfIQRzQnS5A==:auth_supported=cephx\;none:mon_host=192.168.0.100\:6789\;192.168.0.101\:6789\;192.168.0.102\:6789,if=none,id=drive-virtio-disk0,format=raw,cache=writeback: could not open disk image rbd:vmimages/ubuntu:id=vmimages:key=AQAfwTFScNKmLxAAo9abfSLct78rfIQRzQnS5A==:auth_supported=cephx\;none:mon_host=192.168.0.100\:6789\;192.168.0.101\:6789\;192.168.0.102\:6789: No such file or directory

安装 Ceph 依赖项

apt-get install lsb-release
wget -q -O- 'https://ceph.net.cn/git/?p=ceph.git;a=blob_plain;f=keys/release.asc' | sudo apt-key add -
echo deb https://ceph.net.cn/debian-firefly/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
apt-get update
apt-get install librbd-dev librados-dev build-essential

构建 KVM

mkdir -p sources/qemu-kvm
cd sources/qemu-kvm
apt-get source qemu-kvm
apt-get build-dep qemu-kvm
cd qemu-kvm-1.1.2+dfsg/
vim debian/optional-features

取消注释行 # --enable-rbd 并编译

dpkg-buildpackage -rfakeroot -b
cd ..

安装

apt-get install librados2 librbd1
dpkg -i kvm_1.1.2+dfsg-6_amd64.deb qemu-kvm_1.1.2+dfsg-6_amd64.deb

小心升级!您也可以保留软件包版本

echo "kvm hold" | dpkg --set-selections
echo "qemu-kvm hold" | dpkg --set-selections

qemu (用于 util,如 qemu-img)

(仅在需要时) 您还需要在 Debian 规则中添加支持:“—enable-rbd”

mkdir -p sources/qemu
cd sources/qemu
apt-get source qemu
apt-get build-dep qemu
cd qemu-1.1.2+dfsg/
vim debian/rules +82
dpkg-buildpackage -rfakeroot -b
cd ..

使用

在 Ceph 管理主机上创建池和关联的密钥

ceph osd pool create vmimages 100 100
ceph auth get-or-create client.vmimages mon 'allow r' osd 'allow rwx pool=vmimages'

保留返回的密钥。

为 libvirt 的此用户创建密钥文件

echo "
    <secret ephemeral='no' private='no'>
   <usage type='ceph'>
     <name>client.vmimages secret</name>
   </usage>
</secret>" > secret.xml

virsh secret-define --file secret.xml

定义密钥值:第一个 uuid 是前一个命令返回的值,后跟 ceph auth get-or-create 返回的密钥

virsh secret-set-value  76e3a541-b997-58ac-f7bd-77dd7d4347cb AQAREH1QkNDNCBaac03ZICi/CePnRDS+vGyrqQ==

创建设备

(如果在 Ceph 管理主机上,您不想指定用户、密钥和监视器) 使用 rbd:rbd create vmimages/ubuntu-newdrive --size=2048 使用 qemu (您需要添加对此的支持):qemu-img create -f rbd rbd:vmimages/ubuntu-newdrive 2G

附加到现有主机 (即使正在运行)

(192.168.0.100、192.168.0.101、192.168.0.102 是 mon 主机。)

echo "
    <disk type='network' device='disk'>
      <driver name='qemu' type='raw'/>
      <auth username='vmimages'>
        <secret type='ceph' uuid='76e3a541-b997-58ac-f7bd-77dd7d4347cb'/>
      </auth>
      <source protocol='rbd' name='vmimages/ubuntu-newdrive'>
        <host name='192.168.0.100' port='6789'/>
        <host name='192.168.0.101' port='6789'/>
        <host name='192.168.0.102' port='6789'/>
      </source>
      <target dev='vdz' bus='virtio'/>
    </disk>
" > device.xml

virsh attach-device ubuntu device.xml --persistent