块存储
块是字节序列(例如,一个512字节的数据块)。基于块的存储接口是使用旋转介质(例如硬盘,CD,软盘甚至传统的9轨磁带)存储数据的最常用方法。块设备接口的无处不在使虚拟块设备成为与海量数据存储系统(如Ceph)进行交互的理想候选者。
Ceph块设备经过精简配置,可调整大小,并在Ceph集群中的多个OSD上存储条带化的数据。Ceph块设备利用了RADOS功能,例如快照,复制和一致性。Ceph的RADOS块设备(RBD)使用内核模块或librbd库与OSD进行交互。
注意
内核模块可以使用Linux页面缓存。对于librbd基于应用程序,Ceph支持RBD缓存。
Ceph的的块设备提供了无限的可扩展性,以高性能的内核模块,或者KVM系列如QEMU和基于云计算系统,如OpenStack的和的CloudStack依赖的libvirt和QEMU与Ceph的块设备集成。您可以使用同一群集同时运行Ceph RADOS网关,Ceph文件系统和Ceph块设备。
优点:
- 通过Raid与LVM等手段,对数据提供了保护;
- 多块廉价的硬盘组合起来,提高容量;
- 多块磁盘组合出来的逻辑盘,提升读写效率;
缺点:
- 采用SAN架构组网时,光纤交换机,造价成本高;
- 主机之间无法共享数据;
使用场景
- docker容器、虚拟机磁盘存储分配;
- 日志存储;
- 文件存储;
常用命令如下:
# 创建存储池
ceph osd pool create rbdpool 64 64
# pg数的计算公式:total pgs = (osd * 100) / (pool size)。值取接近2的幂,如(3*100)/3=100, total pgs=128
#启用rbd功能
ceph osd pool application enable rbdpool rbd
# 查看存储池
rados lspools
ceph osd lspools
ceph osd dump | grep -i pool
#rbd存储池不能直接使用,需要先在其中创建映像(image),并把映像文件作为块设备使用。
#创建映像
rbd create img1 --size 1024 --pool rbdpool
#获取映像信息
rbd --image img1 --pool rbdpool
# 删除rbd镜像
rbd rm img1 -p rbdpool
# 磁盘映射
rbd map --image img1
# 查看映射的设备名称
rbd showmapped
#取消映射RBD镜像
rbd unmap /dev/rbd1
#创建文件系统
mkfs.xfs /dev/rbd0
#挂载设备到系统
mkdir /mnt/img1
mount /dev/rbd0 /mnt/img1
#RBD镜像的使用量
rbd du
#调整RBD镜像容量
rbd resize rbdpool/img1 --size 20480
#同步文件系统,查看新的容量是否被内核接受
xfs_growfs -d /mnt/img1/
# 创建RBD快照
rbd snap create rbd/img1@snap1
#查看所创建的快照
rbd snap ls rbd/snap1
# 恢复快照
umount /mnt/img1
rbd snap rollback rbd/img1@snap1
# 对快照设置保护
rbd snap protect rbd/img1@snap1
# 对快照解除保护
rbd snap unprotect rbd/img1@snap1
# 删除快照
rbd snap rm rbd/img1@snap1