使用ceph块设备
ceph提供了一个具有很多高级特性的虚拟块设备,可以当做普通块设备来使用,也可以用于qemu等虚拟化环境。ceph提供的块设备具有多副本高可用、快照、精简配置、条带化、远程镜像等很多特性。
基本操作
创建并初始化一个块设备池,取名叫rbd
1 | $ sudo ceph osd pool create rbd 36 36 |
如不提供pool名字,rdb命令默认使用名字为rdb的pool
创建块设备镜像data,大小为1024MB,可以忽略掉pool名字
1 | $ sudo rbd create --size 1024 rbd/data |
因为ceph使用精简配置,所以把size设置的大一些也无妨,不使用并不会真正的占用存储空间。
获取镜像信息
1 | $ sudo rbd info data |
resize镜像,扩大和缩小
1 | $ sudo rbd resize --size 2048 foo |
删除块设备镜像
1 | $ suro rbd rm {pool-name}/{image-name} |
内核模块块设备映射
可以通过内核模块将ceph块设备镜像映射成为OS可以操作的块设备,就像一个真的块设备一样,比如一块硬盘。
镜像列表
1 | $ sudo rbd list |
映射为块设备,使用默认的client.admin用户
1 | ###format: rbd device map {pool-name}/{image-name} --id {user-name} |
这里映射出来的块设备名字为/dev/rbd0,当做普通的块设备来使用就行了。
查看映射设备列表
1 | $ sudo rbd device list |
取消设备映射
1 | ###format: rbd device unmap /dev/rbd/{poolname}/{imagename} |
注意:块设备是不能共享访问的,所以不要多次映射并行访问同一个镜像。
QEMU集成
创建镜像,要使用raw格式,不要使用其他格式
1 | ###format: qemu-img create -f raw rbd:{pool-name}/{image-name} {size} |
查看镜像信息
1 | $ sudo qemu-img info rbd:rbd/foo |
resize镜像
1 | ###format: qemu-img resize rbd:{pool-name}/{image-name} {size} |
转换已有kvm镜像为ceph镜像
1 | $ sudo qemu-img convert -f qcow2 -O raw bar.qcow2 rbd:rbd/bar |
运行客户机
1 | $ qemu -m 1024 -drive format=rbd,file=rbd:rbd/bar,cache=writeback |
lxd集成
lxd已经内置支持ceph集群存储,执行lxd init时,指定存储后端为ceph即可。
也可以使用lxc storage命令创建新的存储池。
lxd集群使用ceph后端存储可以创建高可用lxd容器,但是同一时刻只能有一个节点在运行一个容器实例,需要其他机制来自动故障转移。
References:
[1]CEPH BLOCK DEVICE
[2]Ceph 中块设备 RBD 的基本用法
[3]Ceph storage driver in LXD