前言
在OpenStack平台上,采用bcache加速ceph分布式存储的方案被广泛用于企业和云环境。一方面,Ceph作为分布式存储系统,与虚拟机存储卷紧密结合,可以提供高可用和高性能的存储服务。另一方面,bcache作为混合存储方案,利用SSD缓存加速HDD存储,有效提升I/O性能。为了优化存储系统性能,理解虚拟机卷、Ceph OSD和bcache设备之间的映射关系非常重要。
本指南基于InLinux2312-LTS-SP1版本,旨在帮助你查找并理解OpenStack环境下虚拟机卷、Ceph OSD和bcache的映射关系,便于监控和优化存储系统。
ceph数据的映射层次如下图所示。
浪潮云启操作系统(InLinux)版本
以下操作步骤均基于InLinux2312-LTS-SP1版本,在此版本上进行环境分析。
虚拟机卷与Ceph OSD的映射关系
在OpenStack中,虚拟机卷(通常为Cinder卷)存储在Ceph集群上,通过RBD(RADOS Block Device)进行管理。要查找虚拟机卷与Ceph OSD的映射关系,可以按照以下步骤进行:
1. 获取虚拟机卷的信息
首先,需要获取虚拟机卷的名称和所在的Ceph存储池。可以通过OpenStack的命令行工具或API来获取。
-
使用以下命令查找虚拟机使用的卷:
openstack server show <虚拟机名称>
在输出结果中,查找与“volume”相关的部分。这里你可以看到虚拟机使用的卷ID。
openstack server show vm-test
2. 查看虚拟机卷的RBD映射
使用rbd
命令查看卷在Ceph中的映射关系。
-
列出Ceph池中的所有RBD镜像:
ceph osd lspools
遍历所有资源池查询虚拟机卷所在的pool,如果资源池中存在虚拟机卷,就可以确认虚拟机卷所在的资源池。
rbd ls
-
获取特定RBD镜像的信息:
rbd info <pool_name>/<volume_name>
这将显示RBD镜像的大小、对象大小等信息。
虚拟机硬盘卷使用了15360个对象。block_name_prefix为rbd_data.936093419e6a4f。
3. 查找RBD对象与PG的关系
RBD镜像在Ceph中被分割成多个对象,这些对象被分布在不同的Placement Group(PG)中,而PG又映射到具体的OSD上。
-
列出存储池中的所有对象(注意可能对象很多,可以过滤):
rados -p <pool_name> ls | grep <block_name_prefix>
-
获取对象所在的PG:
ceph osd map <pool_name> <object_name>
可以查询到PG ID是pg 11.a2b75800。
4. 确定PG映射到的OSD
-
查看PG的详细信息:
ceph pg map <pgid>
输出示例:
这里的
[6,133,208]
表示该PG的数据分布在OSD.6、OSD.133和OSD.208上。
5. 汇总映射关系
通过上述步骤,可以将虚拟机卷的对象映射到具体的PG,再从PG映射到具体的OSD上。这样,就可以了解该虚拟机卷的数据存储在哪些OSD上。
虚拟机卷volume-xxx
存储在Ceph池volumes
中。
- 其中一个对象
rbd_data.xxxx
属于PG 11.a2b75800。 - PG 11.a2b75800的数据分布在OSD.6、OSD.133和OSD.208上。
6. 结论
因为虚拟机卷对应了多个对象,而对象按照哈希算法分布到不同的PG,PG则按照crush算法映射到不同的osd。可以理解为虚拟机卷和osd是一对多的关系。
Ceph OSD与bcache的映射关系
为了加速Ceph OSD的读写操作,bcache被用作缓存设备。以下是查找Ceph OSD和bcache的映射关系的步骤:
使用ceph osd tree
查找OSD所在的主机节点
-
查看Ceph集群的OSD树:
ceph osd tree
输出示例:
- 通过此命令,可以知道每个OSD所在的主机节点(
host
)。
- 通过此命令,可以知道每个OSD所在的主机节点(
2. 获取OSD的元数据信息
-
使用
ceph osd metadata
命令获取特定OSD的详细信息:ceph osd metadata <osd_id>
关键字段:
-
hostname
: OSD所在的主机节点storage-011。bluestore_bdev_dev_node
或bluestore_bdev
: OSD使用的块设备,/dev/dm-10
。- devices: bcache2,nvme0n1可以得到osd使用的设备为为/dev/dm-10,bcache设备为bcache2。
3. 在主机节点上查找对应的设备信息
-
登录到对应的主机节点(例如
host1
)。 -
使用
lsblk
命令查看设备映射:lsblk
输出示例:
-
查找
/dev/dm-10
对应的底层设备,是LVM类型的设备。 -
/dev/dm-10是逻辑卷(LVM),可以使用dmsetup命令查看详细信息:
dmsetup ls --tree
-
这将显示设备映射的树状结构。
4. 查找bcache的映射关系
-
查找bcache设备:
ls /dev/bcache*
-
使用
lsblk
查看bcache设备的映射:lsblk
-
可以看到
/dev/bcache2
是由/dev/sdc
(后端设备)和/dev/nvme2n1p3
(缓存设备)组成的。 -
查看bcache的后端设备和缓存设备:
-
后端设备:
cat /sys/block/bcache0/bcache/backing_dev_name 输出示例:
sdc
-
-
缓存设备:
readlink /sys/block/bcache2/bcache/cache/cache0 | awk -F'/' '{print $(NF-1)}'
输出示例:
nvme2n1p3
6. 汇总映射关系
通过以上步骤,可以将Ceph OSD与其底层设备(/dev/dm-1
),以及bcache设备对应起来。通过上述方法,可以确认一个osd对应一个bcache设备。
-
步骤概括:
- 使用
ceph osd tree
找到OSD所在的主机节点。 - 使用
ceph osd metadata
获取OSD的设备信息(如/dev/dm-1
)。 - 在主机节点上,使用
lsblk
和dmsetup
找到/dev/dm-1
的物理设备和映射关系。 - 确认
/dev/dm-10
是否建立在/dev/bcache*
之上,进而确定OSD是否通过bcache加速。
- 使用
总结
在浪潮云启操作系统(InLinux)上,理解虚拟机卷、Ceph OSD和bcache的映射关系有助于优化存储系统性能。因为虚拟机卷对应了多个对象,而对象按照哈希算法分布到不同的PG,PG则按照crush算法映射到不同的osd,可以得到虚拟机卷和osd是一对多的关系;而osd通过device map设备和bcache设备是一对一的映射;则可以推理虚拟机卷和bcache设备也是一对多的关系,组成虚拟机卷的多个对象分布在多个bcache设备中。