ceph 搭建(ceph 搭建 教程)

ceph 搭建(ceph 搭建 教程)Ceph 的架构哲学 每个组件必须是可扩展的 不存在单点故障 解决方案必须是基于软件的 开源的 适应力强的 可以运行在常规的硬件上 任何组件都是必须自我管理 下面是 Ceph 的整体架构图 RADOS 全称 Reliable Autonomic Distributed Object Store 是 Ceph 底层核心 提供了一个可靠 自动 智能的分布式存储 RADOS

大家好,我是讯享网,很高兴认识大家。



Ceph 的架构哲学:

  1. 每个组件必须是可扩展的。
  2. 不存在单点故障。
  3. 解决方案必须是基于软件的、开源的、适应力强的。
  4. 可以运行在常规的硬件上。
  5. 任何组件都是必须自我管理。

下面是 Ceph 的整体架构图:


讯享网

RADOS 全称 Reliable Autonomic Distributed Object Store,是Ceph底层核心,提供了一个可靠、自动、智能的分布式存储。 RADOS 本身就是一个完整的对象存储系统 ,实际上所有存储在Ceph中的用户数据都是由这一层来存储的。 Ceph 的高可高、高扩展、高性能、自动化等特性实际上也是这一层来提供的。 RADOS 在物理上由大量存储设备节点组成,每个节点拥有自己的CPU、内存、磁盘、网络等硬件资源,并运行着自己的操作系统和文件系统。 在逻辑上 RADOS 由少量 MON 和大规模 OSD 组成。

即 Monitor, 是Ceph集群的监控器,负责维护整个集群的健康状态,提供一致性决策。

Ceph 最底层的存储单元是 Object 对象, 大小一般默认为 4MB ,你也可以在创建块设备或者的时候根据需求设置自定义大小。 Ceph OSD 在扁平的命名空间内把所有数据存储为对象(也就是没有目录层次)。

对象的结构:

  1. 对象标志(ID):唯一标识一个对象。
  2. 对象的数据:其在本地文件系统中对应一个文件,对象的数据就保存在文件中。
  3. 对象的元数据:以(键值对)的形式,可以保存在文件对应的扩展属性中。

对象存储设备,主要功能是存储数据、处理数据的复制、回复、平衡数据分布。 一个Ceph存储集群至少需要两个 OSD 以达到的健康状态、并默认为数据保存两份副本。 Ceph 集群节点上的每个磁盘、分区都可以成为一个OSD。

关系说明:

  1. 一个OSD上可以分布多个 PG
  2. OSD设备是存储 Object 的载体

PG 是 OSD之上的一层逻辑,可视其为一个逻辑概念。Ceph 把对象映射到 PG 中。 从名字可理解 PG 是一个放置策略组,很多个对象一起组团,然后再存入 OSD 中,用来方便定位和追踪对象。 因为一个拥有数百万对象的系统,不可能在对象这一级追踪位置。

可以把 PG 看做一个对象集合,该集合里的所有对象都具有相同的放置策略:对象的副本都分布在相同的 OSD 列表上。

PG 减少了各对象存入对应 OSD 时的元数据数量,更多的 PG 使得均衡更好。

关系说明:

  1. PG有主从之分,对于多副本而言,一个PG的主从副本分布在不同的OSD上;
  2. 一个对象只能属于一个PG,一个PG包含很多个对象
  3. 一个PG对应于一个OSD列表,PG的所有对象对存放在对应的OSD列表上

Pool 是一个抽象的存储池,它是 PG 之上的一层逻辑。所有的对象都必须存在存储池中。 存储池管理着归置组数量、副本数量、和存储池规则集。要往存储池里存数据,用户必须通过认证、且权限合适,存储池可做快照。

你可以这样粗略的理解:如果把整个 Ceph 存储系统看做是一个数据库的话,那么的角色可以看做是数据表。用户可能需要根据不同的 需求把对象存储在不同的存储池中。

关系说明:

  1. 一个 Pool 由多个 PG 构成,一个 PG 只能属于一个 Pool。
  2. 同一个 Pool 中的 PG 具有相同的类型,比如,如 Pool 为副本类型,则 Pool 中所有的 PG 都是多副本的。

PG 的归置组:

  1. PGP 起到对 PG 进行归置的作用;
  2. PGP的取值应该与PG相同,在PG的值增大的同时,也要增大PGP的值以保持二者的值相同;
  3. 当一个 Pool 的 PG 增大后,Ceph 并不会开始进行,只有在 PGP 的值增大后, PG才会开始迁移至其他的OSD上,并且开始。

全称 MetaData Server,保存Ceph 文件系统的元数据,为基于POSIX文件系统的用户提供了一些基础命令如ls等。 如果需要使用 CephFS, 则必须启动 MDS 服务。 整个 CephFS 的元数据都是实时同步的,所以能否很方便的实现 CephFS 的共享挂载,弥补了Ceph 的块设备接口在共享性方面的不足。

Librados是Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的,目前提供PHP、Ruby、Java、Python、C和C++支持。

CRUSH是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。 CRUSH 算法通过计算数据存储位置来确定如何存储和检索。 CRUSH 授权 Ceph 客户端直接连接 OSD ,而非通过一个中央服务器或经纪人。 数据存储、检索算法的使用,使 Ceph 避免了单点故障、性能瓶颈、和伸缩的物理限制。

通过 Linux 内核客户端或QEMU/KVM驱动提供一个完全的分布式块设备。

RBD 镜像是基于存储池构建的逻辑存储系统,RBD 镜像通过librbd及RADOS映射到对象(rados对象),然后利用Crush计算来定位在存储设备中的位置。

基于HTTP REST协议的网关,兼容Amazon S3 API和OpenStack Swift API。

通过 Linux 内核客户端或提供一个兼容的文件系统。

ceph 文件系统是基于元数据存储池和数据存储池构建的逻辑系统, 文件系统中的文件会通过 libcephfs 及 RADOS 映射到对象(rados对象),然后利用 Crush 计算来定位在存储设备中的位置。

首先看下 Ceph 整体架构图简图:

默认每个主 OSD 都携带两个副本。有效存储比例为 3:1 。 在写入的时候也是先写入到主分区(Primary OSD),然后在自动同步到副本(Replicate OSD)。

写入数据步骤

如果是读取数据的话,步骤 4 直接读取数据返回。后面的步骤都不执行了。

如果新加入的 OSD1 取代了原有的 OSD4 成为 Primary OSD, 由于 OSD1 上未创建 PG , 不存在数据,那么 PG 上的 I/O 无法进行, 如下图所示:

此时的步骤如下:

  1. 计算映射(假设 File 为用户要读写的文件)得到 oid(object id)[oid = ino + ono]
    • ino : File 的元数据序列号,File的唯一id。
    • ono : File 切分产生的某个 object 的序号,默认以4M切分一个块大小。
  2. Object 是 RADOS需要的对象。Ceph指定一个静态hash函数计算oid的值,将oid映射成一个近似均匀分布的伪随机值, 然后和mask按位相与,得到pgid。映射:
    • hash(oid) & mask-> pgid 。
    • mask = PG总数m(m为2的整数幂)-1 。
  3. PG 用途是对object的存储进行组织和位置映射。一个 PG 里面会有很多 Object。采用CRUSH算法,将pgid代入其中, 然后得到一组OSD。映射:[CRUSH(pgid)->(osd1,osd2,osd3)]

步骤:

客户端写数据osd过程:

  1. 采用的是librbd的形式,使用librbd创建一个块设备,向这个块设备中写入数据。
  2. 在客户端本地同过调用librados接口,然后经过pool,rbd,object、pg进行层层映射,在PG这一层中, 可以知道数据保存在哪3个OSD上,这3个OSD分为主从的关系。
  3. 客户端与primay OSD 建立socket 通信,将要写入的数据传给primary OSD,由primary OSD再将数据发送给其他replica OSD数据节点。

  1. pool是ceph存储数据时的逻辑分区,它起到 namespace 的作用。
  2. Ceph 集群搭建成之后,会有一个默认的 RBD pool。
  3. 每个pool包含一定数量(可配置)的PG。
  4. PG里的对象被映射到不同的Object上。
  5. pool 是分布到整个集群的,RBD pool 和 CephFS 的 pool 并没有隔离。
  6. pool可以做故障隔离域,根据不同的用户场景不一进行隔离。

场景模拟:现状3个OSD, 4个PG, 扩容到4个OSD, 4个PG

扩容前:

扩容后:

注:这里采用163源,也可以采用阿里云源:如:http://mirrors.aliyun.com/ubuntu,替换方式vim快捷键Shift +:号-Shift +% 然后输入%s#http://mirrors.163.com/ubuntu#http://mirrors.aliyun.com/ubuntu#g回车键后保存即可。

注意:采用后向引用并且保存原配置文件生成新配置文件

所有节点都要执行,确保时间同步(这一点非常重要)

根据我们上面的配置,选择 ceph1 节点作为 admin 节点,所以需要安装在 ceph-admin节点。

首先配置 key

注意:上面的 是指你要安装的 ceph 发行版本,我们这里是选择的是 ,如果你需要更改其他版本,把替换成其他版本就行了。

创建ceph集群遇见以下报错:

问题1 、[ceph_deploy][ERROR ] RuntimeError: AttributeError: module ‘platform’ has no attribute ‘linux_distribution’

解决办法安装python3-pip

然后执行,安装中网络问题无法安装,多尝试几次即可。

注意:–no-adjust-repos参数市直接使用本地源,不使用官方默认源。

部署Monitor集群服务

初始化并部署monitor,收集所有密钥

解决办法:

部署mds(管理节点执行:ceph-admin)

创建存储池:

创建元数据池:

设置副本数:

查询副本数:

启动cephfs:

例子:

说明:根据实际情况设置存储pg_num数量与pgp_num

设置副本数:

查看副本数:

客户端挂载 cephfs 有两种方式,和

  • fuse 客户端最容易与服务器做到代码级的同步,但是内核客户端的性能通常更好。
  • 这两种客户端不一定会提供一样的功能,如 fuse 客户端可支持客户端强制配额,但内核客户端却不支持。
  • 遇到缺陷或性能问题时,最好试试另一个客户端,以甄别此缺陷是否特定于客户端

1.内核挂载

默认ceph是启用cephx认证功能,所以我们需要先导出认证keyring:

拿到keyring之后直接挂载:

当然你也可以关闭认证,直接修改文件,将改成:

这时候就可以直接挂载了:

这里的是服务运行的节点 IP,这里也可以直接换成 ceph-node1

设置开机自动挂载:

先保存keyring到文件

修改/etc/fstab,追加:

注意:设置开机挂载客户端需要安装:ceph-common

先安装挂载工具

拷贝配置文件ceph.conf

设置开机自动挂载

同样需要将存储节点的 admin 秘钥拷贝到本地,参考上文。

然后修改文件,加入:

例如:

注意:ceph-node1换成实际使用IP即可。

文章参考:

此片文章原文如下,做为自己总结使用。感谢以上两篇作者

https://www.r9it.com/20200216/cephfs.html

https://dev.to/jmarhee/solving-module-platform-has-no-attribute-linuxdistribution-for-ceph-deploy-with-python-3-8-3fbl

https://blog.csdn.net/renlixing87/article/details/

小讯
上一篇 2025-04-28 11:06
下一篇 2025-06-09 18:17

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/145138.html