基于Ubuntu 18.04.5 LTS 部署Ceph集群测试及Ceph RDB的使用。
阅读原文时间:2022年02月13日阅读:1

1.ceph简介

Ceph在一个统一的系统中独特地提供对象、块和文件存储

CEPH 对象存储

CEPH 块设备

CEPH 文件系统

  • RESTful 接口

  • S3 和 Swift 兼容的 API

  • S3 风格的子域

  • 统一的 S3/Swift 命名空间

  • 用户管理

  • 使用跟踪

  • 条纹对象

  • 云解决方案集成

  • 多站点部署

  • 多站点复制

  • 精简配置

  • 图像高达 16 艾字节

  • 可配置的条带化

  • 内存缓存

  • 快照

  • 写时复制克隆

  • 内核驱动支持

  • KVM/libvirt 支持

  • 云解决方案的后端

  • 增量备份

  • 灾难恢复(多站点异步复制)

  • 符合 POSIX 的语义

  • 将元数据与数据分离

  • 动态再平衡

  • 子目录快照

  • 可配置的条带化

  • 内核驱动支持

  • 保险丝支持

  • NFS/CIFS 可部署

  • 与 Hadoop 一起使用(替换 HDFS)

2.ceph的组件和功能

Ceph 提供了一个基于 RADOS 的可无限扩展的Ceph 存储集群,Ceph 存储集群由多种类型的守护进程组成:

  • Ceph 监视器

  • Ceph OSD 守护进程

  • Ceph 管理器

  • Ceph 元数据服务器

  • Monitors:Ceph Monitor ( ceph-mon) 维护集群状态的映射,包括监视器映射、管理器映射、OSD 映射、MDS 映射和 CRUSH 映射。这些映射是 Ceph 守护进程相互协调所需的关键集群状态。监视器还负责管理守护进程和客户端之间的身份验证。通常至少需要三个监视器才能实现冗余和高可用性。

  • 管理器:Ceph 管理器守护进程 ( ceph-mgr) 负责跟踪运行时指标和 Ceph 集群的当前状态,包括存储利用率、当前性能指标和系统负载。Ceph 管理器守护进程还托管基于 Python 的模块来管理和公开 Ceph 集群信息,包括基于 Web 的Ceph 仪表板和 REST API。高可用性通常至少需要两个管理器。

  • Ceph OSD:Ceph OSD(对象存储守护进程 ceph-osd)存储数据,处理数据复制、恢复、重新平衡,并通过检查其他 Ceph OSD 守护进程的心跳来向 Ceph 监视器和管理器提供一些监控信息。通常至少需要 3 个 Ceph OSD 来实现冗余和高可用性。

  • MDS:Ceph 元数据服务器(MDS,ceph-mds)代表Ceph 文件系统存储元数据(即 Ceph 块设备和 Ceph 对象存储不使用 MDS)。Ceph的元数据服务器允许POSIX文件系统的用户来执行基本的命令(如 ls,find没有放置在一个Ceph存储集群的巨大负担,等等)。

3.ceph的数据读写流程

转发自 关于ceph CRUSH算法的文章 https://zhuanlan.zhihu.com/p/63725901

主要分四层,File->Objects->PGs->OSDs。

  • File: 就是我们想要存储和访问的文件,这个是面向我们用户的,是我们直观操作的对象。
  • Object:object就是Ceph底层RADOS所看到的对象,也就是在Ceph中存储的基本单位。object的大小由RADOS限定(通常为2m或者4m)。就跟HDFS抽象一个数据块一样,这里也是为了方便底层存储的组织管理。当File过大时,需要将File切分成大小统一的objects进行存储。
  • PG (Placement Group): PG是一个逻辑的概念,它的用途是对object的存储进行组织和位置的映射,通过它可以更好的分配数据和定位数据。
  • OSD (Object Storage Device): 它就是真正负责数据存取的服务。

PG和object是一对多的关系,一个PG里面组织若干个object,但是一个object只能被映射到一个PG中。

PG和OSD是多对多的关系,一个PG会映射到多个OSD上(大于等于2,此处即为副本机制),每个OSD也会承载大量的PG。

通过寻址流程图我们可以看到,Ceph中的寻址需要经历三次映射,分别是File->Object,Object->PG,PG->OSD。我们重点提到的CRUSH就是在第三步映射PG->OSD出现的。我们依次看一下。

File->Object

这一步就是将file切分成多个object。每个object都有唯一的id即oid。这个oid是怎样产生的呢,就是根据文件名称得到的。

图中的ino为文件唯一id(比如filename+timestamp),ono则为切分后某个object的序号(比如0,1,2,3,4,5等),根据该文件的大小我们就会得到一系列的oid。

注:将文件切分为大小一致的object可以被RADOS高效管理,而且可以将对单一file的处理变成并行化处理提高处理效率。

Object -> PG

这里需要做的工作就是将每个object映射到一个PG中去,实现方式也很简单就是对oid进行hash然后进行按位与计算得到某一个PG的id。图中的mask为PG的数量减1。这里我们认为得到的pgid是随机的,这与PG的数量和文件的数量有关系。在足够量级的程度上数据是均匀分布的。

PG -> OSD

最后一次映射就是将object所在的PG映射到实际的存储位置OSD上。这里应用的就是CRUSH算法了,通过CRUSH算法可以通过pgid得到多个osd(跟配置有关)。

crush算法流程

4.Ceph集群部署

OS:Ubuntu 18.04.5 LTS (GNU/Linux 4.15.0-153-generic x86_64)

硬件配置:

4核CPU/8GB内存/200G磁盘/2千兆网卡

4个osd节点各额外增加5块100G的磁盘

服务器列表

hostname

public-net

cluster-net

ceph-deploy

192.168.2.2

172.1.0.2

mon1

192.168.2.21

172.1.0.21

mon2

192.168.2.22

172.1.0.22

mon3

192.168.2.23

172.1.0.23

mgr1

192.168.2.31

172.1.0.31

mgr2

192.168.2.32

172.1.0.32

osd1

192.168.2.41

172.1.0.41

osd2

192.168.2.42

172.1.0.42

osd3

192.168.2.43

172.1.0.43

osd4

192.168.2.44

172.1.0.44

client1

192.168.2.50

172.1.0.50

4.2.1 关闭ssh登录dns域名查询,加速远程登录

pssh -i -h /data/host_list/ceph 'sed -i "s/^#UseDNS no/UseDNS no/g" /etc/ssh/sshd_config'

pssh -i -h /data/host_list/ceph 'service sshd restart'

4.2.2 关闭防火墙

pssh -i -h /data/host_list/ceph 'ufw disable'

4.2.3 配置定时时间同步

#pssh -i -h /data/host_list/ceph 'echo "*/30 * * * * root /usr/sbin/ntpdate 192.168.1.20 && hwclock -w > /dev/null 2>& 1" >> /var/spool/cron/crontabs/root '

pssh -i -h /data/host_list/ceph ' crontab -l|tail -n 1'

4.2.4 ceph安装的版本

Pacific

2021-03-31

16.2.5

2023-06-01

4.25 .将Ubuntu的apt-get 源改为清华源

Ubuntu 的软件源配置文件是 /etc/apt/sources.list。将系统自带的该文件做个备份,将该文件替换为下面内容,即可使用 TUNA 的软件源镜像

# mv /etc/apt/sources.list /etc/apt/sources.list.bak

vim /etc/apt/sources.list

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse

# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse

# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse

# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

4.2. 6 各节点配置ceph yum 仓库

导入key 文件:

wget -q -O- 'https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc' | sudo apt-key add -

添加清华源ceph源:

echo "deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic main" >> /etc/apt/sources.list

执行系统更新

apt-get update

4.2.7 配置hosts,添加各节点hostname

vim /etc/hosts

127.0.0.1 localhost

::1 localhost ip6-localhost ip6-loopback

ff02::1 ip6-allnodes

ff02::2 ip6-allrouters

172.1.0.2 ceph-deploy

172.1.0.21 mon1

172.1.0.22 mon2

172.1.0.23 mon3

172.1.0.31 mgr1

172.1.0.32 mgr2

172.1.0.41 osd1

172.1.0.42 osd2

172.1.0.43 osd3

172.1.0.44 osd4

172.1.0.50 client1

4.2.8 Ubuntu 各服务器需要单独安装Python2

# apt install python2.7 -y

# ln -sv /usr/bin/python2.7 /usr/bin/python2

apt  install iproute2  ntpdate  tcpdump telnet traceroute nfs-kernel-server nfs-common  lrzsz tree  openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev ntpdate tcpdump telnet traceroute  gcc openssh-server lrzsz tree  openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev ntpdate tcpdump telnet traceroute iotop unzip zip -y

4.4.1 创建cephuser普通用户

groupadd -r -g 2023 cephuser && useradd -r -m -s /bin/bash -u 2023 -g 2023 cephuser && echo cephuser:sa@123.. | chpasswd

4.4.2 各服务器允许ceph 用户以sudo 执行特权命

echo "cephuser ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

4.4.3 配置免秘钥登录

在ceph-deploy 节点配置允许以非交互的方式登录到各ceph osd/mon/mgr 节点,即在ceph-deploy 节点生成秘钥对,然后分发公钥到各被管理节点:

ssh-keygen

ssh-keygen

ssh-copy-id cephuser@172.1.0.2

ssh-copy-id cephuser@172.1.0.21

ssh-copy-id cephuser@172.1.0.22

ssh-copy-id cephuser@172.1.0.23

ssh-copy-id cephuser@172.1.0.31

ssh-copy-id cephuser@172.1.0.32

ssh-copy-id cephuser@172.1.0.41

ssh-copy-id cephuser@172.1.0.42

ssh-copy-id cephuser@172.1.0.43

ssh-copy-id cephuser@172.1.0.44

ssh-copy-id cephuser@172.1.0.50

4.5.1 在ceph 部署服务器(192.168.2.2)安装部署工具ceph-deploy

root@ceph-deploy:~# apt install ceph-deploy

4.5.2 ceph-deploy 管理ceph 集群

在ceph-deploy 节点配置一下系统环境,以方便后期可以执行ceph 管理命令。

# apt install ceph-common

4.5.3 推送正证书给自己

cephuser@ceph-deploy:~/ceph-cluster$ ceph-deploy admin ceph-deploy

4.5.4 证书文件授权

root@ceph-deploy:/data/ceph-cluste# setfacl -m u:cephuser:rw /etc/ceph/ceph.client.admin.keyring

4.6.1 在管理节点ceph-depoly上初始化mon节点

root@ceph-deploy:~# mkdir ceph-cluste -p #保存当前集群的初始化配置信息

root@ceph-deploy:~# cd ceph-cluste/

cephuser@ceph-deploy:~/ceph-cluster$ ceph-deploy new --cluster-network 172.1.0.0/24 --public-network 192.168.2.0/24 mon1 mon2 mon3

生成如下文件:

-rw-rw-r-- 1 cephuser cephuser 295 Aug 19 11:23 ceph.conf

-rw-rw-r-- 1 cephuser cephuser 11492 Aug 19 11:23 ceph-deploy-ceph.log

-rw------- 1 cephuser cephuser 73 Aug 19 11:23 ceph.mon.keyring

ceph.conf #自动生成的配置文件

ceph-deploy-ceph.log #初始化日志

#用于ceph mon 节点内部通讯认证的秘钥环文件

4.6.2 配置mon 节点并生成及同步秘钥

4.6.2.1 在各mon节点安装组件ceph-mon,并通过初始化mon 节点,mon 节点ha 还可以后期横向扩容

apt install ceph-mon

4.6.2.2 在ceph-deploy 初始化mon节点

cephuser@ceph-deploy:~/ceph-cluster$ ceph-deploy mon create-initial

4.6.2.3 验证mon 节点

ps -ef |grep mon

ceph 20082 1 1 12:00 ? 00:00:00 /usr/bin/ceph-mon -f --cluster ceph --id mon1 --setuser ceph --setgroup ceph

4.7.1 mgr节点安装ceph-mgr安装包

apt install ceph-mgr

4.7.2 ceph-deploy节点cephuser账号执行初始化mgr节点

ceph-deploy mgr create mgr1 mgr2

4.7.3 验证ceph-mgr 节点

root@mgr1:~# ps -ef |grep mgr

ceph 20913 1 40 12:54 ? 00:00:12 /usr/bin/ceph-mgr -f --cluster ceph --id mgr1 --setuser ceph --setgroup ceph

测试ceph 命令:

root@ceph-deploy:/data/ceph-cluste# su - cephuser

cephuser@ceph-deploy:~$ ceph -s

cluster:
id: d623cb9e-74c4-44ec-ba47-a49272ddd76e
health: HEALTH_WARN
mons are allowing insecure global_id reclaim
OSD count 0 < osd_pool_default_size 3

services:
mon: 3 daemons, quorum mon1,mon2,mon3 (age 59m)
mgr: mgr1(active, since 5m), standbys: mgr2
osd: 0 osds: 0 up, 0 in

data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:

mon is allowing insecure global_id reclaim #需要禁用非安全模式通信

OSD count 0 < osd_pool_default_size 3 #集群的OSD 数量小于3

配置优化

cephuser@ceph-deploy:~$ ceph config set mon auth_allow_insecure_global_id_reclaim false

mon is allowing insecure global_id reclaim 警告消失了

4.9.1 初始化ceph 存储节点

初始化存储节点等于在存储节点安装了ceph 及ceph-rodsgw 安装包,但是使用默认的官方仓库会因为网络原因导致初始化超时,因此各存储节点推荐修改ceph 仓库为阿里或者清华等国内的镜像源。

修改ceph 镜像源,之前步骤已经配置过,此步忽略。

初始化node 节点过程,此过程会在指定的ceph node 节点按照串行的方式逐个服务器安装epel 源和ceph 源,并按安装ceph ceph-radosgw

ceph-deploy install --no-adjust-repos --nogpgcheck osd1 osd2 osd3 osd4

4.9.1 分发admin 秘钥

root@ceph-deploy:/data/ceph-cluste# apt install ceph-common -y

root@ceph-deploy:/data/ceph-cluste# su - cephuser

cephuser@ceph-deploy:~$ cd ceph-cluster/

cephuser@ceph-deploy:~/ceph-cluster$ ceph-deploy admin osd1 osd2 osd3 osd4

4.9.3 ceph 节点(osd)验证秘钥

root@osd1:~# ll /etc/ceph/

total 24

drwxr-xr-x 2 root root 87 Aug 19 12:06 ./

drwxr-xr-x 95 root root 8192 Aug 19 11:41 ../

-rw------- 1 root root 151 Aug 19 12:06 ceph.client.admin.keyring

-rw-r--r-- 1 root root 295 Aug 19 12:06 ceph.conf

-rw-r--r-- 1 root root 92 Jul 8 22:17 rbdmap

-rw------- 1 root root 0 Aug 19 12:06 tmpSJF5Yk

4.9.4 认证文件的属主和属组的修改

为了安全考虑,默认设置为了root 用户和root 组,如果需要ceph用户也能执行ceph 命令,那么就需要对ceph 用户进行授权

root@osd1:~# setfacl -m u:cephuser:rw /etc/ceph/ceph.client.admin.keyring

root@osd2:~# setfacl -m u:cephuser:rw /etc/ceph/ceph.client.admin.keyring

root@osd3:~# setfacl -m u:cephuser:rw /etc/ceph/ceph.client.admin.keyring

root@osd4:~# setfacl -m u:cephuser:rw /etc/ceph/ceph.client.admin.keyring

4.9.5 擦除磁盘之前通过deploy 节点对node(osd) 节点执行安装ceph 基本运行环境

cephuser@ceph-deploy:~/ceph-cluster$ ceph-deploy install --release pacific osd1

cephuser@ceph-deploy:~/ceph-cluster$ ceph-deploy install --release pacific osd2

cephuser@ceph-deploy:~/ceph-cluster$ ceph-deploy install --release pacific osd3

cephuser@ceph-deploy:~/ceph-cluster$ ceph-deploy install --release pacific osd4

4.9.6 列出ceph node 节点磁盘

cephuser@ceph-deploy:~/ceph-cluster$ ceph-deploy disk list osd1

cephuser@ceph-deploy:~/ceph-cluster$ ceph-deploy disk list osd2

cephuser@ceph-deploy:~/ceph-cluster$ ceph-deploy disk list osd3

cephuser@ceph-deploy:~/ceph-cluster$ ceph-deploy disk list osd4

4.9.7 使用ceph-deploy disk zap 擦除各ceph node 的ceph 数据磁盘

cephuser@ceph-deploy:~/ceph-cluster$ for i in b c d e f; do ceph-deploy disk zap osd1 /dev/vd$i;done

cephuser@ceph-deploy:~/ceph-cluster$ for i in b c d e f; do ceph-deploy disk zap osd2 /dev/vd$i;done

cephuser@ceph-deploy:~/ceph-cluster$ for i in b c d e f; do ceph-deploy disk zap osd3 /dev/vd$i;done

cephuser@ceph-deploy:~/ceph-cluster$ for i in b c d e f; do ceph-deploy disk zap osd4 /dev/vd$i;done

4.9.8 添加OSD

数据分类保存方式:

Data:即ceph 保存的对象数据

Block: rocks DB 数据即元数据

block-wal:数据库的wal 日志

cephuser@ceph-deploy:~/ceph-cluster$ for i in b c d e f; do ceph-deploy osd create osd1 --data /dev/vd$i;done

cephuser@ceph-deploy:~/ceph-cluster$ for i in b c d e f; do ceph-deploy osd create osd2 --data /dev/vd$i;done

cephuser@ceph-deploy:~/ceph-cluster$ for i in b c d e f; do ceph-deploy osd create osd3 --data /dev/vd$i;done

cephuser@ceph-deploy:~/ceph-cluster$ for i in b c d e f; do ceph-deploy osd create osd4 --data /dev/vd$i;done

4.9.10 验证osd添加后集群状态

cephuser@ceph-deploy:~/ceph-cluster$ ceph -s

cluster:

id: d623cb9e-74c4-44ec-ba47-a49272ddd76e

health: HEALTH_OK

services:

mon: 3 daemons, quorum mon1,mon2,mon3 (age 86m)

mgr: mgr1(active, since 32m), standbys: mgr2

osd: 20 osds: 20 up (since 42s), 20 in (since 53s)

data:

pools: 1 pools, 1 pgs

objects: 0 objects, 0 B

usage: 152 MiB used, 2.0 TiB / 2.0 TiB avail

pgs: 1 active+clean

5. Ceph块设备RBD

5.1 RBD简介

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

5.2 RBD创建

5.2.1 创建RBD

创建存储池命令格式: 

$ceph osd pool create pg_num pgp_num {replicated|erasure} 

#创建存储池,指定pg 和pgp 的数量,pgp 是对存在于pg 的数据进行组合存储,pgp 通常等于pg 的值 

cephuser@ceph-deploy:~/ceph-cluster$ ceph osd pool create rbd-test1 64 64

$ ceph osd pool --help 

cephuser@ceph-deploy:~/ceph-cluster$ ceph osd pool application enable rbd-test1 rbd 

5.2.2 通过RBD 命令对存储池初始化

$ rbd -h

rbd pool init -p rbd-test1 

5.2.3 创建并验证img

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

cephuser@ceph-deploy:~/ceph-cluster$ rbd create img-test1 --size 5G --pool rbd-test1 

cephuser@ceph-deploy:~/ceph-cluster$ rbd create img-test2 --size 3G --pool rbd-test1 --image-format 2 --image-feature layering 

#后续步骤会使用 img-test2,由于系统内核较低无法挂载使用,因此只开启部分特性。 

除了layering 其他特性需要高版本内核支持 

列出img: 

cephuser@ceph-deploy:~/ceph-cluster$ rbd ls --pool rbd-test1 

img-test1 

img-test2 

5.2.4 查看指定rdb 的信息

cephuser@ceph-deploy:~/ceph-cluster$ rbd --image img-test1 --pool rbd-test1 info 

rbd image 'img-test1': 

size 5 GiB in 1280 objects 

order 22 (4 MiB objects) 

snapshot_count: 0

id: 1295c66bf942

block_name_prefix: rbd_data.1295c66bf942 

format: 2 

features: layering, exclusive-lock, object-map, fast-diff, deep-flatten

op_features:

flags: 

create_timestamp: Thu Aug 19 13:42:45 2021

access_timestamp: Thu Aug 19 13:42:45 2021

modify_timestamp: Thu Aug 19 13:42:45 2021

cephuser@ceph-deploy:~/ceph-cluster$ rbd --image img-test2 --pool rbd-test1 info

rbd image 'img-test2':

size 3 GiB in 768 objects

order 22 (4 MiB objects)

snapshot_count: 0 

id: 129e31139198 

block_name_prefix: rbd_data.129e31139198

format: 2

features: layering 

op_features: 

flags:

create_timestamp: Thu Aug 19 13:44:39 2021

access_timestamp: Thu Aug 19 13:44:39 2021

modify_timestamp: Thu Aug 19 13:44:39 2021

5.3.1 查看当前ceph 状态

cephuser@ceph-deploy:~/ceph-cluster$ ceph df

--- RAW STORAGE ---

CLASS SIZE AVAIL USED RAW USED %RAW USED

hdd 2.0 TiB 2.0 TiB 162 MiB 162 MiB 0

TOTAL 2.0 TiB 2.0 TiB 162 MiB 162 MiB 0

--- POOLS ---

POOL ID PGS STORED OBJECTS USED %USED MAX AVAIL

device_health_metrics 1 1 0 B 0 0 B 0 633 GiB

rbd-test1 2 64 405 B 7 48 KiB 0 633 GiB

5.3.2 在客户端安装ceph-common

root@client1:~# apt install ceph-common

5.3.3 从ceph-deploy服务器同步认证文件

cephuser@ceph-deploy:~/ceph-cluster$ scp ceph.conf ceph.client.admin.keyring root@172.1.0.50:/etc/ceph/

5.3.4 客户端映射img

root@client1:/etc/ceph# rbd -p rbd-test1 map img-test1

rbd: sysfs write failed

RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable rbd-test1/img-test1 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

root@client1:/etc/ceph# rbd -p rbd-test1 map img-test2

/dev/rbd0

5.3.5 客户端验证RBD

root@client1:/etc/ceph# lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

sr0 11:0 1 1024M 0 rom

rbd0 251:0 0 3G 0 disk

vda 252:0 0 200G 0 disk

├─vda1 252:1 0 4.7G 0 part /boot

└─vda2 252:2 0 195.4G 0 part /

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

root@client1:/etc/ceph# fdisk /dev/rbd0

root@client1:/etc/ceph# mkfs.xfs /dev/rbd0p1

root@client1:/etc/ceph# mkdir /mnt/rbd0

root@client1:/etc/ceph# mount /dev/rbd0p1 /mnt/rbd0/

root@client1:/etc/ceph# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/rbd0p1 3.0G 36M 3.0G 2% /mnt/rbd0

5.3.7 客户端验证

root@client1:/etc/ceph# dd if=/dev/zero of=/mnt/rbd0/ceph-test-file bs=1MB count=300

300+0 records in

300+0 records out

300000000 bytes (300 MB, 286 MiB) copied, 0.537179 s, 558 MB/s

ceph 验证数据

root@client1:/etc/ceph# df -h

Filesystem Size Used Avail Use% Mounted on

udev 3.9G 0 3.9G 0% /dev

tmpfs 798M 5.9M 792M 1% /run

/dev/vda2 196G 4.7G 191G 3% /

tmpfs 3.9G 0 3.9G 0% /dev/shm

tmpfs 5.0M 0 5.0M 0% /run/lock

tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup

/dev/vda1 4.7G 183M 4.5G 4% /boot

tmpfs 798M 0 798M 0% /run/user/0

/dev/rbd0p1 3.0G 323M 2.7G 11% /mnt/rbd0

6.ceph radosgw(RGW)对象存储

RGW 提供的是REST 接口,客户端通过http 与其进行交互,完成数据的增删改查等管理操。

radosgw 用在需要使用RESTful API 接口访问ceph 数据的场合,因此在使用RBD 即块存储得场合或者使用cephFS 的场合可以不用启用radosgw 功能。

如果是在使用radosgw 的场合,则以下命令以mgr1 节点为例部署为RGW 主机:

首先在需要安装radosgwf服务的服务器上,比如mgr1上安装radosgw安装包 

root@mgr1:~# apt install radosgw=16.2.5-1bionic

在ceph-deploy节点用cephuser账号执行radosgw节点的初始化命令

cephuser@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf rgw create mgr1

root@mgr1:~# ps -ef |grep radosgw

root 22253 1 2 15:41 ? 00:00:00 /usr/bin/radosgw -f --cluster ceph --name client.rgw.mgr1 --setuser ceph --setgroup ceph

root@mgr1:~# netstat -ntlp |grep radosgw

tcp 0 0 0.0.0.0:7480 0.0.0.0:* LISTEN 22253/radosgw

tcp6 0 0 :::7480 :::* LISTEN 22253/radosgw

cephuser@ceph-deploy:~/ceph-cluster$ curl "http://mgr1:7480" 

anonymous

验证ceph 状态 

cephuser@ceph-deploy:~/ceph-cluster$ ceph -s 

cluster: 

id: d623cb9e-74c4-44ec-ba47-a49272ddd76e

health: HEALTH_OK

services:

mon: 3 daemons, quorum mon1,mon2,mon3 (age 3h)

mgr: mgr1(active, since 2h), standbys: mgr2

osd: 20 osds: 20 up (since 2h), 20 in (since 2h)

rgw: 1 daemon active (1 hosts, 1 zones)

data: 

pools: 6 pools, 169 pgs 

objects: 282 objects, 300 MiB 

usage: 2.0 GiB used, 2.0 TiB / 2.0 TiB avail 

pgs: 169 active+clean

初始化完成radosgw 之后,会初始化默认的存储池如下:

cephuser@ceph-deploy:~/ceph-cluster$ ceph osd pool ls

device_health_metrics

rbd-test1

.rgw.root

default.rgw.log

default.rgw.control

default.rgw.meta