Ceph RBD 使用详细说明
文章目录一、创建存储池二、创建 img 镜像2.1 创建 img 镜像2.2 查看镜像详细信息2.3 以 json 格式显示镜像信息2.4 镜像的其他特性2.5 镜像特性的启用2.6 镜像特性的禁用三、配置客户端使用 RBD3.1 客户端配置 yum 源3.2 客户端安装 ceph-common3.3 客户端使用 admin 账户挂载并使用 RBD3.3.1 同步 admin 账户认证文件3.3.
文章目录
一、创建存储池
# 创建存储池
[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
特性简介
- layering: 支持镜像分层快照特性,用于快照及写时复制,可以对 image 创建快照并保护,然后从快照克隆出新的 image 出来,父子 image 之间采用 COW 技术,共享对象数据。
- striping: 支持条带化 v2,类似 raid 0,只不顾在 ceph 环境中的数据被分散到不同的对象中,可改善顺序读写场景较多情况下的性能。
- exclusive-lock: 支持独占锁,限制一个镜像只能被一个客户端使用。
- object-map: 支持对象映射(依赖 exclusive-lock),加速数据导入导出及已用空间统计等,此特性开启的时候,会记录 image 所有对象的一个位图,用以标记对象是否真的存在,在一些场景下可以加速 io。
- fast-diff: 快速计算镜像与快照数据差异对比(依赖 object-map)。
- deep-flatten: 支持快照扁平化操作,用于快照管理时解决快照依赖关系等。
- 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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)