当前位置: 首页 > ds >正文

Ceph 原理与集群配置

一、Ceph 工作原理

1.1.为什么学习 Ceph?

在学习了 NFS 存储之后,我们仍然需要学习 Ceph 存储。这主要是因为不同的存储系统适用于不同的场景,NFS 虽然有其适用之处,但也存在一定的局限性。而 Ceph 能够满足现代分布式、大规模、高可靠存储架构的要求。

NFS 主要适用于简单文件共享的轻量场景,它就像是一个小型的共享仓库,适合几个人或者小团队之间简单地共享一些文件。但当我们面临大规模的数据存储、需要高度可靠的数据保护以及分布式的存储架构时,NFS 就显得力不从心了。

Ceph 则解决了大规模、高可靠、分布式存储的复杂需求。在现代数据密集型业务中,如云计算、大数据、AI 等领域,数据量巨大且对存储的可靠性和扩展性要求极高。学习 Ceph 可以让我们掌握应对这些复杂场景的核心技术,弥补 NFS 在扩展性、功能丰富度、可靠性上的不足,使我们能够适应技术发展的趋势。

1.2.什么是 Ceph⭐

Ceph 是实现优性能、可靠性、可扩展性存储系统,具有 “统一的” 和 “分布式” 两大特性:

  • “统一的”:Ceph 一套存储系统可同时提供对象存储、块存储、文件系统存储三种功能。

  • “分布式”:Ceph 是无中心结构,无中心结构就是 Ceph 集群,无论访问集群中的哪一个节点,都能访问整个 Ceph 结构,理论上具备无限可扩展性

1.3.Ceph 系统层次⭐

自下而上,四个层次

  • RADOS:基础存储系统(可靠的、自动化的、分布式的对象存储)

    • Cluster map:它是记录全局系统状态的数据结构,由以下两个部分组成:

      • OSD:数量众多,是数据存储和维护的核心。本质上,它是安装了操作系统和文件系统的计算机,每个 OSD 拥有自己的 OSD deamon,用于完成 OSD 的逻辑功能。同时,它还会与 Monitor 以及其他 OSD 进行通信,以完成数据的存储和维护。可以把 OSD 想象成一个个具体的小仓库,负责实际存放货物(数据)。

      • Monitor:主要负责状态检测和维护。它就像仓库的管理员,时刻关注着各个小仓库(OSD)的状态,确保整个仓库网络的正常运行。

  • LIBRADOS:基础库,为上层应用提供了访问 RADOS 的接口。可以把它看作是连接上层应用和底层存储系统的桥梁。

  • RADOS GW、RBD、Ceph FS:高层应用接口,分别对应对象存储、块存储和文件系统存储的接口。不同的应用可以通过这些接口来使用 Ceph 提供的不同存储功能。

  • 应用层:使用 Ceph 存储服务的各种应用程序。

1.4.寻址流程⭐

Ceph 通过三次映射实现了从文件到底层存储设备的高效、可靠寻址,具体如下:

  • File(文件)→ Object(对象)映射:将用户操作的文件切分成固定大小(由 RADOS 限定,如 2MB 或 4MB)的对象。这样做有两个好处:一是让大小不限的文件变为易于 RADOS 管理的统一尺寸对象,就像把不同大小的货物打包成统一规格的箱子;二是将对单一文件的串行处理转换为对多个对象的并行处理,提升了效率。

  • Object(对象)→ PG(归置组)映射:通过哈希算法将对象映射到 PG。一个对象只能映射到一个 PG,而一个 PG 可管理多个对象(如数千个甚至更多),实现对对象存储的逻辑组织。可以把 PG 看作是一个个货架,对象就像放在货架上的商品。

  • PG(归置组)→ OSD(对象存储设备)映射:利用 CRUSH 算法,将 PG 以多副本(通常为 3 副本)形式映射到不同的 OSD 上。这样每个 PG 的数据会分布到多个 OSD 存储,实现数据冗余备份、高可用及负载均衡,确保系统的可靠性和稳定性。就像把货架上的商品复制多份,分别存放在不同的小仓库中,即使某个小仓库出现问题,也不会影响商品的正常使用。

1.5.数据写入流程

Ceph 数据写入流程基于三次映射(File → Object → PG → OSD),具体如下:

  1. File 切片为 Object:用户写入的文件先被切分为固定大小的 Object(如 4MB),这是 Ceph 存储的最小单元,便于管理和并行操作。

  2. 确定存储位置:通过哈希 HASH 算法将 Object 映射到 PG(归置组),再利用 CRUSH 算法根据集群拓扑(如机架、机房等)将 PG 映射到多个 OSD(通常为 3 个,形成三副本)。这样可以确保数据的安全性和可靠性。

  3. 客户端与 OSD 通信

    • 客户端通过 CRUSH 算法知道目标 OSD(包含主 OSD 和从 OSD),将数据发送给主 OSD。

    • 主 OSD 接收数据后,会将数据同步到从 OSD。

    • 当所有从 OSD 成功接收数据并向主 OSD 确认后,主 OSD 才将数据持久化写入本地,并向客户端返回写入成功的确认。

 

1.6.集群维护

  • 在 Ceph 集群维护中,Monitor 负责汇总集群状态并形成 cluster map,随后将其扩散至所有 OSD 和 Client。OSD 利用 cluster map 进行数据维护,Client 借助 cluster map 实现数据寻址。

  • 需注意的是,Monitor 不会主动轮询 OSD 状态,而是由 OSD 主动向 Monitor 上报自身状态(如新增 OSD 加入集群,或检测到自身 / 其他 OSD 异常时)。

  • Monitor 收到上报信息后更新 cluster map 并再次扩散,确保集群内各组件掌握最新的集群状态,保障 Ceph 集群的正常运行与数据处理。

  • 简言之,通过 “OSD 主动上报状态 → Monitor 汇总更新 cluster map → 扩散至全体 OSD 和 Client” 的流程,实现集群状态的同步与维护,支撑 OSD 和 Client 的数据操作。

 

1.7.新增 OSD

新增 OSD:

  • 首先与 monitor 通信,monitor 将其加入 cluster map,设置状态 up 或者 out,将最终版的 cluster map 发给 OSD。

  • (新增 OSD 就像是在仓库网络中添加一个新的小仓库,需要先告知管理员(Monitor),管理员将其信息记录到仓库地图(cluster map)中,并设置其状态,然后将更新后的地图发给其他小仓库(OSD))

恢复 OSD:

  • Ceph 的自动化故障恢复指当 OSD 故障时,系统自动检测并通过 CRUSH 算法将故障节点上的数据副本重新分布到其他正常 OSD 上以维持副本数,故障节点修复后自动纳入集群并重新平衡数据,全程无需人工干预。

  • (这就像当某个小仓库出现问题时,系统会自动将里面的货物转移到其他小仓库,等这个小仓库修好后,再将货物重新分配回来)

负载均衡 OSD:

  • 新 OSD 替换旧 OSD,复制换数据后,新 OSD 被置为 up 且 in 状态,旧 OSD 退出该 PG,cluster map 数据更新。

  • (这就像用一个新的小仓库替换旧的小仓库,将旧仓库里的货物复制到新仓库,然后让旧仓库退出相应的货架管理,同时更新仓库地图)

自动化故障探测:

  • OSD 走动监测状态,包括自身问题和其他 OSD 问题,自动上报 monitor,monitor 把有问题 OSD 状态设置为 down 且 in,如果不能自动恢复则设置为 down 且 out,如果能自动恢复则设置为 up 且 in。

  • (这就像每个小仓库都有一个自我检测装置,发现问题后会及时告知管理员,管理员根据情况对小仓库的状态进行调整)

 


 

二、配置 Ceph 集群

  • 配置要求

    • 硬件要求:RHEL 9 三台主机,每台主机需要 4G 内存,并添加两块 50G 硬盘。

    • 系统设置:关闭防火墙、SELinux,以避免对 Ceph 集群的通信和运行造成干扰。

 

2.1.准备工作

配置 hosts 解析。

目的:是为了让各个主机能够通过主机名相互识别和通信,就像给每个小仓库都取了一个容易记住的名字,方便大家交流。

cat >> /etc/hosts << EOF
192.168.67.121 ceph-master
192.168.67.122 ceph-node1
192.168.67.123 ceph-node2
EOF

时间同步,因为 Ceph 时间要求同步到 0.05s 之内,所以对时间要求很严格。

时间同步对于 Ceph 集群非常重要,因为各个组件之间的通信和数据处理需要基于统一的时间标准。如果时间不同步,可能会导致数据不一致、状态判断错误等问题。

yum install bash-completion vim tree psmisc wget tar net-tools lrzsz -y
yum install chrony -y
​
sed -i 's/^pool.*/pool ntp1.aliyun.com iburst/g' /etc/chrony.confsystemctl enable --now chronyd
systemctl restart chronyd
​
chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 120.25.115.20                 2   6    33     5  -1993ns[ -126us] +/-   17ms

 

2.2.cephadm 配置 Ceph

2.2.1.安装 docker-ce

安装 Docker-ce 是为了构建 Docker 软件仓库,用于下载 Docker。Docker 可以为 Ceph 组件提供一个隔离的运行环境,避免本地环境依赖问题。

cat >> /etc/yum.repos.d/docker.repo << EOF
[docker]
name=docker
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/rhel/9.3/x86_64/stable/
gpgcheck=0
EOF

安装 Docker-ce。

yum install docker-ce -y

配置 Docker 加速器。

cat >> /etc/docker/daemon.json << EOF
{"registry-mirrors": ["https://docker.m.daocloud.io","https://hub-mirror.c.163.com","https://mirror.baidubce.com","https://docker.nju.edu.cn","https://register.liberx.info","https://mirror.ccs.tencentyun.com","https://2i1r7dqv.mirror.aliyuncs.com"]
}
EOF

 

2.2.2.安装 cephadm

准备 ceph 的 yum 源,以便后续安装 cephadm。

cat >> /etc/yum.repos.d/ceph.repo << EOF
[ceph]
name=ceph x86_64
baseurl=https://mirrors.aliyun.com/ceph/rpm-squid/el9/x86_64
enabled=1
gpgcheck=0
[ceph-noarch]
name=ceph noarch
baseurl=https://mirrors.aliyun.com/ceph/rpm-squid/el9/noarch
enabled=1
gpgcheck=0
[ceph-source]
name=ceph SRPMS
baseurl=https://mirrors.aliyun.com/ceph/rpm-squid/el9/SRPMS
enabled=1
gpgcheck=0
EOF

安装 Python3,因为 cephadm 依赖 Python3。

yum install python3 -y

在 ceph-master 主机上安装 cephadm(其他两台主机不需要安装)。

cephadm 是 Ceph 官方提供的集群管理工具,支持自动化部署、扩容、监控,仅需在管理节点(如 ceph-master)安装。

yum install cephadm -y

 

2.2.3.初始化 ceph 集群

在 ceph-master 主机上初始化 ceph 集群。

cephadm --docker bootstrap \
--mon-ip 192.168.67.121 \
--initial-dashboard-user admin \
--initial-dashboard-password redhat \
--dashboard-password-noupdate \
--allow-fqdn-hostname
  • --docker:使用 Docker 运行 Ceph 组件(mon、mgr 等),避免本地环境依赖问题。

  • --mon-ip:指定第一个 Monitor 节点的 IP(集群核心组件,负责维护集群状态)。Monitor 就像仓库的管理员,需要有一个固定的地址来进行管理和通信。

  • --initial-dashboard-user/password:设置 Web 管理界面(Ceph Dashboard)的初始登录凭证,方便我们通过 Web 界面来管理和监控 Ceph 集群。

  • --dashboard-password-noupdate:禁止 Dashboard 自动更新密码(生产环境可选)。

  • --allow-fqdn-hostname:允许使用主机名(非 IP)进行节点识别,兼容后续可能的 DNS 配置。

 

2.2.4.扩展 ceph 集群

集群扩容,拷贝公钥到 node 节点。

将 ceph-master 的 SSH 公钥(ceph.pub 由 cephadm 自动生成)添加到 node 节点,实现无密码登录,便于后续远程管理和部署 OSD 等组件。这就像给管理员一把万能钥匙,可以直接打开各个小仓库的门。

ssh-copy-id -f -i /etc/ceph/ceph.pub ceph-node1
ssh-copy-id -f -i /etc/ceph/ceph.pub ceph-node2

添加节点集群。

cephadm shell ceph orch host add ceph-node1
cephadm shell ceph orch host add ceph-node2
  • cephadm shell:进入 cephadm 命令行环境,获取集群管理权限。

  • ceph orch host add:将节点(ceph-node1/2)加入集群,以便后续分配 OSD、mon 等组件。这就像把新的小仓库加入到仓库网络中。

 

2.2.5.配置 ceph 集群

安装 ceph-common 的核心价值在于:

  1. 提供访问 Ceph 集群的必要工具(如 ceph、rbd 等命令)。

  2. 支持应用程序与 Ceph 集成(通过客户端库)。让其他应用程序能够方便地使用 Ceph 提供的存储服务。

  3. 简化集群配置与管理(自动加载配置文件、认证信息)。减少我们手动配置的工作量。

如果仅作为存储客户端(如挂载 CephFS 或使用 RBD 卷),ceph-common 是必需的;若作为集群管理员,则更依赖此包提供的完整工具链。

# 配置 epel 源
yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-9.noarch.rpm
# 安装 ceph-common
yum install ceph-common -y

添加 osd 磁盘设备。

为每个节点的两块硬盘(/dev/sdb、/dev/sdc)创建 OSD 服务,OSD 是 Ceph 的核心存储单元,负责实际数据的存储和管理。添加 OSD 就像在各个小仓库中增加更多的存储空间,以满足不断增长的数据存储需求。

ceph orch daemon add osd ceph-master:/dev/sdb
ceph orch daemon add osd ceph-master:/dev/sdc
ceph orch daemon add osd ceph-node1:/dev/sdb
ceph orch daemon add osd ceph-node1:/dev/sdc
ceph orch daemon add osd ceph-node2:/dev/sdb
ceph orch daemon add osd ceph-node2:/dev/sdc

设置管理节点。

标记 ceph-master 为管理节点(_admin 是 cephadm 的特殊标签),允许该节点执行集群管理操作(如修改配置、添加组件)。这就像指定一个仓库管理员,负责整个仓库网络的管理和协调工作。

ceph orch host label add ceph-master _admin

将 mon 和 mgr 组件部署到所有节点中(高可用性)。

ceph orch apply mon "ceph-master ceph-node1 ceph-node2"
ceph orch apply mgr --placement "ceph-master ceph-node1 ceph-node2"
  • 部署 Monitor 组件:在三个节点上部署 Monitor 组件,通过 Paxos 算法实现选举和状态同步(奇数个节点避免脑裂,确保高可用性)。Monitor 负责维护集群的状态信息,多个 Monitor 节点可以保证在某个节点出现故障时,集群仍然能够正常运行。

  • 部署 Manager 组件:在三个节点上部署 Manager 组件(Active-Standby 模式),负责集群监控、仪表盘管理、自动化策略执行,提升运维效率。Manager 就像一个智能的监控系统,实时监控集群的运行状态,并根据预设的策略进行自动化管理。

 

2.3.验证 ceph 集群状态

查看 ceph 健康状态。

[root@ceph-master ~]# ceph -scluster:id:     8bb910d6-2b1b-11f0-8725-000c292a6edehealth: HEALTH_OK       # 健康状态 OKservices:mon: 3 daemons, quorum ceph-master,ceph-node2,ceph-node1 (age 3m)   # 三个 monmgr: ceph-master.nobasm(active, since 7m), standbys: ceph-node2.femkkp, ceph-node1.rvdoat       # 三个 mgrosd: 6 osds: 6 up (since 93s), 6 in (since 112s)        # 六个 osddata:pools:   1 pools, 1 pgsobjects: 2 objects, 577 KiBusage:   161 MiB used, 300 GiB / 300 GiB avail      # osd 一共 300 GiBpgs:     1 active+clean

验证 ceph Web 页面(https://ip:8443)。

输入用户名和密码登录,显示如下界面即可。这可以让我们通过 Web 界面直观地管理和监控 Ceph 集群。

 

集成了 prometheus 并对接 grafna,(https://ip:3000)。

通过集成 prometheus 和 grafna,我们可以对 Ceph 集群进行更详细的监控和数据分析,及时发现和解决潜在的问题。

集群配置完毕。 

http://www.xdnf.cn/news/4675.html

相关文章:

  • 网络技术基础,NAT,桥接,交换机,路由器
  • 关于Stream
  • paddle ocr 或 rapid ocr umi ocr 只识别了图片的下部分内容 解决方案
  • 如何避免“救火式管理”消耗精力
  • EEG设备的「减法哲学」:Mentalab Explore如何用8通道重构高质量脑电信号?
  • C++20新特新——02特性的补充
  • 数字乡村综合管理与服务平台软件需求规格说明文档
  • Office365功能特点
  • vue3:十二、图形看板- 基础准备+首行列表项展示
  • MySQL基础关键_011_视图
  • MCU怎么运行深度学习模型
  • 跨境电商生死局:动态IP如何重塑数据生态与运营效率
  • 【PhysUnits】2.2 Scalar<T> 标量元组结构体(scalar/mod.rs)
  • 文章记单词 | 第66篇(六级)
  • 数据库 postgresql 修改密码 sh
  • 大模型赋能:2D 写实数字人开启实时交互新时代
  • 利用并行处理提高LabVIEW程序执行速度
  • 详解0-1背包的状态转移表
  • 前端实现文件下载
  • 案例分享 | 攻克ADAS开发测试难题,实现单元动态测试新突破
  • 力扣刷题Day 34:随机链表的复制(138)
  • MySQL大数据量查询优化
  • angular的cdk组件库
  • 苍穹外卖(订单状态定时处理、来单提醒和客户催单)
  • hadoop中的序列化和反序列化(4)
  • 快连LetsVPN安装指南
  • LeetCode20_有效的括号
  • 第2章 算法分析基础
  • 记录一下spring-cloud-starter-alibaba-nacos-config 2023.0.3.2与springboot版本及配置问题
  • 如何创建RDD