ceph相关

 admin   2023-04-01 15:56   154 人阅读  0 条评论

osd如果用vmware快照还原会有问题

ceph osd tree 查看osd对应关系

图片.png

第一章ceph的原理与架构

ServerSAN与传统存储

Server SAN: 就是利用普通的服务器的存储资源实现存储资源池的方式

传统存储: 一般都是专有的存储硬件

对比:

     性能对比: Server SAN服务器数量达到一定量可以超越传统存储

     稳定性对比: 传统存储依赖于硬件的稳定性,ServerSAN是基于软件的稳定性

     数据的可靠性传统存储一般是通过raid来保证数据的可靠性,Server SAN 通过副本机制来保证

     扩展性对比: 传统存储 增加硬盘、升级控制器 Server SAN  支持线性扩展  支持到PB级别的容量

     管理性对比: 传统存储需要专人维护  ServerSAN  一般提供web界面并且可以直接管理节点

          使用场景: IO,业务密集的场景 传统存储依然有用武之地   承载的数据量小 适用于传统存储

               海量存储场景中  比如大数据  Server SAN适合所需容量特别大的场景

 

存储从使用上进行分类:

块存储表现形式: 就是主机上的一个磁盘 (硬盘、U盘、光盘….

                   DAS 直连式存储: 通过前端总线和存储设备直连

        SAN 存储区域网络:服务器和存储直连网络,通过传输介质的不同 SAN的类型不同  ip-san  fc-san

        ceph:  通过rbd提供块存储  ceph可以直接给服务器提供一块磁盘)

         使用: 不能直接使用 需要分区 格式化 挂载 才可以使用; 对文件全管理 编辑文件/删除文件/保存文件

文件系统存储: 表现形式: 就是一个共享目录

       NAS 网络附加存储  通过网络挂载一个远程的共享目录到本地,就像使用本机上的目录一样来进行存储

             CIFS文件共享  windows 上实现

          NFS 文件共享   Unix/Linux 上实现

       glusterfs  分布式文件系统

       moosefs  分布式文件系统

            ceph     文件系统存储  cephfs

    使用:需要挂载  编辑文件/删除文件/保存文件 ….

对象存储: 从使用上来感受  提供一个在线的接口(一般是http的形式)  直接上传文件/下载文件

           从数据上来感受   以对象为单位 ,不再有文件的层次结构  只关注对象

       s3的对象存储

       swift的对象存储

       rgw的对象存储

使用:  上传文件/下载文件/删除文件  不能直接编辑文件

对象存储 天生就有web化的优势; 现在很多  图片、音频、 学习视频

http://s3.example.com/cl260-1.mp4  ——很容易被web调用  图床  学习空间

 非结构化数据: 音频  视频  文本  各种文件

 

存储的架构分类:

集中式存储:通过单一存储设备可以直接提供存储资源

   DAS  NAS  SAN

分布式存储:  通过软件来实现分布式架构

moosefs  glusterfs  ceph

ceph起源

ceph SDS 软件定义存储  是一个开源软件 LGPLV2的协议开源  统一的存储解决方法  可以提供 三类存储

        2014年红帽收购以后  ——>红帽的CEPH存储  RHCS

Ceph是提供了软件定义的,统一存储解决方案的开源项目

 

Ceph是一个分布式、可扩展、高性能、不存在单点故障的存储系统(支持PB级规模数据)

 

同时支持块存储、文件系统存储、对象存储(兼容swiftS3协议)

ceph哲学        

1.       ceph中所有的组件都是支持线性扩展的 (每个组件都可以部署多个,不存在单点故障)

2.       所有的解决方案都是开源的,是纯软件来实现的

3.       不依赖于特定的硬件,普通的x86架构就可以满足

4.       每个组件必须尽可能拥有自我管理和自我修复的能力

 

目标: 轻松扩展到PB级别、提供不同场景下的高性能存储、数据高可靠性

 

在生产中有大量应用的:  rgw  对象存储   rbd 块存储   cephfs  文件系统存储用的非常少

 

CEPH的云场景应用: 1. ceph可以通过RBD给云上的云主机或者云平台提供各种块设备,满足虚拟化的存储要求

                    2. ceph还可以通过对象存储,给用户带来海量的存储空间

       ceph可以成为云化的资源池

ceph的技术创新

1.       rados (可靠的自主分布式对象存储)

2.       使用CRUSH(可扩展哈希下的受控复制)算法自动计算应存储对象的位置

3.       任何客户端都能够使用CRUSH算法来查找对象的存储位置,因此无需与中央查找服务器通信就能找到对象

4.       客户端可以直接与存储对象的Ceph节点通信来获取对象

5.       客户端可以直接与存储对象的Ceph节点通信来获取对象

ceph的技术特点

l  CRUSH算法能够根据基础架构变化而动态调整  扩容  迁移  镜像

l  复用数据定位快速响应故障

l  无中央查找服务器

l  不需要位置元数据

l  客户端与Ceph节点直接通信

l  多个客户端并行访问,提高吞吐量  网络要求很高 

l  所有存储设备独立并行运行

l  自动数据保护  副本机制  纠删码机制

ceph的文件存储流程(文件系统的存储为例):


 

 

ceph的架构及组件

提供存储功能的模块:

RBD: ceph 用来提供块存储

rados gw: 用来提供对象存储网关  实现 s3swift现成的接口  应用程序直接对接就可以使用

cephfs: 用来提供文件系统存储

ceph的组件:

OSD ceph集群中唯一的存储组件,用来存储用户数据;负责数据的维护

l     Ceph集群中唯一能存储用户数据的组件,同时用户也可以发送读命令来读取数据。

l  在集群中有多少个OSD进程就有多少块磁盘

l  每个OSD对应一块磁盘,磁盘会使用文件系统格式化,支持filestorebluestore驱动。

l  OSD设计目标是尽可能接近计算力与物理数据的距离,让集群的性能能够达到最高效。CRUSH算法用于将对象存储到OSD中。

l  对象被自动复制到多个OSD,客户端在读写数据时始终访问primary OSD,其他OSDsecondary OSD,在集群故障时发挥重要作用。

 

mon: 维护整个集群的状态和映射信息  整个集群的入口

l     Ceph monitor通过保存一份集群状态映射来维护整个集群的健康状态。它分别为每个组件维护映射信息,包括OSD mapMON mapPG mapCRUSH map

l  所有集群节点都向MON节点汇报状态信息,并分享它们状态中的任何变化

l  Ceph monitor不存储数据

l  MON需要配置为奇数个,只有超过半数正常,Ceph存储集群才能运行并可访问

mgr: 监控集群运行的状态和指标,可以提供web管理界面;还可以对接第三方监控插件(zabbix 普罗米修斯….

l     MGR提供一系列集群统计数据,在较旧版本的Ceph中,这些数据大部分是由MON收集和维护,负载太高

l  如果集群中没有MGR,不会影响客户端I/O操作,但是将不能查询集群统计数据。建议每集群至少部署两个MGR

l  MGR将所有收集的数据集中到一处,并通过tcp8443端口提供一个web界面对集群进行管理

l  通过第三方模块实现的  datadog  数据狗  8443 web界面    普罗米修斯提供监控

 

mds:元数据服务器  缓存元数据到内存中(如果不需要cephfs的文件系统存储,那么可以不部署mds

l     MDS只为CephFS文件系统跟踪文件的层次结构和存储元数据。MDS不直接提供数据给客户端,从而消除了系统中故障单点。

l  MDS使用RADOS存储元数据,MDS本身只在内存中缓存元数据以加速访问  主备部署

l  访问CephFS的客户端首先向MDS发出请求,以便从正确的OSD获取文件

l  MDS在配置的时候 会要求配置两个存储池  metadata 元数据池 data数据池

ceph的访问方式

l  Ceph原生API(librados)

p  Ceph原生接口,可以通过该接口让应用直接与RADOS协作来访问Ceph集群存储的对象

p  Ceph RBDCeph RGW以及CephFS都构建于其上

p  如果需要最高性能,建议在应用中直接使用librados。如果想简化对Ceph存储的访问,可改用Ceph提供的更高级访问方式,如RGWRBDCephFS

l  Ceph Object Gateway

p  利用librados构建的对象存储接口

p  通过REST API为应用提供网关

p  支持S3swift接口

l  Ceph Block Device

p  提供块存储

p  由分散在集群中的不同的OSD中的个体对象组成

p  Linux内核挂载支持 

p  QEMUKVMOpenstack Cinder的启动支持

l  Ceph File System

p  并行文件系统,元数据由MDS管理   缓存  进行加速

ceph的访问流程

 

 

 

 

 

 

 

 


1.       clientmon获取集群的映射信息包括 OSDMONMDS等映射

2.       获取对象ID和存储池的名字

3.       通过hash 算出对象存储的PG

4.       通过crush得出PG所映射的一组OSD

5.       找到主OSD 建立访问

 

ceph的寻址流程

          

       File à Object映射:将用户态的file映射成rados能够处理的object,按照统一大小切块并分配id,方便管理以及对多个object并行处理

       Object à PG映射:一个PG负责组织若干个object,但一个object只能被映射到一个PG中。同时,一个PG会被映射到nOSD上,而每个OSD上都会承载大量的PG file被映射为一个或多个object之后,就需要将每个object独立地映射到一个PG中去。当有大量object和大量PG时,RADOS能够保证objectPG之间的近似均匀映射。

       PG à OSD映射:将作为object的逻辑组织单元的PG映射到数据的实际存储单元OSDRADOS采用CRUSH算法来实现PGOSD的映射。

 

ceph 数据写入流程

         正常写入:

                             

       client 创建cluster handler

       client 读取配置文件

       client 连接上monitor,获取集群map信息

       client 读写io 根据crush map算法请求对应的主osd数据节点

       osd数据节点同时写入另外两个副本节点数据

       等待主节点以及另外两个副本节点写完数据状态

       主节点及副本节点写入状态都成功后,返回给clientio写入完成

异常写入:


       client连接monitor获取集群map信息

       同时新主osd1由于没有pg数据会主动上报monitor告知让osd2临时接替为主

       临时主osd2会把数据全量同步给新主osd1

       client IO读写直接连接临时主osd2进行读写

       osd2收到读写io,同时写入另外两副本节点

       等待osd2以及另外两副本写入成功

       osd2三份数据都写入成功返回给client, 此时client io读写完毕

       如果osd1数据同步完毕,临时主osd2会交出主角色

       osd1成为主节点,osd2变成副本

第二章ceph的安装与扩容

生产环境最小规划

l  至少三个MON节点

l  至少三个OSD节点(每节点可以有多个OSD进程)

l  至少两个MGR节点

l  如果使用CephFS,至少需要两个配置完全相同的MDS节点

l  如果使用Ceph RADOSGW,则至少需要两个RGW节点

容器硬件配置推荐


         OSD要求:

                  

规划硬件常见错误

l  仍然使用旧的、性能较差的硬件用于 Ceph

l  在同一个池中使用不同的硬件。

l  使用 1Gbps 网络而不是 10Gbps 或更快的网络。

l  没有正确设置公共和集群网络。

l  使用 RAID 作为数据保护

l  在选中驱动器时只考虑了价格而没有考虑性能或吞吐量。

l  当用例需要 SSD 日志时,在 OSD 数据驱动器上进行日志。

l  磁盘控制器的吞吐量不足。

ceph的版本


 

ceph的部署方式

       纯手动部署

       部署极其复杂

       便于初学者理解具体的工作机制

       ceph-deploy

       ceph早期部署方式

       ceph-ansible

       RHCS3的部署方式

       cephadm

       ceph容器化部署方式

       ceph官方和红帽推荐

cephadm部署

cephadm的组成:  cephadm ——> python3 脚本   cephadm orchestrator  编排器

cephadm部署的必要条件:

cephadm 脚本 ——> 社区中可以下载  redhat  购买RHCS产品

容器环境 ——>  docker/podman

python3的执行环境  ——> cephadm 是拿python写的脚本

时间源  两个节点的时间误差 不能超过0.05s  生产环境中建议自建时间源

 时间源的服务器: NTP Server chrony

 

cephadm的好处:

1 . 简化部署的难度,不再需要开发特定发行版本的包    更新容器镜像

2. ceph支持平滑升级  可以一键升级 并且升级的过程还可以看到 进度条

3. 可以直接使用cephadm来管理ceph集群,无需安装客户端软件

4. 使用cephadm orchestrator 通过web的方式进行管理

cephadm的部署:

1.       指定集群的引导节点(点火节点) cephadm 会在引导节点上创建一个单节点的集群

2.       cephadm 通过ssh的方式管理集群中的其他节点

3.       cephadm通过编排器 部署相应的服务到集群节点 ——>引导节点会拷贝容器的镜像到集群节点

RHCS5.0 部署

教室环境介绍:

F0中虚拟机的作用:

classroom   教室基础环境   YUM    软件包

bastion     教室路由器  把网络打通

workstations  测试桌面    教室环境中的各种脚本都要到上面运行

utility            容器的镜像仓库

clientb         ceph第二个集群的客户端

serverf  serverg  ceph的第二个集群

clienta       ceph第一个集群的客户端

serverc  serverd  servere  ceph的第一个集群

部署流程:

准备工作: [student@workstation ~]$ lab start deploy-deploy  摧毁已经存在的集群

1.        serverc作为引导节点

a)         安装cephadm-ansible 工具  给节点做预配

b)         编写主机清单 vim /usr/share/cephadm-ansible/hosts

                   clienta.lab.example.com

                   serverc.lab.example.com

                                        serverd.lab.example.com

                                          servere.lab.example.com

c)         第二步执行 ansible-playbook  -i hosts cephadm-preflight.yml  --extra-vars "ceph_origin="

d)         cephadm bootstrap --mon-ip 172.25.250.12 --apply-spec=initial-config-primary-cluster.yaml --initial-dashboard-password redhat --initial-dashboard-user admin  --dashboard-password-noupdate --allow-fqdn-hostname --registry-url registry.lab.example.com  --registry-username registry  --registry-password redhat   开始部署

e)         cephadm shell  ——> ceph –s 查看集群的状态

 

 

开源pacific版本部署

node1node2node3  配置 2H4G 最少的配置  

每台机器三块磁盘类型scsi,大小各10G,操作系统rockylinux 8.4

1.       配置主机名和IP的映射关系

a)         172.17.0.81 node1.example.com

b)         172.17.0.82 node2.example.com

c)         172.17.0.83 node3.example.com

2.       节点预配置

a)         关闭selinux和防火墙

b)         配置时间同步且chronyd设置为开机自启 本地的时间源

3.       获取cephadm

到社区找到cephadm的版本

wget https://github.com/ceph/ceph/raw/pacific/src/cephadm/cephadm获取 cephadm

http://rhce.ytlinux.com/cephadm cephadm  16.2.11 版本

4.       配置cephadm

chmod +x  cephadm 添加执行权限

./cephadm add-repo --release pacific 添加指定版本的ceph

./cephadm install 安装cephadm工具

./cephadm install ceph-common 安装ceph的客户端工具(可选)

5.       在引导节点上部署单节点集群

cephadm  bootstrap --mon-ip 172.17.0.81 --allow-fqdn-hostname --initial-dashboard-user admin --initial-dashboard-password redhat --dashboard-password-noupdate

bootstrap 引导集群

--mon-ip 172.17.0.81 指定mon节点地址

--allow-fqdn-hostname 使用主机名作为dashboard地址

--initial-dashboard-user admin 指定dashboard用户名为admin

--initial-dashboard-password 指定dashboard密码为redhat

--dashboard-password-noupdate 首次登陆dashboard无需更改密码

 

6.       各容器的功能作用

ceph-mon mon组件

ceph-mgr mgr组件

ceph-mds mds组件

ceph-osd osd组件

ceph-crash  mgr用来收集守护进程的崩溃信息

prometheus 普罗米修斯监控的主程序

node-exporter 普罗米修斯监控程序 Linux收集端,windows使用WMI-exporter

alertmanager 普罗米修斯 报警管理器

7.       给单节点集群添加OSD磁盘

cephadm shell  进入到ceph操作环境

ceph orch daemon add osd node1.example.com:/dev/sdb 添加指定主机的单块磁盘为osd

ceph orch daemon add osd node1.example.com:/dev/sdc

ceph orch daemon add osd node1.example.com:/dev/sdd

ceph orch apply osd --all-available-devices 在所有主机上将未使用的磁盘部署为osd

8.       容器实现的原理

a.       cephadm会在被管理主机上释放两个目录

                                     i.              一个是/var/log/ceph 日志目录

                                   ii.              一个是/var/lib/ceph/集群ID ceph集群容器数据的存放目录

b.       每一个服务组件对应一个容器,会在/var/lib/ceph/集群ID/生成一个以服务名命名的目录

c.       每个服务目录中会存在一个名为unit.run的脚本,该脚本对应systemd的一个服务单元,所以每个容器都是通过systemd实现开机自启动的

d.       osd组件的目录中有一个名为block的文件,该文件则为系统上逻辑卷的软连接文件,对应系统上一个真正的lvm逻辑卷

e.       系统上每一个osdlvm都是独立的,是单独的PV-VG-LV

9.       各组件服务端口



 

10.   给集群添加主机

ceph cephadm get-pub-key > ~/ceph.pub 获取集群公钥并保存到当前路径下ceph.pub

ssh-copy-id  -f -i  ~/ceph.pub root@node2  拷贝公钥到node2

ceph orch host add node2.example.com       需要写完整的主机名

ps: 如果添加主机失败,第一个检查mgr容器是否可以正常解析该主机名,第二个检查cephkey有没有发送到节点上

 

11.   管理ceph节点角色

关闭集群组件自扩展

ceph orch apply mon --unmanaged=true   关闭mon自动扩展

ceph orch apply mgr --unmanaged=true   关闭mgr自动扩展

添加mgr节点

ceph orch daemon add  mgr  --placement=node2.example.com

添加mon节点

ceph orch daemon add  mon  --placement=node2.example.com

12.   验证集群状态

cephadm shell

ceph -s     warn  警告  集群是可用的 只是有错误 一般不影响使用

                   ok   状态是正常的

            error  错误  集群停止运行   无法使用

13.   ceph集群的管理

在任何安装了ceph客户端(ceph-common)的主机上,只要存在ceph.confceph.client.admin.keyring 文件且该主机可以访问到cephmon节点则可以管理ceph

         相关的命令:

         ceph orch host ls  查看集群内的主机

         ceph orch ls  查看集群内服务的部署情况

         ceph orch ps 查看集群内各个主机的服务运行情况

        

14.   移除集群中的服务和主机

a)         停止服务 ceph orch  daemon  stop  服务名

b)         删除服务 ceph orch  daemon  rm   服务名  如果服务正在运行 --force

c)         移除主机 ceph orch host rm node3.example.com 移除前确保主机上的服务停止

15.   移除集群中的osd

a)         停止指定的osd服务  ceph orch daemon stop  osd的服务名

b)         删除服务   ceph orch daemon rm  osd服务名

c)         删除crushmap的映射 ceph osd  rm osd的序号

d)         擦除数据 ceph orch device zap node2.example.com /dev/sdd  --force  (如果集群开启了osd的自动扩展,则需要关闭,否则会自动将该磁盘重新创建为osd

16.   使用标签部署服务

a)         标记ceph管理节点以执行cephadm

ceph orch  host  label add node3.example.com test 给节点添加test 标签

ceph orch  host  label add node4.example.com test

b)         标记ceph组件节点以批量部署

ceph orch apply mgr --placement="label:test"

         PS: apply(应用规则来部署服务)  daemon (手动去添加服务) 都可以部署服务

第三章ceph的存储池

存储池概念

存储池是ceph的逻辑分区,专门用来存储对象

 

特性:

1. 将文件切片成对象 通过hash算法 找到存储池中的pg,池中的pg根据cruash算法找到osd节点

2.       存储池中的PG的数量对性能有重要影响,一般建议OSDPG的数量100-250RHCS 开源一般不要超过200,超过200将导致存储池无法创建,超过限制通过修改存储池的参数来实现mon_max_pg_per_osd

3.       访问级别:不同用户的访问权限

存储池分类

                   带有数据冗余的池类型

                            复制池(副本池)

                            纠删码池

                   带有数据缓存加速的类型

                            缓存池

复制池

创建复制池:

ceph osd  pool  create  pool-name  

默认创建是副本池、且默认是3副本、pgpgp默认是32

 

PG对存储池的影响:

 

pg数量过多: 数据移动时,每个PG维护的数据量过少,ceph占用大量的cpu和内存计算,影响集群正常客户端使用

 

pg数量过少:单个pg存储的数据就越多,移动pg会占用大量带宽,影响集群客户端使用

 

l        PG存储池中的个数,PGP是存储池PGOSD排列组合数

l  扩容pg à pg中的对象会进行移动  在新的osd上生成pg

l  扩容pgp-> pg中的对象不会进行移动  会引起部分pgosd上的分布

 

存储池添加应用

存储池添加应用标签(如果不添加应用则ceph会告警):

ceph osd  pool  application  enable pool-name  rgw(应用的类型 rgwrbdcephfs

存储池常用命令

       列出存储池

       ceph osd  pool ls  查询池

       ceph osd pool ls detail  查询池的详细信息

       获取池统计信息

       ceph df:获取池用量统计数据

       ceph osd df:获取osd上磁盘使用量统计数据

       ceph osd pool stats:获取池性能统计数据

 

rados常用命令

rados的命令只限在节点上测试使用)

rados -p pool-name  ls  查看池中的对象

rados -p pool-name  put  对象名  /对象的路径  将对象上传到存储池

rados -p pool-name  get  对象名  /对象的路径   将对象从存储池下载到本地

rados -p pool-name  rm  对象名   删除对象

 

存储池配额

配额方式

对象配额      容量配额

语法提示:

ceph osd pool set-quota pool-name max_objects obj-count max_bytes bytes

示例

ceph osd pool set-quota myfirstpool max_objects 1000

可将值设置为0来删除配额。同时通过ceph osd df命令查看池的用量统计数据

ceph达到池配额时,操作会被无限期阻止

 

存储池重命名

语法

ceph osd pool rename current-name new-name

示例

ceph osd pool rename mysecondpool mytestpool

重命名池,不影响池中的数据

 

存储池快照

存储池快照,只能针对池中的单个对象进行还原,不能对整个池进行还原

创建快照

ceph osd pool mksnap pool-name snap-name

查看快照

        rados -p pool-name  -s snap-name  ls

删除快照

ceph osd pool rmsnap pool-name snap-name

回滚快照(还原快照的两种方式)

rados -p pool-name -s snap-name get object-name file  从快照下载对象到本地

rados -p pool-name rollback object-name snap-name  直接从快照还原对象到存储池

 

存储池参数

设置池参数

ceph osd pool set pool-name parameter value

获取池参数

ceph osd pool get pool-name parameter

列出所有参数及其值

ceph osd pool get pool-name all

 

PG自动调整

PG的计算方法:

                  

Target PGs per OSD:预估每个OSDPG数,一般取100计算

           集群OSD不增加推荐值为 100  增加为 200

OSD #:集群OSD数量

%Data:预估该存储池占该OSD集群总容量的近似百分比

Size:该存储池的副本数

 

1.       If the result of this calculation is less than (OSD#)/(Size), then the PG Count is updated to (OSD#)/(Size). This tactic ensures an even load/data distribution by allocating at least one Primary or Secondary PG to every OSD for every Pool.

2.       The output value of 1 above is then rounded to the nearest value of 2. This rounding marginally improves the efficiency of the CRUSH algorithm.

3.       If the nearest power of 2 is more than 25% below the original value (the result of the first equation), we use the next higher power of 2

 

PG推荐值:

 

          一种比较通用的取值规则:

       少于5OSD时可把pg_num设置为128

       OSD数量在510个时,可把pg_num设置为512

       OSD数量在1050个时,可把pg_num设置为4096

       OSD数量大于50时,建议自行计算

       PG计算器

       pgcalchttps://ceph.com/pgcalc ceph官方已废弃)

       cephpgchttps://access.redhat.com/labs/cephpgc

 

 

PG autoscaler

 

pg_autoscaler存储池选项可以帮助存储池自动调整pgpgp的数量

 

PG支持分裂

现有PG可以将其内容“拆分”为许多较小的PG,从而增加了池中PG的总数

PG支持合并

现有两个PG“合并”到一个更大的PG中,从而减少池中PG的总数(N版以后开始支持)

 

ceph mgr module enable pg_autoscaler N版以后默认开启

         集群根据每个池中实际存储(或预期要存储)的数据量,并自动选择适当的pg_num

 

存储池命名空间

       namespace是池中对象的逻辑组。可以限制用户对池的访问,使得用户只能存储或检索这个namespace内的对象

       namesapce的优点是能够使将用户访问权限池的某一部分

       namespace目前仅支持使用librados的应用,不支持rgwrbd

       若要在命名空间内存储对象,客户端应用必须提供池和命名空间的名称

       默认情况下,每个池包含一个具有空名称的namespace,称为默认namespace

       rados命令可以通过-N name或者--namespace=name选项存储和检索池中指定命名空间的对象

       示例

       rados -p mytestpool -N system put srv /etc/services

       rados -p mytestpool -N system ls

       rados -p mytestpool --all ls

       rados -p mytestpool --all ls --format=json | python - json.tool

       --all 可列出池中所有命名空间中的所有对象

       --format=json 返回json格式的结果

 

删除存储池

          删除池

       ceph osd pool delete pool-name pool-name --yes-i-really-really-mean-it

       L版开始,已将mon_allow_pool_delete配置参数设置为false,以提供额外的保护。即使借助--yes-i-really-really-mean-it选项,ceph osd pool delete命令也不会导致池被删除

       可以将mon_allow_pool_delete参数设置为true,然后重启mon服务,以允许删除池

       即使mon_allow_pool_delete被设置为true,也可以通过在池级别上将nodelete选项设置为true来防止池被删除:

       ceph osd pool set pool-name nodelete true

纠删码池

纠删码池的存在就是为了解决ceph存储的容量问题,因为副本机制会导致硬盘上大量的空间用作冗余,使用存储容量相对较少,既要保证数据的冗余性,又要保证数据的可靠性

       纠删码池使用纠删码而非复制来保护对象数据

       相对于复制池,纠删码池会节约存储空间,但是需要更多的计算资源

       纠删码池一般只能用于对象存储(从L版开始可以调整为支持rbdcephfs

       打开池选项allow_ec_overwrites以支持rbdcephfs

       纠删码池L版之前不支持快照

纠删码原理

n =  k + m 

         k:数据块  m:编码块(编码块是通过数据块计算得出)  n:总的块数

将一个对象切成多个数据块,然后使用m个编码块对数据块进行编码,最后将n个数据块存储到pg,编码块的大小和数据块的大小是一致的,数据块的大小就是将对象均匀的切片,比如一个对象是4M,数据块是2个那么数据块的大小就是2M

 

任意个K块可以还原数据,m个块一般决定冗余量

l  纠删码的存储方法是将每个object划分成更小的数据块,每一个数据块称为data chunk,再用编码块(coding chunk)对它们进行编码,最后将这些数据块和编码块存储到Ceph集群的不同故障域中,从而保证数据安全。纠删码概念的核心公式n=k+m,解释如下:

p  k:原始object被划分成的数据块的个数

p  m:附加到所有原始数据块的额外编码块的个数

p  n:执行纠删码处理后,所创建的块的总数


 

 

编码规则

example: ceph osd  erasure-code-profile set ecdemo k=2 m=1  crush-failure-domain=osd

l  k:在不同 OSD 之间拆分的数据区块数量。默认值为 2

l  m:数据变得不可之前可以出现故障的 OSD 数量。默认值为 1

l  plugin: 此可选参数定义要使的纠删代码算法。

l  crush-failure-domainCRUSH 故障域,默认设置为 host

l  crush-device-class: 典型的类别可能包括 hddssd nvme

l  crush-root:此可选参数设置 CRUSH 规则集的根节点。

l  key=value: 插件可以具有对该插件唯的键值参数。

l  technique:每个插件提供组不同的技术来实施不同的算法

纠删码profile注意点:无法修改或更新现有纠删码池的profile

 

纠删码规则操作:

使用指定profile创建纠删码池

ceph osd  pool  create pool-name erasure profile-name

列出现有的配置

ceph osd erasure-code-profile ls

删除现有的配置

ceph osd erasure-code-profile rm profile-name

查看现有的配置

ceph osd erasure-code-profile get profile-name

 

第四章ceph集群配置

Ceph配置文件

       默认情况下,无论是ceph的服务端还是客户端,配置文件都存储在/etc/ceph/ceph.conf文件中

       如果修改了配置参数,必须使用/etc/ceph/ceph.conf文件在所有节点(包括客户端)上保持一致。

       ceph.conf 采用基于 INI 的文件格式,包含具有 Ceph 守护进程和客户端相关配置的多个部分。每个部分具有一个使用 [name] 标头定义的名称,以及键值对的一个或多个参数

       配置文件使用#和;来注释

       参数名称可以使用空格、下划线、中横线来作为分隔符。如osd journal size 、 osd_jounrnal_size 、 osd-journal-size是有效且等同的参数名称

       通过中括号将特定守护进程的设置分组在一起: 

ceph  全局配置文件  /etc/ceph.conf

[global] 部分存储所有守护进程或读取配置的任何进程(包括客户端)所共有的般配置。

[mon] 部分存储监控器 (MON) 的配置。

[osd] 部分存储 OSD 守护进程的配置。

[mgr] 部分存储管理器 (MGR) 的配置。

[mds] 部分存储元数据服务器 (MDS) 的配置。

[client] 部分存储应到所有 Ceph 客户端的配置。

元变量

所谓元变量是即Ceph内置的变量。可以用它来简化ceph.conf文件的配置:

$cluster

红帽 Ceph 存储 5 集群的名称。默认集群名称为 ceph

$type

守护进程类型,如监控器的值为 monOSD 使 osd,元数据服务器使 mds,管理器使mgr,客端软件使 client

$id

守护进程实例 ID。对于此变量,serverc 上监控器的值为 servercosd.1 $id 值为 1 ,客端应的值为⽤⼾名。

$name

守护进程名称和实例 ID。此变量是 $type.$id 的简写。

$host

守护进程的主机的名称。

配置文件路径

$CEPH_CONFCEPH_CONF环境变量所指示的路径)

-c path / pathceph -c

/etc/ceph/ceph.conf

/.ceph/ceph.conf

./ceph.conf(就是当前所在的工作路径)

仅限FreeBSD系统, /usr/local/etc/ceph/$cluster.conf

临时修改配置

使用tell修改

ceph tell $type.$id  config set mon_allow_pool_delete true  修改某一个服务的配置

ceph tell $type.* config set mon_allow_pool_delete true  修改一整个类型

使用daemon修改(在指定进程的容器中执行)

ceph daemon <name> config set <option> <value>

ceph daemon osd.4 config set debug_osd 20

PS:使用daemon 的方式修改服务的配置,可以在mon故障的情况下进行修改,但是一定要在指定进程的容器中去执行该命令

配置集中式数据库

查看集群中所有的配置项

ceph config ls 列出所有配置项

ceph config help setting 有助于进特定配置设置

ceph config dump 可显示集群配置数据库设置

ceph config show $type.$id 可显特定守护进程的数据库设置

ceph config show-with-defaults $type.$id  查看特定守护进程的默认配置项

查看集群中当前生效的配置项

使 ceph config get $type.$id 可获得特定配置设置

使 ceph config set $type.$id 可设置特定配置设置

ceph config  get  mon mon_allow_pool_delete  (持久生效的)

 

 

查看集群中所有的配置项

ceph config ls 列出所有配置项

ceph config help setting 有助于进特定配置设置

ceph config dump 可显示集群配置数据库设置

ceph config show $type.$id 可显特定守护进程的数据库设置

ceph config show-with-defaults $type.$id  查看特定守护进程的默认配置项

查看集群中当前生效的配置项

使 ceph config get $type.$id 可获得特定配置设置

使 ceph config set $type.$id 可设置特定配置设置

 

管理数据库大小

MON 节点存储和维护集中配置数据库。数据库在每个 MON 节点上的默认位置是 /var/lib/ ceph/$fsid/mon.$host/store.db

 ceph tell mon.$id compact   整合指定主机守护进程的数据库

ceph config set mon mon_compact_on_start true mon每次启动时自动压缩


 

ceph网络架构

l  集群网络类型

p  public  公共网络  供客户端和集群节点之间进行通信

p  cluster 集群网络  OSD实现副本创建、数据恢复和再平衡以及心跳通信

l  public 络是所有 Ceph 集群通信的默认

p  cephadm 具假定第 MON 守护进程 IP 地址 络是 public

p  Ceph 端通过集群的 public 络直接向 OSD 发送请求

p  如果没有cluster network  OSD 复制和恢复流量会使 public


集群网络优势

l  性能:消除副本创建、数据恢复和再平衡对 public network 的压力;增强 OSD 心跳网络的可靠性

l  安全 :集群网络和公共网络隔离通过cluster network,防止例如 DDOS 网络攻击带来的影响

l  OSD使用6800-7300范围内三个端口进行通信:

p  于通过公共络与客端和 MON 通信

p  于通过集群络或公共络发送数据到其他 OSD

p  于通过集群络或公共络交换跳数据

设置集群网络

l  创建集群时配置

p  cephadm bootstrap --cluster_network

l  修改已经存在的集群

p  cop config set osd cluster_network 172.25.252.0/24

l  启用IPV6

p  默认开启ms_bind_ipv4  true ms_bind_ipv6false

p  ceph config set global ms_bind_ipv6 true

第五章 ceph用户认证及授权

认证说明


认证机制

None:这种模式下,任何用户可以在不经过身份验证时就访问Ceph集群

auth_cluster_required = none

auth_service_required = none

auth_client_required = none

CephxCephx协议类似于Kerberos协议,它允许经过验证的客户端访问ceph集群

auth_cluster_required = cephx

auth_service_required = cephx

auth_client_required = cephx

密钥创建机制


身份验证过程


用户命名规范

Ceph守护进程使用的帐户名与相关守护进程名称匹配:osd.1 mon.node1,这些用户默认会在安装时被创建

 

librados的客户端应用,帐户名以client.开头。例如,将OpenStackCeph集成时,常常会创建专用的client.openstack用户。另外,当部署 Ceph Object Gateway时,会创建client.rgw.帐户。如果要在librados基础上部署自定义软件,也应当创建特定帐户

 

Ceph客户端所使用的帐户名以client.开头,运行cephrados等命令时使用。安装程序会创建超级管理员client.admin,它具有访问所有内容及修改集群配置的功能。如果运行命令时不通过 --name --id 明确指定用户名,Ceph默认使用client.admin

Ceph命令的选项

l  ceph -s

p  --id 用户名

p  --name $type.$id client.admin

p  --keyring 用户秘钥 /etc/ceph/ceph.client.admin.keyring

p  --conf 指定ceph的配置文件

l  rados -p pool-name ls

p  --id 用户名

p  --name $type.$id client.admin

添加用户方式

       ceph auth add

       当用户不存在,则创建用户并授权

       当用户存在,当权限不变,则不进行任何输出

       当用户存在,不支持修改权限

       示例:ceph auth add client.user1 mon 'allow r' osd 'allow rw pool=pool01

       ceph auth get-or-create

       当用户不存在,则创建用户并授权并返回用户和key

       当用户存在,权限不变,返回用户和key

       当用户存在,权限修改,则返回报错

       示例:ceph auth get-or-create client.user1  mon 'allow r' osd 'allow rw pool=pool01'

       ceph auth get-or-create-key

       当用户不存在,则创建用户并授权只返回key

       当用户存在,权限不变,只返回key

       当用户存在,权限修改,则返回报错

       示例:ceph auth get-or-create client.user1 mon 'allow r' osd 'allow rw pool=pool01'

用户授权的优势

       Ceph把数据以对象的形式存于各存储池中,Ceph用户必须具有访问存储池的权限才能够读写数据

       Cephcaps来描述给用户的授权,这样才能使用MonOSDMDS的功能

       caps也用于限制对某一存储池内的数据或某个命名空间的访问

       Ceph管理员用户可在创建或更新普通用户时赋予其相应的caps

CAPS权限说明

 


授权方式

l  普通授权

p  mon 'allow r' osd 'allow rw'

l  基于存储池的授权

p  mon 'allow r' osd 'allow rw pool=myfirstpool'

l  基于对象前缀授权

p  mon 'allow r' osd 'allow rw object_prefix pref'

l  基于命名空间授权

p  mon 'allow r' osd 'allow rw pool=myfirstpool namespace=photos'

l  基于路径授权

p  只适用于CephFSCephFS通过这种方式来限制对特定目录的访问

p  mon 'allow r' osd 'allow rw pool=cephfs_data' mds 'allow rw path=/webcontent'

l  限制用户只能使用特定的管理员指令

p  mon 'allow r, allow command "auth get-or-create", allow command "auth list"'

caps 授权 权限会发生覆盖,所以如果是新增权限,必须原封不动的带上原来的权限

用户管理

       查看系统所有用户

       ceph auth list

       获取某个用户的详细信息

       ceph auth get client.admin

       获取用户的key

       ceph auth print-key client.admin

       删除指定用户  

       ceph auth del client.bob

用户备份

       导出用户

       ceph auth get client.bob -o /etc/cephceph.client.bob.keyring

       导入用户(导入的用户需要有caps权限)

       ceph auth  import -i /etc/ceph/ceph.client.bob.keyring

用户秘钥

客户端访问ceph集群时,会使用本地的keyring文件,默认依次查找下列路径和名称的keyring文件:

/etc/ceph/$cluster.$name.keyring

/etc/ceph/$cluster.keyring

/etc/ceph/keyring

/etc/ceph/keyring.bin

PS:无论用户的秘钥放在哪个文件都要确保本机上的ceph用户对该文件有读取的权限

第六章RBD基础使用

RBD介绍

l  块设备是服务器、笔记本电脑和其他计算系统上最为常期存储设备。它们以固定⼤⼩的块存

储数据。块设备包括基于旋转磁盘的硬盘驱动器,以及基于易失性存储器的固态驱动器。若要使存储,您要使⽤⽂件系统格式化块设备,并将它挂载到 Linux 件系统层次结构中。

l  RADOS 块设备 (RBD) 功能可从红 Ceph 存储集群提供块存储。

l  RADOS 提供虚拟块设备,并以RBD 镜像形式存储在红帽 Ceph 存储集群的池中。

 

创建RBD镜像

       创建RBD

       ceph osd pool create rbd

       初始化RBD

       ceph osd pool application enable rbd rbd

或者

       rbd pool init rbd

       创建client.rbd用户

       ceph auth get-or-create client.rbd mon 'allow r' osd 'allow rwx pool=rbd

       或者 ceph auth get-or-create client.rbd mon profile rbd' osd profile rbd pool=rbd'

       创建RBD镜像

       rbd create --size 1G rbd/test

       在客户端映射镜像

       rbd map rbd/test --name client.rbd  

       格式化并访问

       mkfs.xfs /dev/rbd0

       挂载镜像

       mount /dev/rbd0 /mnt

RBD查询操作

       列出所有的rbd

       rbd [--pool pool-name] ls

       查询指定rbd的详细信息

       rbd info [pool-name/]image-name

       查询指定rbd的状态信息

       rbd status [pool-name/]image-name

       查询指定rbd镜像的大小

       rbd du [pool-name/]image-name

RBD扩容与复制

       修改rbd镜像的大小

       rbd resize [pool-name/]image-name --size nM|G|T

       rbd resize rbd/test --size 2G

       xfs_growfs -d /mnt

       复制rbd镜像

       rbd cp [pool-name/]src-image-name [pool-name/]tgt-image-name

       移动rbd镜像(重命名rbd镜像)

       rbd mv [pool-name/]src-image-name [pool-name/]new-image-name

ps:不支持跨池操作,只能在同一个池内进行操作

 

 

RBD删除与恢复

       删除RBD需要先将其移动至回收站

       rbd trash mv [pool-name/]image-name

       从回收站删除RBD

       rbd trash rm image-id

       从回收站恢复RBD

       rbd trash restore image-id

       查看当前回收站中的RBD

       rbd trash ls [pool-name]

RBD映射

l  所有映射操作都需要在客户端执行

       RBD映射

       rbd map [pool-name/]image-name

       取消映射

       rbd unmap /dev/rbd0

       查看映射

       rbd showmapped

RBD持久映射

l  编写fstab条目

p  /dev/rbd/存储池名/镜像名   /挂载点 文件系统类型  defaults,_netdev 0 0

p  /dev/rbd/rbd/images1  /mnt xfs defaults,_netdev 0 0

l  编写rdbmap

p  存储池名/镜像名        id=用户名,keyring=用户keyring文件路径

p  rbd/images1         id=rbd,keyring=/etc/ceph/ceph.client.rbd.keyring

l  设置rbdmap服务自启动

p  systemctl enable --now rbdmap.service

第七章RBD高级特性

RBD客户端缓存

l  RBD客户端两种实现方式

p  librbd: RBD块设备在客户端由librbd通过用户空间的库实现,librbd就是利用libradosRBD进行交互的,librbd主要用于为虚拟机提供块设备,librbd无法使用Linux页面缓存

p  krbd:使用原生Linux内核模块krbd进行挂载,内核驱动可利用 Linux 页缓存来提升性能

l  缓存模式

p  直写(透写)缓存: 数据直接写入osd磁盘

p  回写缓存:   librbd 库将数据写到服务器的本地缓存中,周期性刷盘到OSD(如主机故障有丢失数据的风险)

l  RBD缓存

p  RBD缓存是使用客户端上的内存


RBD关键特性


RBD镜像特性管理

l  RHEL7/Centos7中映射rbd可能会报错

p  RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable test object-map fast-diff deep-flatten"

p  说明RBD启用了一些内核不支持的功能,需要关闭之后才能正常映射

l  启用RBD镜像特性

p  rbd feature enable rbd/test layering

l  禁用RBD镜像特性

p  rbd feature disable rbd/test layering

RBD快照

RBD快照是创建于特定时间点的RBD镜像的只读副本

RBD快照使用写时复制(COW)技术来最大程度减少所需的存储空间

在将写 I/O 请求应 RBD 快照镜像前,集群会将原始数据复制到 I/O 作所影响对象的 PG 中的另区域

快照在创建时不会占存储空间,但会随着所包含对象的变

1.       冻结文件系统

  fsfreeze -f mountpoint 冻结文件系统  fsfreeze -u mountpoint   解冻文件系统

2.       创建快照 rbd snap create pool/image@firstsnap

3.       查看快照 rbd snap  ls  pool/image

4.       回滚快照(先unmap取消映射) rbd  snap rollback pool/image@snap

5.       删除快照 rbd snap  rm  pool/image@snap

 


 

 

 

快照 COW 步骤在对象级别上运,不受对 RBD 镜像发出的写 I/O 请求⼤⼩的限制。

在有快照的RBD镜像中写⼊⼀个字节,则 Ceph 会将整个受影响的对象从RBD 镜像复制到快照区域

 

RBD克隆


RBD 克隆是 RBD 镜像的可读写副本,它将受保护的 RBD 快照基础镜像


 

RBD快照和克隆相同的数据会直接从父快照读取 - 对于客户端而言读取效率低下

                  COR读加速: COR在第一次读取时将对象复制到克隆

克隆管理

l  创建快照

p  rbd snap create pool/image@snapshot

l  保护快照

p  rbd snap protect pool/image@snapshot

l  使用受保护创建克隆

p  rbd clone pool/imagename@snapshotname pool/clonename

l  列出克隆镜像

p  rbd children [pool-name/]image-name@snapshot-name

l  将克隆镜像转换为独立镜像

p  rbd flatten [pool-name/]child-image-name

 

RBD导入导出

l  RBD的导出与导机制,可以在同集群中或另一套集群中拥有完整访问性的 RBD 镜像副本

l  RBD导入导出方式全量导入导出   增量导入导出

l  RBD导入导出应用场景:

p  实际的数据卷测试新版本

p  实际的数据卷运质量保障流程

p  实施业务连续性

p  将备份进程从产块设备分

 

全量导入导出

l  主集群全量导出

将正在使用的RBD镜像卸载

         rbd unmap pool-name/images

导出RBD镜像到文件

         rbd export file-name pool-name/images

 

从集群全量导入

准备存储池

    ceph osd pool create  demo

导入镜像到存储池

         rbd  import  file-name pool/images

增量导入导出

l  差异导出

p  导出从创建镜像到第一次快照之间的差异数据

n  rbd export-diff  pool/images@snap  file-name

p  导出镜像到第一次快照和第二次快照之间的差异数据

n  rbd export-diff   --from-snap pool/images@snap1  pool/images@snap2 file-name

l  差异导入

p  rbd import-diff   file-name   pool/images

第八章RBD镜像Mirror

镜像Mirror

l  Ceph采用的是强一致性同步模型,所有副本都必须完成写操作才算一次写入成功,一个请求需要异步返回再确认完成,如果副本在异地,网络延迟就会很大,拖垮整个集群的写性能。因此,Ceph集群很少有跨域部署的,也就缺乏异地容灾


镜像Mirror优缺点

l  优点:

p  当副本在异地的情况下,减少了单个集群不同节点间的数据写入延迟

p  减少本地集群或异地集群由于意外断电导致的数据丢失

l  缺点:

p  成本高昂

p  如果人为误操作删除镜像,则异地镜像也会被删除

RBD mirror流程

1.当接收到一个写入请求后,I/O会先写入主集群的Image Journal

2. Journal写入成功后,通知客户端

3.客户端得到响应后,开始写入image

4.备份集群的mirror进程发现主集群的Journal有更新后,从主集群的Journal读取数据,写入备份集群

5.备份集群写入成功后,会更新主集群Journal中的元数据,表示该I/OJournal已经同步完成 

6.主集群会定期检查,删除已经写入备份集群的Journal数据

7. Jewel版本中30s为一次工作周期


RBD Mirror特性

       Mirror模式:

       pool-mode(存储池模式)

       一个存储池内的所有镜像都会进行备份

       images-mode(镜像模式)

       只有指定镜像才会备份

       Mirror同步方式:

       单向同步

       -从同步 支持一对多

       双向同步

       -主同步 仅能一对一

单向同步


       当数据从主集群备份到备用集群的时候,rbd-mirror仅在备份集群运行

       可以配置多个从集群

单向同步配置-池模式

l     主集群操作步骤:

p  创建rbd存储池

n  ceph osd pool create pool01

p  创建镜像并开启日志和排它锁特性

n   rbd create pool01/image1 --image-feature exclusive-lock,journaling --size 1024

p  开启池Mirror模式

n   rbd mirror pool enable rbd pool

p  对同伴集群做互信并导出互信秘钥

n  rbd mirror pool peer bootstrap create --site-name prod pool01 > /root/prod

  site-name 指定集群的站点名称 prod

  pool01 存储池名称

l  从集群操作步骤:

p  创建rbd存储池

n  ceph osd pool create pool01(池的名字)

p  安装rbd mirror

n  ceph orch apply  rbd-mirror placement=serverf.lab.example.com

p  导入同伴集群授信key

n  rbd mirror  pool peer bootstrap import --site-name backup --direction rx-only pool01  /root/prod

p  查看同步信息

n  rbd mirror pool info pool01 查看存储池的同步信息

n  rbd mirror pool status  pool01 查看存储池的同步状态(从集群上操作)

n  rbd mirror pool peer remove 存储池名 UUID 删除互信关系停止Mirror

        

双向同步


 

       如果两个集群互为备份的时候,rbd-mirror需要在两个集群上都运行

       只能在两个集群之间运行

       主集群操作步骤:

       创建rbd存储池

       ceph osd pool create pool01

       创建镜像并开启日志和排它锁特性

        rbd create pool01/image1 --image-feature exclusive-lock,journaling --size 1024

       开启池Mirror模式

        rbd mirror pool enable rbd pool

       安装rbd mirror rbd-mirror placement=serverc.lab.example.com

       ceph orch apply

       对同伴集群做互信并导出互信秘钥

       rbd mirror pool peer bootstrap create --site-name prod pool01 > /root/prod

       从集群操作步骤:

       创建rbd存储池

       ceph osd pool create pool01(池的名字)

       安装rbd mirror

       ceph orch apply  rbd-mirror placement=serverf.lab.example.com

       导入同伴集群授信key

       rbd mirror  pool peer bootstrap import --site-name backup --direction rx-tx pool01  /root/prod

RBD镜像故障转移

       正常关机故障转移

       1. 关掉所有正在使用的主image客户端

       2. 将主集群的主image降级

       3. backup集群的主image升级

       4. 重新让客户端连接新的主image

       非正常关机故障转移

       1. 确认主集群异常无法进行正常操作

       2. 停止所有使用主image的客户端

       3. backup集群的非主状态的image升级为主image,需要使用--force选项

       4. 重新让客户端连接新的主image

       镜像主备提升

  rbd mirror image demote test1  # 先将主镜像降级

  rbd mirror image promote test1 # 再将备镜像提升为主

第九章ceph对象存储

对象存储介绍

l  对象存储将数据存储为离散项,每项即为个对象。与件系统中的件不同,对象不会整理到 录和⼦⽬录组成的树中,是存储在扁平的命名空间中。每个对象通过使对象的唯对象 ID(也称对象密钥)来检索

l  对象存储不会使用普通的文件系统来访问对象数据,而是通过RESET API来发送和接收对象

l  Ceph支持使用Amazon S3(简单存储服务)和 OpenStack Swift API来进行访问

l  对象存储中的对象不整理到目录树中,而是存储在扁平的命名空间中,Amazon S3将这个扁平命名空间称为bucket。而swift则将其称为容器,ceph中常用存储桶来进行命名

l  无论是存储桶,还是容器都无法进行嵌套

l  bucket需要被授权才能访问到,一个帐户可以对多个bucket授权,而权限可以不同

l  对象存储的优点:易扩展、快速检索

 

RGW网关介绍


1.       RADOS网关也称为Ceph对象网关、RADOSGWRGW,是一种服务,使客户端能够利用标准对象存储API来访问Ceph集群。它支持S3Swift API

2.       rgw运行于librados之上,事实上就是一个称之为Beastweb服务器来响应api请求

3.       客户端使用标准apirgw通信,而rgw则使用libradosceph集群通信

rgw客户端通过s3或者swift api使用rgw用户进行身份验证。然后rgw网关代表用户利用cephxceph存储进行身份验证

RGW名词概念

l  realm

p  一个realm代表了全局唯一的命名空间,这个命名空间由一个或者多个zonegroupzonegroup可以包含一个或多个zonezone包含了桶,桶里包含依次存放的对象

p  每个realm都有与之对应period,每个period及时地代表了zonegroup的状态和zone的配置。每次需要对zonegroup或者zone做修改的时,需要更新period,并提交

l  zone group

p  ceph支持多zonegroup,每个zonegroup由一个或多个zone组成。在相同的realm中,在同一个zonegroup中的对象共享一个全局命名空间,在跨zonegroupzone中具有唯一的对象ID

l  zone

p  realm配置是由一个zonegroup和多zone组成,每个zone是由一个或者多个rgw组成。每个zone由自身的ceph集群支撑。在一个zonegroup中,多zone可以提供容灾能力


部署RGW网关

l  创建realm,设置成默认的realm

p  radosgw-admin realm create --rgw-realm=myrealm --default

l  创建zonegroup,指定realm

p  radosgw-admin zonegroup create --rgw-realm=myrealm --rgw-zonegroup=myzonegroup  --master --default

l  创建zone,指定zonegrouprealm

p  radosgw-admin zone create --rgw-realm=myrealm --rgw-zonegroup=myzonegroup --rgw-zone=myzone --master --default

l  提交修改

p  radosgw-admin period update --rgw-realm=myrealm --commit

l  创建rgw

p  ceph orch apply rgw test --realm=myrealm --zone=myzone --placement="2 serverc.lab.example.com serverd.lab.example.com" --port=8080

l  查看rgw服务和进程

p  ceph orch ps 查看进程daemon

p  ceph orch ls  查看service

p  ceph orch rm rgw.test

l  修改rgw个数和配置

p  ceph orch apply rgw test --realm=myrealm --zone=myzone --placement="4 serverc.lab.example.com serverd.lab.example.com" --port=8080

存储池作用

l  .rgw.root - 存储信息记录

l  default.rgw.control - 用作控制池

l  default.rgw.meta - 存储 user_keys 和其他关键元数据

l  default.rgw.log - 包含所有存储桶/容器和对象操作(如创建、读取和删除)的

l  default.rgw.buckets.index - 存储存储桶的索引

l  default.rgw.buckets.data - 存储存储桶数据

l  default.rgw.buckets.non-ec - 于多部分对象元数据上

用户管理

l  创建用户

p  radosgw-admin user create --uid=user1 --access-key=123 --secret=456 --email=user1@example.com --display-name=user1 创建s3用户

l  查询用户

p  radosgw-admin user info --uid=user1

l  修改用户

p  radosgw-admin user modify --uid=user1 --display-name='user1 li' --max-buckets=500

l  禁用或启用用户

p  radosgw-admin user suspend/enable --uid=user1

l  创建key

p  radosgw-admin user create/modify --uid=user1 --access-key=abc --secret=def

l  删除key

p  radosgw-admin key rm --uid=user1 --access-key=abc

l  自动生成key

p  radosgw-admin key create --uid=user1 --gen-access-key --gen-secret

设置配额

l  开启配额

p  radosgw-admin quota enable --quota-scope=user --uid=user1 用户配额

p  radosgw-admin quota enable --quota-scope=bucket --uid=user1 bucket 配额

l  设置配额

p  radosgw-admin quota set --quota-scope=user --uid=user1 --max-objects=1024 --max-size=1G

p  radosgw-admin quota set --quota-scope=bucket --uid=user1 --max-objects=1024 --max-size=1G

使用s3访问rgw

l  安装s3客户端

p  windows: S3 Browser

p  Linux:早期s3cmd à awscli  yum install awscli -y

n  YUM源地址:http://content.example.com/rhel8.4/x86_64/rhel8-additional/epel-8-for-x86_64-rpms

l  配置用户凭据

p  aws configure --profile=ceph 输入用户的aksk

 

 

l  创建桶

p  aws --profile=ceph --endpoint-url=http://serverc:8080 s3 mb s3://bucket1

l  上传对象

p  aws --profile=ceph --endpoint-url=http://serverc:8080 --acl=public-read-write  s3 cp /etc/passwd s3://bucket1/

l  测试下载

p  wget http://serverc:8080/bucket1/passwd

 

 

 

 

 

 

 


本文地址:https://liuchunjie.top/?id=542
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?