Ceph RBD 使用详细说明

一、创建存储池

# 创建存储池
[ceph@ceph-deploy ceph-cluster]$ ceph osd pool create rbd-data1 32 32
pool 'rbd-data1' created

# 验证存储池
[ceph@ceph-deploy ceph-cluster]$ ceph osd pool ls
rbd-data1

# 在存储池启用 rbd
[ceph@ceph-deploy ceph-cluster]$ ceph osd pool application enable rbd-data1 rbd
enabled application 'rbd' on pool 'rbd-data1'

# 初始化 rbd
[ceph@ceph-deploy ceph-cluster]$ rbd pool init -p rbd-data1

二、创建 img 镜像

rbd 存储池并不能直接用于块设备,而是需要事先在其中按需创建映像(image),并把映像文件作为块设备使用。rbd 命令可用于创建、查看及删除块设备相在的映像(image),以及克隆映像、创建快照、将映像回滚到快照和查看快照等管理操作。例如,下面的命令能够在指定的 RBD 即 rbd-data1 创建一个名为 myimg1 的映像

2.1 创建 img 镜像

# 创建两个镜像
[ceph@ceph-deploy ceph-cluster]$ rbd create data-img1 --size 3G --pool rbd-data1 --image-format 2 --image-feature layering
[ceph@ceph-deploy ceph-cluster]$ rbd create data-img2 --size 5G --pool rbd-data1 --image-format 2 --image-feature layering

# 列出镜像
[ceph@ceph-deploy ceph-cluster]$ rbd ls --pool rbd-data1    #或 rbd ls --pool=rbd-data1    或    rbd ls -p rbd-data1
data-img1
data-img2

# 列出镜像更多信息
[ceph@ceph-deploy ceph-cluster]$ rbd ls --pool rbd-data1 -l
NAME       SIZE PARENT FMT PROT LOCK
data-img1 3 GiB          2
data-img2 5 GiB          2

2.2 查看镜像详细信息

[ceph@ceph-deploy ceph-cluster]$ rbd --image data-img1 --pool rbd-data1 info
rbd image 'data-img1':
	size 3 GiB in 768 objects    #大小3G,对象数量768个,一个对象4M
	order 22 (4 MiB objects)    
	id: 37ef6b8b4567    # 镜像 id
	block_name_prefix: rbd_data.37ef6b8b4567    # size 里面的 1280 个对象名称前缀
	format: 2    # 镜像文件格式版本
	features: layering    # 特性,layering 支持分层快照以写时复制
	op_features:
	flags:
	create_timestamp: Sun Aug 15 23:12:35 2021
[ceph@ceph-deploy ceph-cluster]$ rbd --image data-img2 --pool rbd-data1 info
rbd image 'data-img2':
	size 5 GiB in 1280 objects
	order 22 (4 MiB objects)
	id: 37f56b8b4567
	block_name_prefix: rbd_data.37f56b8b4567
	format: 2
	features: layering
	op_features:
	flags:
	create_timestamp: Sun Aug 15 23:12:41 2021

2.3 以 json 格式显示镜像信息

[ceph@ceph-deploy ceph-cluster]$ rbd ls --pool rbd-data1 -l --format json --pretty-format
[
    {
        "image": "data-img1",
        "size": 3221225472,
        "format": 2
    },
    {
        "image": "data-img2",
        "size": 5368709120,
        "format": 2
    }
]

2.4 镜像的其他特性

[ceph@ceph-deploy ceph-cluster]$ rbd help feature enable

特性简介

  1. layering: 支持镜像分层快照特性,用于快照及写时复制,可以对 image 创建快照并保护,然后从快照克隆出新的 image 出来,父子 image 之间采用 COW 技术,共享对象数据。
  2. striping: 支持条带化 v2,类似 raid 0,只不顾在 ceph 环境中的数据被分散到不同的对象中,可改善顺序读写场景较多情况下的性能。
  3. exclusive-lock: 支持独占锁,限制一个镜像只能被一个客户端使用。
  4. object-map: 支持对象映射(依赖 exclusive-lock),加速数据导入导出及已用空间统计等,此特性开启的时候,会记录 image 所有对象的一个位图,用以标记对象是否真的存在,在一些场景下可以加速 io。
  5. fast-diff: 快速计算镜像与快照数据差异对比(依赖 object-map)。
  6. deep-flatten: 支持快照扁平化操作,用于快照管理时解决快照依赖关系等。
  7. journaling: 修改数据是否记录日志,该特性可以通过记录日志并通过日志恢复数据(依赖独占锁),开启此特性会增加系统磁盘 IO 使用。

2.5 镜像特性的启用

# 启用指定存储池中的指定镜像的特性
rbd feature enable exclusive-lock --pool rbd-data1 --image data-img1
rbd feature enable object-map --pool rbd-data1 --image data-img1
rbd feature enable fast-diff --pool rbd-data1 --image data-img1

# 验证镜像特性
[ceph@ceph-deploy ceph-cluster]$ rbd --image data-img1 --pool rbd-data1 info
rbd image 'data-img1':
	size 3 GiB in 768 objects
	order 22 (4 MiB objects)
	id: 37ef6b8b4567
	block_name_prefix: rbd_data.37ef6b8b4567
	format: 2
	features: layering, exclusive-lock, object-map, fast-diff
	op_features:
	flags: object map invalid, fast diff invalid
	create_timestamp: Sun Aug 15 23:12:35 2021

2.6 镜像特性的禁用

# 禁用指定存储池中指定镜像的特性
rbd feature disable fast-diff --pool rbd-data1 --image data-img1
rbd feature disable object-map --pool rbd-data1 --image data-img1
rbd feature disable exclusive-lock --pool rbd-data1 --image data-img1

# 验证镜像特性
rbd --image data-img1 --pool rbd-data1 info

三、配置客户端使用 RBD

3.1 客户端配置 yum 源

客户端要想挂载使用 ceph RBD,需要安装 ceph 客户端组件 ceph-common,但是 ceph-common 不在 cenos 的 yum 仓库,因此需要单独配置 yum 源。

yum install epel-release
yum install https://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/ceph-release-1-1.el7.noarch.rpm

3.2 客户端安装 ceph-common

yum install ceph-common -y

3.3 客户端使用 admin 账户挂载并使用 RBD

3.3.1 同步 admin 账户认证文件

[ceph@ceph-deploy ceph-cluster]$ scp ceph.conf ceph.client.admin.keyring root@172.31.6.110:/etc/ceph/

3.3.2 客户端查看镜像映射

# rbd 映射帮助命令
rbd help map

rbd -p rbd-data1 map data-img1
/dev/rbd0

rbd -p rbd-data1 map data-img2
/dev/rbd1

3.3.3 客户端验证镜像

lsblk

3.3.4 客户端格式化磁盘并挂载使用

格式化磁盘

[root@ceph-client ~]# mkfs.xfs /dev/rbd0
[root@ceph-client ~]# mkfs.xfs /dev/rbd1

挂载磁盘

[root@ceph-client ~]# mkdir /data /data1
[root@ceph-client ~]# mkdir /data /data2

[root@ceph-client ~]# mount /dev/rbd0 /data1 
[root@ceph-client ~]# mount /dev/rbd1 /data2

[root@ceph-client ~]# df -TH

3.3.5 客户端验证写入数据

安装 docker 并创建 mysql 容器,验证容器数据能否写入 rbd 挂载的路径/data

# step 1: 安装必要的一些系统工具 
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 
# Step 2: 添加软件源信息 
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
# Step 3: 更新并安装 Docker-CE 
sudo yum makecache fast sudo yum -y install docker-ce 
# Step 4: 开启 Docker 服务 
sudo service docker start
[root@ceph-client ~]# docker run -it -d -p 3306:3306 -v /data:/var/lib/mysql mysql:5.6.46 [root@ceph-client ~]# ll /data #验证数据

3.3.6 验证 mysql 访问

yum install mysql -y
mysql -uroot -p12345678 -h172.31.6.110
MySQL [(none)]> show databases;
MySQL [(none)]> create database mydatabase;
MySQL [(none)]> show databases;

3.3.7 验证 rbd 数据

在这里插入图片描述

3.3.8 查看存储池空间

在这里插入图片描述

3.4 客户端使用普通账户挂载并使用 RBD

3.4.1 创建普通账户并授权

# 创建普通账户
[ceph@ceph-deploy ceph-cluster]$ ceph auth add client.lck mon 'allow r' osd 'allow rwx pool=rbd-data1'

#验证用户信息 
[ceph@ceph-deploy ceph-cluster]$ ceph auth get client.lck

# 创建用 keyring 文件
[ceph@ceph-deploy ceph-cluster]$ ceph-authtool --create-keyring ceph.client.lck.keyring

# 导出用户 keyring
[ceph@ceph-deploy ceph-cluster]$ ceph auth get client.lck -o ceph.client.lck.keyring

# 验证指定用户的 keyring 文件
[ceph@ceph-deploy ceph-cluster]$ cat ceph.client.lck.keyring

3.4.2 同步普通用户认证文件

[ceph@ceph-deploy ceph-cluster]$ scp ceph.conf ceph.client.lck.keyring root@10.0.0.20:/etc/ceph/

3.4.3 在客户端验证权限

[root@centos7 ~]# cd /etc/ceph/
[root@centos7 ceph]# ls
ceph.client.admin.keyring  ceph.client.lck.keyring  ceph.conf  rbdmap
[root@centos7 ceph]# ceph --user lck -s         #默认使用 admin 账户
  cluster:
    id:     245d70b6-c729-447a-b336-9f428a358eec
    health: HEALTH_WARN
            clock skew detected on mon.ceph-mon2, mon.ceph-mon3

  services:
    mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3
    mgr: ceph-mgr1(active), standbys: ceph-mgr2
    mds: mycephfs-1/1/1 up  {0=ceph-mgr1=up:active}
    osd: 9 osds: 9 up, 9 in
    rgw: 1 daemon active

  data:
    pools:   9 pools, 240 pgs
    objects: 290  objects, 110 MiB
    usage:   9.4 GiB used, 891 GiB / 900 GiB avail
    pgs:     240 active+clean

3.4.4 在客户端查看已映射的 rbd

使用普通用户权限映射 rbd

# 查看 rbd 映射过来的 硬件文件
[root@centos7 ceph]# rbd --user lck -p rbd-data1 map data-img1
/dev/rbd0
[root@centos7 ceph]# rbd --user lck -p rbd-data1 map data-img2
/dev/rbd1

# 验证 rbd
[root@centos7 ceph]# fdisk -l /dev/rbd0
Disk /dev/rbd0: 3221 MB, 3221225472 bytes, 6291456 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4194304 bytes / 4194304 bytes

[root@centos7 ceph]# fdisk -l /dev/rbd1
Disk /dev/rbd1: 5368 MB, 5368709120 bytes, 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4194304 bytes / 4194304 bytes

3.4.5 客户端格式化磁盘并挂载使用

# 格式化磁盘
[root@centos7 ~]# mkfs.ext4 /dev/rbd0

# 挂载
[root@centos7 ~]# mkdir /data0
[root@centos7 ~]# mount /dev/rbd0 /data0/

# 拷贝测试数据
[root@centos7 ~]# cp /var/log/messages /data0/

管理端验证镜像状态

[ceph@ceph-deploy ceph-cluster]$ rbd ls -p rbd-data1 -l 
NAME SIZE PARENT FMT PROT LOCK 
data-img1 3 GiB 2 excl #施加锁文件,已经被客户端映射 
data-img2 5 GiB 2

3.4.6 验证 ceph 内核模块

挂载 rbd 之后系统内核会自动加载 libceph.ko 模块

[root@centos7 data0]# modinfo libceph
filename:       /lib/modules/3.10.0-1127.el7.x86_64/kernel/net/ceph/libceph.ko.xz
license:        GPL
description:    Ceph core library
author:         Patience Warnick <patience@newdream.net>
author:         Yehuda Sadeh <yehuda@hq.newdream.net>
author:         Sage Weil <sage@newdream.net>
retpoline:      Y
rhelversion:    7.8
srcversion:     D4ABB648AE8130ECF90AA3F
depends:        libcrc32c,dns_resolver
intree:         Y
vermagic:       3.10.0-1127.el7.x86_64 SMP mod_unload modversions
signer:         CentOS Linux kernel signing key
sig_key:        69:0E:8A:48:2F:E7:6B:FB:F2:31:D8:60:F0:C6:62:D8:F1:17:3D:57
sig_hashalgo:   sha256

3.4.7 rbd 镜像空间拉伸

注意事项:可以扩展空间,不建议缩小空间

# 当前 rbd 镜像空间大小
[ceph@ceph-deploy ceph-cluster]$ rbd ls -p rbd-data1 -l 
NAME SIZE PARENT FMT PROT LOCK 
data-img1 3 GiB 2 excl
data-img2 5 GiB 2

# rbd 镜像空间拉伸帮助命令
rbd help resize

# 拉伸 rbd 镜像空间
[ceph@ceph-deploy ceph-cluster]$ rbd resize --pool rbd-data1 --image data-img1 --size 8G

# 再次查看当前 rbd 镜像空间大小
[ceph@ceph-deploy ceph-cluster]$ rbd ls -p rbd-data1 -l
NAME       SIZE PARENT FMT PROT LOCK
data-img1 8 GiB          2 excl 
data-img2 5 GiB          2

注意事项:当客户端使用逻辑卷适合后期磁盘的扩容,如果没有使用逻辑卷,需要重新格式化

3.4.8 客户端验证镜像空间

[root@centos7 data0]# fdisk -l /dev/rbd0

Disk /dev/rbd0: 8589 MB, 8589934592 bytes, 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4194304 bytes / 4194304 bytes

3.4.9 开机自动挂载

[root@centos7 data0]# cat /etc/rc.d/rc.local
rbd --user lck -p rbd-data1 map data-img2
mount /dev/rbd0 /data/

[root@centos7 ~]# chmod a+x /etc/rc.d/rc.local
[root@centos7 ~]# reboot

# 查看映射
[root@centos7 ~]# rbd showmapped
id pool      image     snap device
0  rbd-data1 data-img1 -    /dev/rbd0
1  rbd-data1 data-img2 -    /dev/rbd1

# 验证挂载
df -TH

3.4.10 卸载 rbd 镜像

# 查看映射
[root@centos7 ~]# rbd showmapped
id pool      image     snap device
0  rbd-data1 data-img1 -    /dev/rbd0
1  rbd-data1 data-img2 -    /dev/rbd1

# 卸载
[root@centos7 ~]# umount /data0

# 取消映射
[root@ceph-client2 ceph]# rbd --user lck -p rbd-data1 unmap data-img1

3.4.11 删除 rbd 镜像

镜像删除后数据也会被删除而且是无法恢复,因此在执行删除操作的时候要慎重。

# 删除存储池 rbd-data1 中的 data-img1 镜像
[ceph@ceph-deploy ceph-cluster]$ rbd rm --pool rbd-data1 --image data-img1

3.4.12 rbd 镜像回收站机制

删除的镜像数据无法恢复,但是还有另外一种方法可以先把镜像移动到回收站,后期确认删 除的时候再从回收站删除即可。

# rbd 镜像回收帮助命令
[ceph@ceph-deploy ceph-cluster]$ rbd help trash
    trash list (trash ls)               List trash images.
    trash move (trash mv)               Move an image to the trash.
    trash purge                         Remove all expired images from trash.
    trash remove (trash rm)             Remove an image from trash.
    trash restore                       Restore an image from trash.

# 查看镜像状态
[ceph@ceph-deploy ceph-cluster]$ rbd status --pool rbd-data1 --image data-img1
Watchers: none

# 将镜像移动到回收站
[ceph@ceph-deploy ceph-cluster]$ rbd trash move --pool rbd-data1 --image data-img1

# 查看回收站的镜像
[ceph@ceph-deploy ceph-cluster]$ rbd trash list --pool rbd-data1
37ef6b8b4567 data-img1

# 从回收站删除镜像
如果镜像不再使用,可以直接使用 trash remove 将其从回收站删除


# 还原镜像
[ceph@ceph-deploy ceph-cluster]$ rbd trash restore --pool rbd-data1 --image data-img1 --image-id 37ef6b8b4567

# 验证镜像
[ceph@ceph-deploy ceph-cluster]$ rbd ls --pool rbd-data1 -l
NAME       SIZE PARENT FMT PROT LOCK
data-img1 8 GiB          2
data-img2 5 GiB          2

# 删除镜像
[ceph@ceph-deploy ceph-cluster]$ rbd trash rm --pool rbd-data1 --image-id 37ef6b8b4567

四、镜像快照

[ceph@ceph-deploy ceph-cluster]$ rbd help snap
    snap create (snap add)              Create a snapshot.#创建快照
    snap limit clear                    Remove snapshot limit.#清楚镜像的快照数量限制
    snap limit set                      Limit the number of snapshots.#设置一个镜像的快照上限
    snap list (snap ls)                 Dump list of image snapshots.#列出快照
    snap protect                        Prevent a snapshot from being deleted.#保护快照被删除
    snap purge                          Delete all unprotected snapshots.#删除所有未保护的快照
    snap remove (snap rm)               Delete a snapshot.#删除一个快照
    snap rename                         Rename a snapshot.#重命名快照
    snap rollback (snap revert)         Rollback image to snapshot.#还原快照
    snap unprotect                      Allow a snapshot to be deleted.#允许一个快照被删除(取消快照保护)

4.1 客户端当前数据

在这里插入图片描述

4.2 创建并验证快照

#创建快照
rbd snap create --pool rbd-data1 --image data-img2 --snap img2-snap-20201215 

#验证快照
rbd snap list --pool rbd-data1 --image data-img2 
SNAPID NAME SIZE TIMESTAMP 
4 img2-snap-20201215 8 GiB Tue Dec 15 15:26:20 2020

4.3 删除数据并还原快照

#客户端删除数据 
[root@ceph-client2 ~]# rm -rf /data/passwd

# 卸载 rbd
[root@ceph-client2 ~]# umount /data 

# 取消 rbd0 的映射
[root@ceph-client2 ~]# rbd unmap /dev/rbd0

# 回滚快照
[ceph@ceph-deploy ceph-cluster]$ rbd snap rollback --pool rbd-data1 --image data-img2 --snap img2-snap-20201215

4.4 客户端验证数据

客户端需要重新映射并挂载 rbd

#客户端映射 rbd 
[root@ceph-client2 ~]# rbd --user lck -p rbd-data1 map data-img2 /dev/rbd0 

#客户端挂载 rbd 
[root@ceph-client2 ~]# mount /dev/rbd0 /data/ 

#客户端验证数据 
[root@ceph-client2 ~]# ll /data/

4.5 删除快照

#删除指定快照 
[ceph@ceph-deploy ceph-cluster]$ rbd snap remove --pool rbd-data1 --image data-img2 --snap img2-snap-20201215
#验证快照是否删除 
[ceph@ceph-deploy ceph-cluster]$ rbd snap list --pool rbd-data1 --image data-img2

4.6 快照数量限制

#设置与修改快照数量限制 
[ceph@ceph-deploy ceph-cluster]$ rbd snap limit set --pool rbd-data1 --image data-img2 --limit 30 
[ceph@ceph-deploy ceph-cluster]$ rbd snap limit set --pool rbd-data1 --image data-img2 --limit 20 
[ceph@ceph-deploy ceph-cluster]$ rbd snap limit set --pool rbd-data1 --image data-img2 --limit 15 

#清除快照数量限制 
[ceph@ceph-deploy ceph-cluster]$ rbd snap limit clear --pool rbd-data1 --image data-img2
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当我们遇到Ceph客户端使用RBD(Rados Block Device,一种在Ceph集群上提供存储的服务)时卡住的情况,可能有几个原因导致。以下是可能的解决方案: 1. 检查网络连接:首先需要确保Ceph客户端与Ceph集群之间的网络连接正常。可以通过ping命令或其他网络测试工具来验证连接的可靠性。如果发现网络问题,需要解决它们,例如修复物理网络故障或调整网络配置。 2. 检查集群状态:使用Ceph集群监控工具(如Ceph Dashboard或Ceph命令行工具)来检查集群的状态。确保集群中的所有节点都正常运行,并且没有任何错误或警告存在。如果发现问题,需要根据相应的错误信息来解决。 3. 检查硬件问题:如果Ceph客户端卡住,可能是由于底层存储硬件的故障。首先,检查磁盘驱动器、网络适配器和硬件接口的状态。确保它们都正常工作并与服务器正确连接。如果需要,可以更换故障硬件以解决问题。 4. 调整客户端配置:根据具体情况,可能需要调整Ceph客户端的配置参数。例如,可以增加读写超时时间、调整并发连接数或增加RBD缓存的大小等。这些配置参数的修改可以通过编辑相应的配置文件(如ceph.conf或rbdmap文件)来实现。 5. 更新软件版本:卡住的问题有可能是由于软件版本的问题导致的。检查Ceph客户端和Ceph集群的软件版本,确保它们都是最新的稳定版本。升级软件版本可能修复已知的问题和漏洞,改进性能和稳定性。 总之,当Ceph客户端使用RBD卡住时,我们需要逐步排查可能的问题,并在每个步骤上采取相应的解决方案。这需要综合考虑网络、集群状态、硬件、软件版本等各个方面,并根据具体情况采取适当的措施来解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值