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

本文详细介绍了如何在Ceph集群中使用rbd命令管理块设备,包括创建pool和image,设置用户权限,操作image(如调整大小、删除和恢复),以及映射、格式化和挂载image的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


众所周知,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]
    

    版本差异Ceph reefCeph nautilus

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

    在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 
    
  2. 使用rbd工具初始化pool池以供RBD使用

    rbd pool init <pool-name>
    

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

  3. 将pool与应用程序关联

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

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

    例如:

    ceph osd pool application enable pool1 rbd
    

创建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}]'

例如,创建名为 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'

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

创建image

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

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

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

rbd create --size 1024 pool1/image11

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

列出image

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

rbd ls {poolname}

例如,列出pool1池中的image:

rbd ls pool1

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

rbd trash ls {poolname}

例如:

rbd trash ls pool1

检索image信息

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

rbd info {image-name}

例如:

rbd info image11

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

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

例如:

rbd info pool1/image11

调整image大小

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

增加image大小

rbd resize --size 2048 image11

减少image大小

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

删除image

从pool中删除image

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

例如:

rbd rm pool1/image11	

【遇到的问题】
[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

从pool中“延迟删除”image

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

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

例如:

rbd trash mv pool1/image11

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

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

例如:

rbd trash rm pool1/image11

恢复image

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

rbd trash restore {image-id}

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

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

恢复并重命名image

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

映射块设备

rbd device map pool1/image11

[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
# 查看映射关系
rbd showmapped
或
rbd device list

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

格式化image

mkfs.ext4 /dev/rbd0

挂载使用

mkdir /mnt/ceph-block-device-rbd0
mount /dev/rbd0 /mnt/ceph-block-device-rbd0/

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

umount /dev/rbd0
rbd device unmap pool1/image11
rm -rf /mnt/ceph-block-device-rbd0/
<think>好的,用户现在想要了解如何挂载Ceph RBD块设备到客户端。我需要先回顾之前的对话历史,用户之前询问了如何配置Cephadm的iSCSI服务,现在转向RBD块设备的直接挂载。这可能意味着用户正在探索不同的存储接入方式,比如iSCSI和直接RBD挂载的优缺点。 首先,用户可能是系统管理员或DevOps工程师,负责管理Ceph存储集群,并需要为应用程序提供块存储解决方案。他们可能已经配置了iSCSI服务,但现在需要更直接的块设备访问,比如在KVM虚拟化或容器环境中使用RBD。 接下来,我需要确定用户的具体需求。挂载RBD块设备通常有两种方式:通过内核模块krbd或用户空间的librbd。用户可能不清楚这两种方式的区别,或者需要步骤指导。另外,用户可能关心权限管理、多客户端挂载的注意事项以及性能调优。 需要确保回答包含前提条件,比如已创建RBD镜像,客户端已安装必要软件包。然后分步骤说明挂载过程,包括创建镜像、安装软件、映射设备、创建文件系统、挂载等。同时,要提到自动挂载和卸载的方法,以及常见问题的解决方法,比如权限问题、内核模块未加载等。 还需要注意安全性和最佳实践,比如使用cephx认证,避免在多个客户端同时挂载同一个镜像导致数据损坏。可能用户在使用场景中需要高可用或分布式访问,但RBD本身是支持单客户端读写,多客户端只读,或者通过集群文件系统如GFS2、OCFS2来实现多节点读写,这部分需要简要提及,避免用户误操作。 此外,用户可能对性能调优感兴趣,比如调整参数提升IOPS,或者日志配置。需要提供一些实用的建议,比如禁用某些特性来提升性能,或者使用合适的文件系统参数。 最后,总结关键点,确保用户能按步骤操作,并了解注意事项,避免常见错误。同时,提供验证命令和日志查看方法,帮助用户排查问题。</think>以下是Ceph RBD块设备挂载的详细指南: --- ### **一、挂载前提条件** 1. 已部署Ceph集群(建议Nautilus或更新版本) 2. 客户端主机已安装Ceph客户端工具 3. 已创建RBD存储池和镜像 4. 客户端具有访问Ceph集群的权限(需有`.keyring`文件) --- ### **二、内核级挂载(KRBD)** #### 1. **安装必要软件** ```bash # RHEL/CentOS yum install -y ceph-common rbd-nbd # Ubuntu/Debian apt install -y ceph-common rbd-nbd ``` #### 2. **配置Ceph客户端认证** ```bash # 复制配置文件 scp ceph-admin@mon-node:/etc/ceph/ceph.conf /etc/ceph/ scp ceph-admin@mon-node:/etc/ceph/ceph.client.admin.keyring /etc/ceph/ # 验证访问 rbd --id admin -p rbd_pool ls ``` #### 3. **映射RBD设备** ```bash # 手动映射(临时) rbd map rbd_pool/image1 --id admin # 自动映射(持久化) echo "rbd_pool/image1 id=admin" > /etc/ceph/rbdmap systemctl enable rbdmap.service systemctl start rbdmap.service # 查看映射结果 rbd showmapped ``` ``` 输出示例: id pool image snap device 0 rbd_pool image1 - /dev/rbd0 ``` #### 4. **创建文件系统** ```bash mkfs.xfs /dev/rbd/rbd_pool/image1 # 推荐XFS # 或 mkfs.ext4 /dev/rbd/rbd_pool/image1 ``` #### 5. **挂载使用** ```bash mkdir /mnt/ceph_rbd mount /dev/rbd0 /mnt/ceph_rbd # 验证挂载 df -hT | grep rbd0 ``` #### 6. **自动挂载配置** ```bash # /etc/fstab 条目 /dev/rbd0 /mnt/ceph_rbd xfs _netdev,noatime 0 0 # 或使用UUID(更可靠) blkid /dev/rbd0 echo "UUID=xxxx-xxxx-xxxx /mnt/ceph_rbd xfs _netdev,noatime 0 0" >> /etc/fstab ``` --- ### **三、用户空间挂载(NBD)** 适用于内核不支持RBD或需要灵活控制的场景 #### 1. **通过rbd-nbd映射** ```bash rbd-nbd map rbd_pool/image1 --id admin nbd0=$(rbd-nbd list-mapped | grep image1 | awk '{print $5}') # 查看设备 ls -l /dev/nbd0 ``` #### 2. **挂载使用** ```bash mount /dev/nbd0 /mnt/ceph_nbd ``` #### 3. **卸载设备** ```bash umount /mnt/ceph_nbd rbd-nbd unmap /dev/nbd0 ``` --- ### **四、高级配置** #### 1. **多路径配置** ```bash # 配置rbd-multipath rbd device add rbd_pool/image1 --options="nofeature,exclusive" rbd device map rbd_pool/image1 --options="nofeature,exclusive" # 验证多路径 multipath -ll ``` #### 2. **性能调优参数** ```bash # 映射时指定参数 rbd map rbd_pool/image1 --id admin --options="queue_depth=128,alloc_size=4194304" # 调整内核参数 echo 4096 > /sys/block/rbd0/queue/nr_requests echo deadline > /sys/block/rbd0/queue/scheduler ``` #### 3. **日志配置** ```bash # 查看内核日志 dmesg | grep rbd # 启用详细日志 echo 1 > /sys/module/rbd/parameters/debug_level ``` --- ### **五、卸载流程** ```bash # 卸载文件系统 umount /mnt/ceph_rbd # 解除映射 rbd unmap /dev/rbd0 # 确认状态 rbd showmapped ``` --- ### **六、排错指南** #### **常见问题1:权限拒绝** ```text rbd: error opening pool rbd_pool: (13) Permission denied ``` **解决方案:** ```bash # 检查keyring文件权限 chmod 600 /etc/ceph/ceph.client.admin.keyring # 验证用户权限 ceph auth get client.admin ``` #### **常见问题2:设备忙无法卸载** ```text umount: /mnt/ceph_rbd: target is busy ``` **强制卸载:** ```bash fuser -km /mnt/ceph_rbd umount /mnt/ceph_rbd ``` #### **常见问题3:内核模块未加载** ```text rbd: failed to load rbd kernel module (111) ``` **加载模块:** ```bash modprobe rbd echo "rbd" >> /etc/modules-load.d/ceph.conf ``` --- ### **七、最佳实践** 1. **安全建议**: - 使用`cephx`认证而非无密码访问 - 为不同客户端创建独立用户(非admin) ```bash ceph auth get-or-create client.vm1 mon 'profile rbd' osd 'profile rbd pool=rbd_pool' ``` 2. **性能优化**: - 使用`xfs`文件系统(对RBD优化更好) - 禁用不必要的RBD特性: ```bash rbd feature disable rbd_pool/image1 object-map fast-diff deep-flatten ``` 3. **多客户端访问**: ```bash # 启用共享访问(需配合集群文件系统) rbd feature enable rbd_pool/image1 exclusive-lock # 使用GFS2/OCFS2等集群文件系统 ``` --- ### **八、验证命令汇总** ```bash # 查看RBD镜像列表 rbd ls rbd_pool -l # 检查映射状态 rbd status rbd_pool/image1 # 监控实时IO rbd watch rbd_pool/image1 # 查看内核映射 cat /sys/bus/rbd/devices ``` --- 通过以上步骤,可以完成Ceph RBD块设备从基础挂载到高级配置的全流程操作。建议首次使用时先进行测试镜像的挂载验证,确认无误后再进行生产环境部署。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值