igozhang

——

    Ceph RBD 块设备

    在 Ceph 中创建 RBD pool / image,并完成本地与远端挂载、扩缩容及开机自动挂载。

    环境

    项目 版本 / 说明
    操作系统 CentOS Linux release 8.2.2004 (Core)
    Ceph 15.2.15(Octopus)
    默认 PG(示例) osd_pool_default_pg_num = 128
    默认 PGP(示例) osd_pool_default_pgp_num = 128

    PG 相关默认值一般写在 ceph.conf[global],或通过 ceph config set 配置;建 pool 前确认,避免 PG 过少/过多。


    1. 创建块设备 Pool

    ceph osd pool create igo-rbd-01
    ceph osd pool ls
    

    建议:Dashboard 创建/调整 pool,可选项更多、更直观(副本数、PG、应用类型等)。

    初始化为 RBD 用途:

    rbd pool init igo-rbd-01
    

    创建客户端密钥(按实际 pool 名授权;须与真正使用的 pool 一致):

    ceph auth get-or-create client.igo \
      osd 'allow rw pool=igo-rbd-01' \
      -o igo.key
    

    查看权限:

    ceph auth get client.igo
    

    示例输出:

    exported keyring for client.igo
    [client.igo]
            key = AQCS85Rh1EoGGBAAtthfxP7OucicmmyLsPv4mg==
            caps osd = "allow rw pool=igo-rbd-01"
    

    命名说明: 下文操作示例多使用 pool 名 igo-rbd-1。若你创建的是 igo-rbd-01,请在所有命令中统一替换,并保证 ceph auth 中的 pool= 与之一致(原文中的 igo-pool-1 易与实际 pool 不符,属常见笔误)。


    2. 创建块设备 Image

    rbd create --size 1G igo-rbd-1/igo-image-2
    rbd ls igo-rbd-1
    

    示例:

    igo-image-1
    igo-image-2
    

    查看占用

    rbd du igo-rbd-1/igo-image-1
    
    NAME         PROVISIONED  USED
    igo-image-1        1 GiB  28 MiB
    

    扩容 / 缩容

    # 扩容到 2G
    rbd resize igo-rbd-1/igo-image-1 --size 2G
    
    # 缩容到 1G(必须加 --allow-shrink,且需确保文件系统/数据已收缩,否则有风险)
    rbd resize igo-rbd-1/igo-image-1 --allow-shrink --size 1G
    

    若 image 已挂载并格式化为 ext4/xfs,扩容后还需在操作系统内扩展文件系统;缩容前应先缩小文件系统。


    3. 本地映射并挂载

    查看 image 信息:

    rbd info igo-rbd-1/igo-image-1
    

    映射为本地块设备:

    rbd map igo-rbd-1/igo-image-1
    rbd showmapped
    

    示例:

    id  pool       namespace  image        snap  device
    0   igo-rbd-1             igo-image-1  -     /dev/rbd0
    

    格式化、挂载、写入测试:

    mkfs.ext4 /dev/rbd0
    mkdir -p /mnt/ceph-block-device
    mount /dev/rbd0 /mnt/ceph-block-device
    touch /mnt/ceph-block-device/igo.txt
    

    删除块设备

    先卸载映射,再删除 image:

    # 若已 mount,先 umount
    umount /mnt/ceph-block-device   # 按实际挂载点
    
    rbd unmap igo-rbd-1/igo-image-2
    rbd rm igo-rbd-1/igo-image-2
    

    4. 客户机(远端)挂载 RBD

    4.1 安装并配置 ceph-common

    可先配置阿里云 Octopus(el8)仓库(见文末「补充:Yum 源」),再安装:

    yum -y install ceph-common
    

    从 mon 节点拷贝配置与密钥:

    scp root@igo-ceph-mon1:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
    scp root@igo-ceph-mon1:/etc/ceph/ceph.conf /etc/ceph/
    ceph -s
    

    生产环境建议使用最小权限的 client.igo 等专用 keyring,避免在业务机长期使用 client.admin

    4.2 映射、格式化、挂载

    rbd ls igo-rbd-1
    rbd map igo-rbd-1/igo-image-500
    mkfs.ext4 /dev/rbd0
    mkdir -p /mnt/ceph500
    mount /dev/rbd0 /mnt/ceph500
    echo igo500 > /mnt/ceph500/igo.txt
    

    4.3 开机自动挂载

    分两步:自动 map,再 自动 mount

    1)自动 mapping(rbdmap)

    vim /etc/ceph/rbdmap
    

    内容示例:

    igo-rbd-1/igo-image-500 id=admin,keyring=/etc/ceph/ceph.client.admin.keyring
    
    systemctl enable --now rbdmap.service
    

    2)开机自动 mount

    写入 /etc/fstab(示例):

    /dev/rbd0  /mnt/ceph500  ext4  defaults,_netdev  0  0
    

    或先手动验证:

    mount /dev/rbd0 /mnt/ceph500
    

    注意:

    • /dev/rbd0 编号可能随 map 顺序变化。更稳妥可用 /dev/rbd/<pool>/<image>(rbdmap 创建的设备路径)或文件系统 UUID。
    • 网络块设备建议加 _netdev,确保网络就绪后再挂载。
    • 开机顺序:rbdmap 先于依赖该设备的 mount

    补充:Yum 源(Ceph Octopus / el8)

    tee /etc/yum.repos.d/ceph.repo <<'EOF'
    [Ceph]
    name=Ceph packages for $basearch
    baseurl=https://mirrors.aliyun.com/ceph/rpm-octopus/el8/$basearch
    enabled=1
    gpgcheck=0
    type=rpm-md
    
    [Ceph-noarch]
    name=Ceph noarch packages
    baseurl=https://mirrors.aliyun.com/ceph/rpm-octopus/el8/noarch
    enabled=1
    gpgcheck=0
    type=rpm-md
    
    [ceph-source]
    name=Ceph source packages
    baseurl=https://mirrors.aliyun.com/ceph/rpm-octopus/el8/SRPMS
    enabled=1
    gpgcheck=0
    type=rpm-md
    EOF
    

    使用 <<'EOF' 可避免 $basearch 被 shell 提前展开;若用原文的 \$basearch 写法,效果类似。


    命令速查

    操作 命令
    建 pool ceph osd pool create <pool>rbd pool init <pool>
    建 image rbd create --size 1G <pool>/<image>
    列表 / 占用 rbd ls <pool> / rbd du <pool>/<image>
    扩缩容 rbd resize ... --size <N>G(缩容加 --allow-shrink
    映射 / 查看 rbd map ... / rbd showmapped
    取消映射 / 删除 rbd unmap ... / rbd rm ...
    开机 map /etc/ceph/rbdmap + rbdmap.service

    常见问题

    1. auth 报 permission denied: 检查 caps 中 pool 名是否与实际 RBD pool 一致。
    2. map 失败: 确认 ceph -s 正常、客户端能连 mon、keyring 路径正确。
    3. 重启后未挂载: 确认 rbdmap.service 已 enable,fstab 含 _netdev,且设备路径稳定。
    4. 缩容后文件系统损坏: 必须先缩文件系统再 rbd resize --allow-shrink

    MP3