2. ceph 初识

ceph 初识

环境准备篇

  • 初始化环境参考上一篇文章: https://www.yuque.com/wanghui-pooq1/ryovus/cn3gf8

Ceph基础

ceph简介

  • github: https://github.com/ceph/ceph

Ceph基于可靠的、自动化的、分布式的对象存储(Reliable,Autonomous,Distributed Object Storage,RADOS)提供了一个可无限扩展的存储集群。RADOS,顾名思义,这一层本身就是一个完整的对象存储系统,所有存储在Ceph系统中的用户数据事实上最终都是由这一层来存储的。而Ceph的高可靠、高可扩展、高性能、高自动化等特性本质上也是由这一层提供的。

  • ceph 是一个对象(object)式存储系统,它把每一个待管理的数据流(文件等数据)切分为一到多个固定大小(默认4 兆)的对象数据,并以其为原子单元(原子是构成元素的最小单元)完成 数据的读写。

  • 对象数据的底层存储服务是由多个存储主机(host)组成的存储集群,该集群也被称之为 RADOS(reliable automatic distributed object store)存储集群,即可靠的、自动化的、分布式的对象存储系统。

  • librados 是 RADOS 存储集群的 API,支持 C/C++/JAVA/python/ruby/php/go 等编程语言客户端。

img

ceph的设计思想

Ceph 的设计旨在实现以下目标:

  1. 每一组件皆可扩展

  2. 无单点故障

  3. 基于软件(而非专用设备)并且开源(无供应商锁定)

  4. 在现有的廉价硬件上运行

  5. 尽可能自动管理,减少用户干预

ceph的组成

  • 官方文档: https://docs.ceph.com/en/latest/start/intro/

img

一个 ceph 集群的组成部分:

若干的 Ceph OSD(对象存储守护程序)

至少需要一个 Ceph Monitors 监视器(1,3,5,7…)两个或以上的 Ceph 管理器managers,运行Ceph 文件系统客户端时,还需要高可用的 Ceph Metadata Server(文件系统元数据服务器)。
RADOS cluster: 由多台 host 存储服务器组成的ceph 集群 OSD(Object Storage Daemon):每台存储服务器的磁盘组成的存储空间 Mon(Monitor):ceph 的监视器,维护 OSD 和 PG 的集群状态,一个 ceph 集群至少要有一个 mon,可以是一三五七等等这样的奇数个。 Mgr(Manager):负责跟踪运行时指标和 Ceph 集群的当前状态,包括存储利用率,当前性能指标和系统负载等。

Monitor(ceph-mon) ceph 监视器

在一个主机上运行的一个守护进程,用于维护集群状态映射(maintains maps of the cluster state),比如 ceph 集群中有多少存储池、每个存储池有多少 PG 以及存储池和 PG 的映射关系等, monitor map, manager map, the OSD map, the MDS map, and the CRUSH map,这些映射是 Ceph 守护程序相互协调所需的关键群集状态,此外监视器还负 责管理守护程序和客户端之间的身份验证(认证使用 cephX 协议)。通常至少需要三个监视器才能实现冗余和高可用性。

Managers(ceph-mgr)

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

Ceph OSDs(对象存储守护程序 ceph-osd)

提供存储数据,操作系统上的一个磁盘就是一个 OSD 守护程序,OSD 用于处理 ceph 集群数据复制,恢复,重新平衡,并通过检查其他 Ceph OSD 守护程序的心跳来向 Ceph 监视器和管理器提供一些监视信息。通常至少需要3 个 Ceph OSD 才能实现冗余和高可用性。

MDS(ceph 元数据服务器 ceph-mds)

代表 ceph 文件系统(NFS/CIFS)存储元数据,(即 Ceph 块设备和 Ceph 对象存储不使用 MDS)

Ceph 的管理节点
  1. ceph 的常用管理接口是一组命令行工具程序,例如 rados、ceph、rbd 等命令,ceph 管理员可以从某个特定的 ceph-mon 节点执行管理操作
  2. 推荐使用部署专用的管理节点对 ceph 进行配置管理、升级与后期维护,方便后期权限管理,管理节点的权限只对管理人员开放,可以避免一些不必要的误操作的发生。

Ceph特点

  1. 支持三种 对象存储,块存储,文件存储 接口,称之为统一存储

  2. 采用CRUSH算法,数据分布均衡,并行度高,不需要维护固定的元数据结构

  3. 数据具有强一致性,确保所有副本写入完成后才返回确认,适合读多写少的场景

  4. 去中心化,没有固定的中心节点,集群扩展灵活

ceph存取原理介绍

数据高可用

  • ceph存储数据的时候是一主两备份实现数据的高可用,3副本
  • ceph中的pg是把一组比较大的数据进行拆分,几个pg就拆成几份,每个pg中都是三副本;可以提高ceph的读写性能

ceph数据存储过程

img

  1. 计算文件到对象的映射

计算文件到对象的映射,假如 file 为客户端要读写的文件,得到 oid(object id) = ino + onoino:inode number (INO),File 的元数据序列号,File 的唯一 id。

ono:object number (ONO),File 切分产生的某个 object 的序号,默认以 4M 切分一个块大小。

  1. 通过hash 算法计算出文件对应的 pool 中的PG(在客户端计算)

通过一致性 HASH 计算 Object 到 PG, Object -> PG 映射 hash(oid) & mask-> pgid

  1. 通过 CRUSH 把对象映射到 PG 中的 OSD(mon操作)

通过 CRUSH 算法计算 PG 到 OSD

  1. PG 中的主 OSD 将对象写入到硬盘

  2. 主 OSD 将数据同步给备份 OSD,并等待备份 OSD 返回确认

  3. 主 OSD 将写入完成返回给客户端

ceph安装与配置

生产环境硬件选型

  • mon: 16c 16g 200G,至少三台,建议有条件使用物理机

  • mgr:32c 32g 200g, (启动对象存储),至少两台,如果启动对象存储,配置建议翻倍

  • osd存储服务器: 四台以上,ssd(高IO),实际数据三倍,万兆网卡

ceph 部署工具

ceph-ansible:https://github.com/ceph/ceph-ansible #python

ceph-salt:https://github.com/ceph/ceph-salt

#python ceph-container:https://github.com/ceph/ceph-container

#shell ceph-chef:https://github.com/ceph/ceph-chef

#Ruby cephadm: https://docs.ceph.com/en/latest/cephadm/

#ceph 官方在 ceph 15 版本加入的

  • ceph-deploy:https://github.com/ceph/ceph-deploy #python

是一个 ceph 官方维护的基于 ceph-deploy 命令行部署 ceph 集群的工具,基于 ssh 执行可以 sudo 权限的 shell 命令以及一些 python 脚本 实现 ceph 集群的部署和管理维护。 Ceph-deploy 只用于部署和管理 ceph 集群,客户端需要访问 ceph,需要部署客户端工具。

img

机器规划

主机名publicIPprivateIP角色安装的软件备注
ceph-deploy10.168.56.100192.168.56.100ceph-deplayerceph-epel,ceph-common,ceph-deploy单磁盘
ceph-mon-mgr110.168.56.101192.168.56.101ceph-mon,ceph-mgrceph-epel,ceph-mon,ceph-mgr单磁盘
ceph-mon-mgr210.168.56.102192.168.56.102ceph-mon,ceph-mgrceph-epel,ceph-mon,ceph-mgr单磁盘
ceph-mon310.168.56.103192.168.56.103ceph-monceph-epel,ceph-mon单磁盘
ceph-data110.168.56.104192.168.56.104ceph-dataceph-epel单系统盘+三块数据盘
ceph-data210.168.56.105192.168.56.105ceph-dataceph-epel单系统盘+三块数据盘
ceph-data310.168.56.106192.168.56.106ceph-dataceph-epel,ceph-common单系统盘+三块数据盘

部署用户

  • ceph-deployer新建cephstore用户和组,不要创建ceph用户
  • 所有节点都创建用户

推荐使用指定的普通用户部署和运行 ceph 集群,普通用户只要能以非交互方式执行 sudo命令执行一些特权命令即可,新版的 ceph-deploy 可以指定包含 root 的在内只要可以执行 sudo 命令的用户,不过仍然推荐使用普通用户,比如 ceph、cephuser、cephadmin 这样 的用户去管理 ceph 集群。 在包含 ceph-deploy 节点的存储节点、mon 节点和 mgr 节点等创建cephstore用户

  • 所有节点都切换到root账户下,执行如下命令创建用户和组
groupadd -r -g 2022 cephstore && useradd -r -m -s /bin/bash -u 2022 -g 2022 cephstore && echo cephstore:TestCase123 | chpasswd
  • 允许cephstore用户sudo免密
echo "cephstore ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
  • 在ceph-deploy实现对集群所有节点cephstore用户免密登录
root@ceph-deploy:~# su - cephstore
cephstore@ceph-deploy:~$ ssh-keygen   #生成ceph-deploy ssh密钥
cephstore@ceph-deploy:~$ for i in 192.168.56.10{0..6}; do ssh-copy-id cephstore@$i; done    #使用TestCase123验证即可

环境初始化准备

  • 时间同步
  • 主机名规划与解析: 所有节点都要操作[root用户],需要对public设置主机名解析
cat << EOF >> /etc/hosts
10.168.56.100 ceph-deploy
10.168.56.101 ceph-mon-mgr1 ceph-mon1 ceph-mgr1 
10.168.56.102 ceph-mon-mgr2 ceph-mon2 ceph-mgr2 
10.168.56.103 ceph-mon3
10.168.56.104 ceph-data1
10.168.56.105 ceph-data2 
10.168.56.106 ceph-data3
EOF
  • apt源: 推荐使用清华(环境准备文档有介绍):https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
  • 所有节点安装python2.7:
apt install python2.7 -y
ln -sv /usr/bin/python2.7 /usr/bin/python2
  • ceph源: 上述机器都需要加(https://docs.ceph.com/en/latest/releases/pacific/#v16-2-5-pacific)

img

$ wget -q -O- 'https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc' | sudo apt-key add -
$ sudo echo "deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic main" >> /etc/apt/sources.list
$ sudo apt update

ceph-deploy节点的部署与初始化

  • 安装ceph-deploy
cephstore@ceph-deploy:~$ sudo apt-cache madison ceph-deploy
cephstore@ceph-deploy:~$ sudo apt install ceph-deploy -y
cephstore@ceph-deploy:~$ sudo apt update
初始化mon1

先初始化一个mon节点,然后再逐个添加即可

  • 重要: 在初始化之前在所有的mon节点安装ceph-mon
apt install ceph-mon -y

ceph-deploy --help

new:开始部署一个新的 ceph 存储集群,并生成 CLUSTER.conf 集群配置文件和 keyring认证文件。 install: 在远程主机上安装 ceph 相关的软件包, 可以通过–release 指定安装的版本。

rgw:管理 RGW 守护程序(RADOSGW,对象存储网关)。 mgr:管理 MGR 守护程序(ceph-mgr,Ceph Manager DaemonCeph 管理器守护程序)。 mds:管理 MDS 守护程序(Ceph Metadata Server,ceph 源数据服务器)。 mon:管理 MON 守护程序(ceph-mon,ceph 监视器)。 gatherkeys:从指定获取提供新节点的验证 keys,这些 keys 会在添加新的 MON/OSD/MD加入的时候使用。

disk:管理远程主机磁盘。

osd:在远程主机准备数据磁盘,即将指定远程主机的指定磁盘添加到 ceph 集群作为osd使用。

repo: 远程主机仓库管理。

admin:推送 ceph 集群配置文件和 client.admin 认证文件到远程主机。

config:将 ceph.conf 配置文件推送到远程主机或从远程主机拷贝。

uninstall:从远端主机删除安装包。

purgedata:从/var/lib/ceph 删除 ceph 数据,会删除/etc/ceph 下的内容。

purge: 删除远端主机的安装包和所有数据。

forgetkeys:从本地主机删除所有的验证 keyring, 包括 client.admin, monitor, bootstrap 等

认证文件。

pkg: 管理远端主机的安装包。

calamari:安装并配置一个 calamari web 节点,calamari 是一个 web 监控平台。

root@ceph-deploy:~# su - cephstore
cephstore@ceph-deploy:~$ mkdir ceph-clusters && cd ceph-clusters
cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy new --cluster-network 192.168.56.0/24 --public-network 10.168.56.0/24 ceph-mon-mgr1   #集群初始化,ceph-mon-mgr1这是主机名不是服务角色名,千万注意这里,大坑
cephstore@ceph-deploy:~/ceph-clusters$ ll   #生成配置文件
total 16
drwxrwxr-x 2 cephstore cephstore   75 Aug 19 00:01 ./
drwxr-xr-x 6 cephstore cephstore  163 Aug 18 23:56 ../
-rw-rw-r-- 1 cephstore cephstore  266 Aug 19 00:01 ceph.conf
-rw-rw-r-- 1 cephstore cephstore 6097 Aug 19 00:01 ceph-deploy-ceph.log
-rw------- 1 cephstore cephstore   73 Aug 19 00:01 ceph.mon.keyring
cephstore@ceph-deploy:~/ceph-clusters$ cat ceph.conf     #查看配置文件
[global]
fsid = 668e9605-7ba1-4c5e-800e-97c076ffaa09
public_network = 10.168.56.0/24
cluster_network = 192.168.56.0/24
mon_initial_members = ceph-mon1
mon_host = 10.168.56.101
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy mon create-initial    #初始化mon节点
安装ceph-common并推送认证

ceph-common管理集群

  • 安装此包的节点

    • ceph-deploy
    • 其他需要管理集群的节点: 比如ceph-data3
cephstore@ceph-deploy:~/ceph-clusters$ sudo apt install ceph-common -y
cephstore@ceph-deploy:~/ceph-clusters$ ceph -s
2021-08-19T00:42:58.093+0800 7fcc913ec700 -1 auth: unable to find a keyring on /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin,: (2) No such file or directory
2021-08-19T00:42:58.093+0800 7fcc913ec700 -1 AuthRegistry(0x7fcc8c05b2a8) no keyring found at /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin,, disabling cephx
2021-08-19T00:42:58.093+0800 7fcc913ec700 -1 auth: unable to find a keyring on /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin,: (2) No such file or directory
2021-08-19T00:42:58.093+0800 7fcc913ec700 -1 AuthRegistry(0x7fcc8c05f1a0) no keyring found at /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin,, disabling cephx
2021-08-19T00:42:58.097+0800 7fcc913ec700 -1 auth: unable to find a keyring on /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin,: (2) No such file or directory
2021-08-19T00:42:58.097+0800 7fcc913ec700 -1 AuthRegistry(0x7fcc913eb000) no keyring found at /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin,, disabling cephx
[errno 2] RADOS object not found (error connecting to the cluster)
  • 配置认证: 推送配置文件和认证的key到需要认证的客户端(在ceph-deploy节点执行)
cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy admin ceph-deploy ceph-data3
cephstore@ceph-deploy:~/ceph-clusters$ setfacl -m u:cephstore:rw /etc/ceph/ceph.client.admin.keyring
root@ceph-data3:~# sudo setfacl -m u:cephstore:rw /etc/ceph/ceph.client.admin.keyring     
  • 校验ceph命令
root@ceph-data3:~# ceph -s
  cluster:
    id:     668e9605-7ba1-4c5e-800e-97c076ffaa09
    health: HEALTH_WARN
            mon is allowing insecure global_id reclaim
 
  services:
    mon: 1 daemons, quorum ceph-mon-mgr1 (age 15m)
    mgr: no daemons active
    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:
初始化mgr节点
  • 在mgr节点安装好ceph-mgr
apt install ceph-mgr -y
  • ceph-deploy节点初始化并加入集群
cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy mgr create ceph-mon-mgr1
初始化data节点
  • ceph-deploy给ceph-data节点安装节点磁盘管理的软件
cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy install --no-adjust-repos --nogpgcheck ceph-data1 ceph-data2 ceph-data3
  • 解决mon is allowing insecure global_id reclaim异常

img

 ceph config set mon auth_allow_insecure_global_id_reclaim false       #ceph-common管理客户端执行
 ceph -s  #状态解决
  • 准备osd节点
cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy install --release pacific ceph-data1 ceph-data2 ceph-data3
  • 擦除磁盘
cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy disk list ceph-data1   #列出节点的磁盘
cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy disk zap ceph-data1 /dev/sdb
cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy disk zap ceph-data1 /dev/sdc
cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy disk zap ceph-data1 /dev/sdd

cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy disk zap ceph-data2 /dev/sdb
cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy disk zap ceph-data2 /dev/sdc
cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy disk zap ceph-data2 /dev/sdd

cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy disk zap ceph-data3 /dev/sdb
cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy disk zap ceph-data3 /dev/sdc
cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy disk zap ceph-data3 /dev/sdd
  • 添加osd
cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy osd create ceph-data1 --data /dev/sdb
cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy osd create ceph-data1 --data /dev/sdc
cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy osd create ceph-data1 --data /dev/sdd

cephstore@ceph-deploy:~/ceph-clusters$ ceph -s   #加完三快盘之后节点就是健康的了
  cluster:
    id:     668e9605-7ba1-4c5e-800e-97c076ffaa09
    health: HEALTH_OK
 
cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy osd create ceph-data2 --data /dev/sdb
cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy osd create ceph-data2 --data /dev/sdc
cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy osd create ceph-data2 --data /dev/sdd

cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy osd create ceph-data3 --data /dev/sdb
cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy osd create ceph-data3 --data /dev/sdc
cephstore@ceph-deploy:~/ceph-clusters$ ceph-deploy osd create ceph-data3 --data /dev/sdd
 
cephstore@ceph-deploy:~/ceph-clusters$ ceph -s    #集群状态查看
  cluster:
    id:     668e9605-7ba1-4c5e-800e-97c076ffaa09
    health: HEALTH_OK
 
  services:
    mon: 1 daemons, quorum ceph-mon-mgr1 (age 55m)
    mgr: ceph-mon-mgr1(active, since 34m)
    osd: 7 osds: 7 up (since 48s), 7 in (since 56s)
 
  data:
    pools:   1 pools, 1 pgs
    objects: 0 objects, 0 B
    usage:   38 MiB used, 140 GiB / 140 GiB avail
    pgs:     1 active+clean

ceph基础运维

  • 官方文档: http://docs.ceph.org.cn/rados/

OSD管理

从RADOS删除OSD
  • https://blog.csdn.net/baidu_26495369/article/details/80325315
  • https://blog.csdn.net/weixin_42550750/article/details/113587907

Ceph 集群中的一个 OSD 是一个 node 节点的服务进程且对应于一个物理磁盘设备,是一个专用的守护进程。在某 OSD 设备出现故障,或管理员出于管理之需确实要移除特定的 OSD设备时,需要先停止相关的守护进程,而后再进行移除操作。对于 Luminous 及其之后的版本来说,停止和移除命令的格式分别如下所示:

1. 停用设备:ceph osd out {osd-num} 
2. 停止进程:sudo systemctl stop ceph-osd@{osd-num} 
3. 移除设备:ceph osd purge {id} --yes-i-really-mean-it

若类似如下的 OSD 的配置信息存在于 ceph.conf 配置文件中,管理员在删除OSD之后手动将其删除。

不过,对于 Luminous 之前的版本来说,管理员需要依次手动执行如下步骤删除 OSD 设备:

1. 于 CRUSH 运行图中移除设备:ceph osd crush remove {name} 
2. 移除 OSD 的认证 key:ceph auth del osd.{osd-num} 
3. 最后移除 OSD 设备:ceph osd rm {osd-num}

测试上传与下载数据

存取数据时,客户端必须首先连接至 RADOS 集群上某存储池,然后根据对象名称由相关的CRUSH 规则完成数据对象寻址。于是,为了测试集群的数存取功能,这里首先创建一个用于测试的存储池 mypool,并设定其 PG 数量为 32 个

  1. 创建pool: 一般一个项目一个存储池
cephstore@ceph-deploy:~/ceph-clusters$ ceph osd pool create mypool 32 32
pool 'mypool' created
cephstore@ceph-deploy:~/ceph-clusters$ ceph osd pool ls 
cephstore@ceph-deploy:~/ceph-clusters$ ceph pg ls-by-pool mypool | awk '{print $1,$2,$15}' #验证 PG 与 PGP 组合
cephstore@ceph-deploy:~/ceph-clusters$ ceph osd tree     #osd对应关系
  1. 上传文件
cephstore@ceph-deploy:~/ceph-clusters$ sudo rados put msg /var/log/syslog --pool=mypool    #上传文件
cephstore@ceph-deploy:~/ceph-clusters$ rados ls --pool=mypool    #查看上传结果
msg
cephstore@ceph-deploy:~/ceph-clusters$ ceph osd map mypool msg    #文件信息查看
osdmap e82 pool 'mypool' (3) object 'msg' -> pg 3.e4c81fc1 (3.1) -> up ([0,8], p0) acting ([0,8], p0)
  1. 下载文件
cephstore@ceph-deploy:~/ceph-clusters$ sudo rados get msg --pool=mypool /opt/a.txt    #下载
  1. 删除文件
cephstore@ceph-deploy:~/ceph-clusters$ sudo rados rm msg1 --pool=mypool
cephstore@ceph-deploy:~/ceph-clusters$ rados ls --pool=mypool

mon节点扩缩容

  1. mon节点扩容
cephstore@ceph-deploy:~/ceph-cluster$ ceph-deploy mon create ceph-mon-mgr2
cephstore@ceph-deploy:~/ceph-cluster$ ceph-deploy mon create ceph-mon3
cephstore@ceph-deploy:~/ceph-cluster$ ceph quorum_status --format json-pretty    #验证ceph-mon状态

mgr扩缩容

cephstore@ceph-deploy:~/ceph-cluster$ ceph-deploy mgr create ceph-mon-mgr2
cephstore@ceph-deploy:~/ceph-cluster$ ceph -s
  cluster:
    id:     c2221043-a745-49ed-b2b5-8326bb156f90
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum ceph-mon-mgr1,ceph-mon-mgr2,ceph-mon3 (age 7m)
    mgr: ceph-mon-mgr1(active, since 33m), standbys: ceph-mon-mgr2
    osd: 9 osds: 9 up (since 13m), 9 in (since 14m)
 
  data:
    pools:   2 pools, 33 pgs
    objects: 0 objects, 0 B
    usage:   64 MiB used, 180 GiB / 180 GiB avail
    pgs:     33 active+clean

ceph集群应用基础

块设备RBD

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

创建RDB
cephstore@ceph-deploy:~/ceph-cluster$ ceph osd pool create myrbd 64 64    #创建rbd
cephstore@ceph-deploy:~/ceph-cluster$ ceph osd pool application enable myrbd rbd    #启用rbd
cephstore@ceph-deploy:~/ceph-cluster$ rbd pool init -p myrbd     #初始化rbd
创建并验证 img

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

cephstore@ceph-deploy:~/ceph-cluster$ rbd create myimg --size 5G --pool=myrbd
cephstore@ceph-deploy:~/ceph-cluster$ rbd create myimg1 --size 3G --pool=myrbd --image-format 2 --image-feature layering
cephstore@ceph-deploy:~/ceph-cluster$ rbd ls --pool myrbd    #查看rbd
cephstore@ceph-deploy:~/ceph-cluster$ rbd --image myimg --pool myrbd info      #查看块存储信息
cephstore@ceph-deploy:~/ceph-cluster$ ceph df    #存储容量信息查看

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

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

客户端挂载RBD块存储
  • 客户端OS: centos7
  • 安装ceph-common
[root@ceph-client-centos7]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@ceph-client-centos7]# yum -y install epel-release
[root@ceph-client-centos7]# yum install https://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch/ceph-release-1-1.el7.noarch.rpm -y
[root@ceph-client-centos7 ~]# yum -y install ceph-common
  • 从deph-deploy拷贝认证文件和配置文件到centos7客户端
cephstore@ceph-deploy:~/ceph-cluster$ scp ceph.conf  ceph.client.admin.keyring root@10.168.56.110:/etc/ceph/
  • 客户端映射img
[root@ceph-client-centos7]# rbd -p myrbd map myimg1
[root@ceph-client-centos7]# rbd -p myrdb map myimg
rbd: sysfs write failed RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable myrdb1/myimg1 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
  • 格式化映射并使用
mkfs.ext4 /dev/rbd0
mount /dev/rbd0 /data
  • 服务端验证
ceph df

ceph radosgw(RGW)对象存储

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

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

部署 radosgw 服务:
  • 如果是在使用 radosgw 的场合,则以下命令将 ceph-mgr1 服务器部署为 RGW 主机
root@ceph-mon-mgr1:~# apt install radosgw=16.2.5-1bionic
  • 在deploy节点部署radoswgw服务
cephstore@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf rgw create ceph-mon-mgr1
  • ceph-mon-mgr1验证服务
root@ceph-mon-mgr1:~# ps -aux | grep radosgw
root@ceph-mon-mgr1:~# netstat -tanlp | grep 7480

img

  • 验证ceph状态
ceph df
  • 验证radowsgw存储池

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

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

img

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值