Ceph 的三种数据存储方式(块设备、对象存储、文件存储)

一、块设备 RBD(RADOS Block Devices)

RBD(RADOS Block Devices)即为块存储的一种,RBD 通过 librbd 库与 OSD 进行交互,RBD 为 KVM 等虚拟化技术和云服务(如 OpenStack 和 CloudStack)提供高性能和无限可扩展性的存储后端,这些系统依赖于 libvirt 和 QEMU 实用程序与 RBD 进行集成,客户端基于 librbd 库 即可将 RADOS 存储集群用作块设备,不过,用于 rbd 的存储池需要事先启用 rbd 功能并进行初始化。

1.1 创建 RBD

利用命令创建一个名为 myrbd1 的存储池,并在启用 rbd 功能后对其进 行初始化

[ceph@ceph-deploy ceph-cluster]$ ceph osd pool create myrdb1 64 64    #创建存储池,指定 pg 和 pgp 的数量,pgp 用于在 pg 故障 时归档 pg 的数据,因此 pgp 通常等于 pg 的值
[ceph@ceph-deploy ceph-cluster]$ ceph osd pool application enable myrdb1 rbd    #对存储池启用 RBD 功能
[ceph@ceph-deploy ceph-cluster]$ rbd pool init -p myrdb1    #通过 RBD 命令对存储池初始化

1.2 生成 img (镜像)文件

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

[ceph@ceph-deploy ceph-cluster]$ rbd create myimg1 --size 5G --pool myrdb1
[ceph@ceph-deploy ceph-cluster]$ rbd --image myimg1 --pool myrdb1 info
rbd image 'myimg1':
	size 5 GiB in 1280 objects
	order 22 (4 MiB objects)
	id: 10d16b8b4567
	block_name_prefix: rbd_data.10d16b8b4567
	format: 2
	features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
	op_features:
	flags:
	create_timestamp: Mon Aug  9 06:02:01 2021

注意事项
后续步骤由于 centos 内核较低无法挂载使用,因此只开启部分特性。
除了 layering 其他特性需要高版本内核支持。

[ceph@ceph-deploy ceph-cluster]$ rbd create myimg2 --size 1G --pool myrdb1 --image-format 2 --image-feature layering
[ceph@ceph-deploy ceph-cluster]$ rbd --image myimg2 --pool myrdb1 info
rbd image 'myimg2':
	size 1 GiB in 256 objects
	order 22 (4 MiB objects)
	id: 10dd6b8b4567
	block_name_prefix: rbd_data.10dd6b8b4567
	format: 2
	features: layering
	op_features:
	flags:
	create_timestamp: Mon Aug  9 06:03:43 2021

1.3 客户端使用块存储

配置yum源

[root@centos7 ~]# yum install epel-release -y
[root@centos7 ~]# yum install https://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/ceph-release-1-1.el7.noarch.rpm 

安装 ceph-common

[root@centos7 ~]# yum install ceph-common -y

从部署服务器同步认证文件

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

客户端映射 img 文件
由于 myrdb1 有其他特性,centos 内核不兼容,所以采用 myrdb2 。
一般执行该命令不需要指定文件,他会从/etc/ceph/目录下读取配置文件,里面包含 ceph 的地址。

[root@centos7 ~]# rbd -p myrdb1 map myimg2
/dev/rbd0

# 查看已挂载的磁盘
[root@centos7 ~]# lsblk
[root@centos7 ~]# fdisk -l

格式化磁盘并挂载使用

[root@centos7 ~]# mkfs.xfs /dev/rbd0
[root@centos7 ~]# mkdir /data/lck/static/ -p
[root@centos7 ~]# mount /dev/rbd0 /data/lck/static/
[root@centos7 ~]# df -TH
/dev/rbd0      xfs       1.1G   34M  1.1G   4% /data/lck/static

下载一张图片,准备测试

[root@centos7 static]# ll
total 98236
-rw-r--r-- 1 root root    588041 Aug  2 14:41 1.jpg
-rw-r--r-- 1 root root 100000000 Aug  8 05:46 test-file

ceph 验证数据

[ceph@ceph-deploy ceph-cluster]$ ceph df
GLOBAL:
    SIZE        AVAIL       RAW USED     %RAW USED
    900 GiB     891 GiB      9.4 GiB          1.04
POOLS:
    NAME       ID     USED        %USED     MAX AVAIL     OBJECTS
    mypool     1          0 B         0       282 GiB           0
    myrdb1     2      110 MiB      0.04       282 GiB          43

二、对象存储 RGW(radosgw)

RGW 提供的是 REST 接口,客户端通过 http 与其进行交互,完成数据的增删改查等管理操作。 radosgw 用在需要使用 RESTful API 接口访问 ceph 数据的场合,因此在使用 RBD 即块存储得场合或者使用 cephFS 的场合可以不用启用 radosgw 功能。

2.1 部署 radosgw 服务

ceph-mgr1 服务器部署为 RGW 主机。
一般建议 ceph-mgr1 和 ceph-mgr2 做高可用,在他们前面搭一个负载均衡器。

[root@ceph-mgr1 ~]# yum install ceph-radosgw 
[ceph@ceph-deploy ceph-cluster]$ ceph-deploy --overwrite-conf rgw create ceph-mgr1

2.2 验证 radosgw 服务

[root@ceph-mgr1 ~]# ps -aux | grep radosgw
ceph       3656  0.2  2.7 5055520 51016 ?       Ssl  06:54   0:00 /usr/bin/radosgw -f --cluster ceph --name client.rgw.ceph-mgr1 --setuser ceph --setgroup ceph
root       4296  0.0  0.0 112808   968 pts/0    S+   06:57   0:00 grep --color=auto radosgw

在这里插入图片描述

2.3 验证 ceph 状态

在这里插入图片描述

2.4 验证 radosgw 存储池

[ceph@ceph-deploy ceph-cluster]$ ceph osd pool ls
mypool
myrdb1
.rgw.root
default.rgw.control
default.rgw.meta
default.rgw.log

三、文件存储 Ceph-FS

ceph FS 即 ceph filesystem,可以实现文件系统共享功能,客户端通过 ceph 协议挂载并使用 ceph 集群作为数据存储服务器。 Ceph FS 需要运行 Meta Data Services(MDS)服务,其守护进程为 ceph-mds,ceph-mds 进程管 理与 cephFS 上存储的文件相关的元数据,并协调对 ceph 存储集群的访问。
在这里插入图片描述
客户端先去MDS访问获取所要请求文件的元数据,然后再向Ceph存储节点请求文件。

3.1 部署 MDS 服务

[root@ceph-mgr1 ~]# yum install ceph-mds -y 
[ceph@ceph-deploy ceph-cluster]$ ceph-deploy mds create ceph-mgr1

在这里插入图片描述自动设置了开启自启动

3.2 验证 MDS 服务

MDS 服务目前还无法正常使用,需要为 MDS 创建存储池用于保存 MDS 的数据。

[ceph@ceph-deploy ceph-cluster]$ ceph mds stat
, 1 up:standby     #当前为备用状态,需要分配 pool 才可以使用。

3.3 创建 CephFS metadata 和 data 存储池

使用 CephFS 之前需要事先于集群中创建一个文件系统,并为其分别指定元数据和数据相关 的存储池
如下命令将创建名为 mycephfs 的文件系统,它使用 cephfs-metadata 作为元数据存储池;使用 cephfs-data 为数据存储池。

[ceph@ceph-deploy ceph-cluster]$ ceph osd pool create cephfs-metadata 32 32    #保存 metadata 的 pool
[ceph@ceph-deploy ceph-cluster]$ ceph osd pool create cephfs-data 64 64    #保存数据的 pool

查看当前 ceph 状态

[ceph@ceph-deploy ceph-cluster]$ ceph -s
  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
    osd: 9 osds: 9 up, 9 in
    rgw: 1 daemon active

  data:
    pools:   8 pools, 208 pgs
    objects: 230  objects, 110 MiB
    usage:   9.4 GiB used, 891 GiB / 900 GiB avail
    pgs:     208 active+clean
    
[ceph@ceph-deploy ceph-cluster]$ ceph osd lspools
1 mypool
2 myrdb1
3 .rgw.root
4 default.rgw.control
5 default.rgw.meta
6 default.rgw.log
7 cephfs-metadata
8 cephfs-data

3.4 创建 cephFS 并验证

[ceph@ceph-deploy ceph-cluster]$ ceph fs new mycephfs cephfs-metadata cephfs-data
new fs with metadata pool 7 and data pool 8
[ceph@ceph-deploy ceph-cluster]$ ceph fs ls
name: mycephfs, metadata pool: cephfs-metadata, data pools: [cephfs-data ]
[ceph@ceph-deploy ceph-cluster]$ ceph fs status mycephfs #查看指定 cephFS 状态

在这里插入图片描述
后期添加数据存储池 和 移除存储池

fs add_data_pool <fs_name> <pool>
fs rm_data_pool <fs_name> <pool>

3.5 验证 cepfFS 服务状态

[ceph@ceph-deploy ceph-cluster]$ ceph mds stat    #是否转变为active状态
mycephfs-1/1/1 up  {0=ceph-mgr1=up:active}

3.6 挂载 cephFS

获取 ceph-deploy 节点的 key

[ceph@ceph-deploy ceph-cluster]$ cat ceph.client.admin.keyring
[client.admin]
	key = AQAq4Q9hSYOwDBAAldD+GE0L9KtrVJ2SOW07qQ==
	caps mds = "allow *"
	caps mgr = "allow *"
	caps mon = "allow *"
	caps osd = "allow *"

在 ceph FS 起来的时候,mon 所有节点都会把端口6789开启来,该端口供客户端挂载使用。
客户端挂在 mon 节点的 6789 端口

[root@ceph-client data]#mount -t ceph 10.0.0.14:6789:/ /mnt -o name=admin,secret=AQAq4Q9hSYOwDBAAldD+GE0L9KtrVJ2SOW07qQ==
[root@ceph-client ~]# cp /var/log/messages /mnt/ #验证数据 
[root@ceph-client ~]# cp /var/log/messages /mnt/ 
[root@ceph-client ~]# ll /mnt/ 
total 1789 
-rw------- 1 root root 1831397 Jun 1 17:15 messages

四、常用命令总结

ceph osd lspools    #列出存储池
ceph pg stat    #查看 pg 状态,如果是active+clean表示极佳状态
ceph osd pool stats myrdb1    #查看存储池 myrdb1 状态,osd坏掉会产生日志
ceph df    #查看集群存储状态
ceph df detail    #查看集群存储状态详情
ceph osd stat    #查看 osd 状态
ceph osd dump    #显示 OSD 的底层详细信息
ceph osd tree    #显示 OSD 和节点的对应关系
ceph mon stat    #查看 mon 节点状态
ceph mon dump    #查看 mon 节点的 dump 信息

删除存储池,在ceph-deploy上执行

ceph tell mon.* injectargs --mon-allow-pool-delete=true    #告诉所有mon节点,有存储池需要删除
ceph osd pool rm mypool mypool --yes-i-really-mean-it    #移除名为mypool的存储池
ceph tell mon.* injectargs --mon-allow-pool-delete=false    #告诉所有mon节点,存储池删除功能关闭
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值