浪潮云启操作系统(InLinux)bcache缓存实践:理解OpenStack环境下虚拟机卷、Ceph OSD、bcache设备之间的映射关系

前言

在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)。
2. 获取OSD的元数据信息
  • 使用ceph osd metadata命令获取特定OSD的详细信息:

    ceph osd metadata <osd_id>

    关键字段

    • hostname: OSD所在的主机节点storage-011。
    • bluestore_bdev_dev_nodebluestore_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设备。

  • 步骤概括

    1. 使用ceph osd tree找到OSD所在的主机节点。
    2. 使用ceph osd metadata获取OSD的设备信息(如/dev/dm-1)。
    3. 在主机节点上,使用lsblkdmsetup找到/dev/dm-1的物理设备和映射关系。
    4. 确认/dev/dm-10是否建立在/dev/bcache*之上,进而确定OSD是否通过bcache加速。

总结

在浪潮云启操作系统(InLinux)上,理解虚拟机卷、Ceph OSD和bcache的映射关系有助于优化存储系统性能。因为虚拟机卷对应了多个对象,而对象按照哈希算法分布到不同的PG,PG则按照crush算法映射到不同的osd,可以得到虚拟机卷和osd是一对多的关系;而osd通过device map设备和bcache设备是一对一的映射;则可以推理虚拟机卷和bcache设备也是一对多的关系,组成虚拟机卷的多个对象分布在多个bcache设备中。

相关推荐
编程小筑44 分钟前
R语言的语法糖
开发语言·后端·golang
芝士就是力量啊 ೄ೨1 小时前
Kotlin 循环语句详解
android·java·开发语言·kotlin
Alex老夫子1 小时前
kotlin sortedBy 与sortedWith的区别
android·开发语言·kotlin
云端 架构师1 小时前
Python语言的编程范式
开发语言·后端·golang
云端 架构师2 小时前
Python语言的字符串处理
开发语言·后端·golang
葡萄架子2 小时前
线程并发下的单例模式
java·开发语言·单例模式
熬了夜的程序员2 小时前
Go语言封装加解密包(AES/DES/RSA)
开发语言·后端·golang·密码学
ErizJ2 小时前
Golang|单机并发缓存
开发语言·缓存·golang
C66668882 小时前
Java内存与缓存
java·开发语言
小团团02 小时前
Python编程中的两种主要的编程模式
开发语言·python