• 【Ceph Block Device】块设备挂载使用



    众所周知,Ceph集群可以向客户端提供对象存储服务(Object Storage)、块设备服务(Block Device)和文件系统服务(File System)。

    本文将介绍搭建Ceph集群后如何使用块设备服务。使用 rbd 命令可以创建、查看、修改和删除块设备映像。您还可以使用它来克隆映像、创建快照、将映像回滚到快照、查看快照等。

    要使用Ceph Block Device命令,首先必须要能访问正在运行的Ceph集群。

    前言

    img

    Kernel modules can use Linux page caching. For librbd-based applications, Ceph supports RBD Caching.
    内核模块可以使用Linux页面缓存。对于基于 librbd 的应用程序,Ceph支持RBD Caching。

    要在Ceph中使用块设备服务,有如下几个步骤:

    1. 创建pool,关联RBD应用程序。
    2. 【可选】创建Ceph用户,授予对pool和image的权限,也可以直接使用admin。
    3. 创建image,个人理解image相当于在pool中开辟出的磁盘空间,可以像操作块设备一样,对其进行格式化、挂载等操作。
    4. 映射块设备。
    5. 格式化。
    6. 挂载使用。

    创建pool

    1. 使用ceph工具创建pool池

      ceph osd pool create {pool-name} [{pg-num} [{pgp-num}]] [replicated] [crush-rule-name] [expected-num-objects]
      
      • 1

      版本差异Ceph reefCeph nautilus

      ceph osd pool create {pool-name} {pg-num} [{pgp-num}] [replicated] [crush-rule-name] [expected-num-objects]
      
      • 1

      在nautilus版本中,pg_num是必须的,而在最新的reef版本中是可选的。

      # rule-single是crush rule名称,可以自定义
      ceph osd crush rule create-replicated rule-single default osd 
       # 0 0分别代表pg_num和pgp_num,如果设置为0,代表使用的是/etc/ceph/ceph.conf中配置的osd_pool_default_pg_num和osd_pool_default_pgp_num
      ceph osd pool create pool1 0 0 rule-single 
      
      • 1
      • 2
      • 3
      • 4
    2. 使用rbd工具初始化pool池以供RBD使用

      rbd pool init <pool-name>
      
      • 1

      如果在命令中未指定pool-name,则默认创建名为‘rbd’的pool池。

    3. 将pool与应用程序关联

      ceph osd pool application enable {pool-name} {application-name}
      
      • 1

      CephFS使用应用程序名称 cephfs ,RBD使用应用程序名称 rbd ,RGW使用应用程序名称 rgw

      例如:

      ceph osd pool application enable pool1 rbd
      
      • 1

    创建user

    除非另有说明,否则 rbd 命令使用Ceph用户ID admin 访问Ceph集群。 admin Ceph用户ID允许对群集进行完全管理访问。Ceph建议创建低权限的用户访问Ceph集群,这样的用户称为“块设备用户(block device user)”或“Ceph用户(Ceph user)”。

    要创建Ceph用户,使用 ceph auth get-or-create 命令指定Ceph用户ID名称、monitor caps(capabilities)和OSD caps(capabilities):

    ceph auth get-or-create client.{ID} mon 'profile rbd' osd 'profile {profile name} [pool={pool-name}][, profile ...]' mgr 'profile rbd [pool={pool-name}]'
    
    • 1

    例如,创建名为 qemu 的Ceph用户ID,该用户ID对池 vms 具有读写访问权限,对池 images 具有只读访问权限,请运行以下命令:

    ceph auth get-or-create client.qemu mon 'profile rbd' osd 'profile rbd pool=vms, profile rbd-read-only pool=images' mgr 'profile rbd pool=images'
    
    • 1

    ceph auth get-or-create 命令的输出是指定Ceph用户ID的密钥环,可以写入 /etc/ceph/ceph.client.{ID}.keyring

    创建image

    在将块设备添加到节点之前,必须在Ceph存储集群中为其创建映像。要创建块设备映像,请运行以下格式的命令:

    rbd create --size {megabytes} {pool-name}/{image-name}
    
    • 1

    例如,要创建一个名为 image11 的1GB映像,并将信息存储在名为 pool1 的池中,请运行以下命令:

    rbd create --size 1024 pool1/image11
    
    • 1

    如果在创建映像时未指定池,则映像将存储在默认池 rbd 中。

    列出image

    要列出指定池中的数据块设备,运行如下命令:

    rbd ls {poolname}
    
    • 1

    例如,列出pool1池中的image:

    rbd ls pool1
    
    • 1

    要列出指定池中的“延迟删除”的块设备,运行如下命令:

    rbd trash ls {poolname}
    
    • 1

    例如:

    rbd trash ls pool1
    
    • 1

    检索image信息

    要从指定image中检索信息,运行如下命令:

    rbd info {image-name}
    
    • 1

    例如:

    rbd info image11
    
    • 1

    要从指定pool中检索指定的image信息,运行如下命令:

    rbd info {pool-name}/{image-name}
    
    • 1

    例如:

    rbd info pool1/image11
    
    • 1

    调整image大小

    Ceph Block设备映像是精简资源调配的。在您开始向它们保存数据之前,它们实际上并不使用任何物理存储。但是,它们确实有您使用 --size 选项设置的最大容量。如果要增加(或减少)Ceph Block设备映像的最大大小,运行如下命令:

    增加image大小

    rbd resize --size 2048 image11
    
    • 1

    减少image大小

    rbd resize --size 2048 image11 --allow-shrink
    
    • 1

    删除image

    从pool中删除image

    rbd rm {pool-name}/{image-name}
    
    • 1

    例如:

    rbd rm pool1/image11	
    
    • 1

    【遇到的问题】
    [root@ceph01 ~]# rbd rm pool1/image11
    2023-10-10 03:27:54.954 ffd2ff2700 -1 librbd::image::PreRemoveRequest: 0xaab162a620 handle_exclusive_lock: cannot obtain exclusive lock - not removing
    Removing image: 0% complete…failed.
    rbd: error: image still has watchers
    This means the image is still open or the client using it crashed. Try again after closing/unmapping it or waiting 30s for the crashed client to timeout.

    删除image前需要先解除映射

    [root@ceph01 ~]# rbd unmap pool1/image11
    rbd: sysfs write failed
    rbd: unmap failed: (16) Device or resource busy

    rbd unmap -o force pool1/image11
    
    • 1

    从pool中“延迟删除”image

    ”延迟删除“pool中的块设备(相当于将其移动到“回收站/垃圾桶”并在稍后删除),运行如下命令:

    rbd trash mv {pool-name}/{image-name}
    
    • 1

    例如:

    rbd trash mv pool1/image11
    
    • 1

    从pool中移除“延迟删除的image”

    rbd trash rm {pool-name}/{image-}
    
    • 1

    例如:

    rbd trash rm pool1/image11
    
    • 1

    恢复image

    要恢复默认rbd池中的延迟删除的块设备image,运行如下命令:

    rbd trash restore {image-id}
    
    • 1

    恢复指定pool中延迟删除的image

    rbd trash restore {pool-name}/{image-id}
    
    • 1

    恢复并重命名image

    rbd trash restore pool1/image11 --image new-name
    
    • 1

    映射块设备

    rbd device map pool1/image11
    
    • 1

    [root@ceph01 mnt]# rbd map pool1/image11
    rbd: sysfs write failed
    RBD image feature set mismatch. You can disable features unsupported by the kernel with “rbd feature disable pool1/image11 object-map fast-diff deep-flatten”.
    In some cases useful info is found in syslog - try “dmesg | tail”.
    rbd: map failed: (6) No such device or address

    出现这种错误的原因是OS kernel不支持块设备image的一些特性,导致映射失败,按照提示把部分不支持的特性disable掉再映射。

    rbd feature disable pool1/image11 object-map fast-diff deep-flatten
    
    • 1
    # 查看映射关系
    rbd showmapped
    或
    rbd device list
    
    • 1
    • 2
    • 3
    • 4

    使用lsblk命令可以看到出现了rbd0设备,但是还未挂载。

    格式化image

    mkfs.ext4 /dev/rbd0
    
    • 1

    挂载使用

    mkdir /mnt/ceph-block-device-rbd0
    mount /dev/rbd0 /mnt/ceph-block-device-rbd0/
    
    • 1
    • 2

    如果不想使用,则可以执行如下命令:

    umount /dev/rbd0
    rbd device unmap pool1/image11
    rm -rf /mnt/ceph-block-device-rbd0/
    
    • 1
    • 2
    • 3
  • 相关阅读:
    Vue3 + ts + jest 单元测试 配置以及使用
    【Excel】快速提取某个符号前面的数据内容
    生命在于学习——Linux提权
    vr火灾逃生安全科普软件开展消防突击教育安全有效
    wasm 系列之 WebAssembly 和 emscripten 暴力上手
    UE4 C++设计模式:状态模式(State Pattern)
    一步一步分析HTTPS加密机制
    2022-06-17 网工进阶(九)IS-IS-原理、NSAP、NET、区域划分、网络类型、开销值
    OpenGL入门(三)之着色器Shader
    hive从入门到放弃(四)——分区与分桶
  • 原文地址:https://blog.csdn.net/gengduc/article/details/133752870