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

ceph存储原理

什么是ceph

Ceph 是一个开源的分布式存储系统,它的原理涉及数据存储、数据分布、数据冗余和故障恢复等多个方面,下面为你详细介绍:

数据存储模型

Ceph 采用对象存储作为基础存储模型。在 Ceph 中,所有数据都被抽象为对象(Object)。每个对象包含数据本身以及与之关联的元数据,元数据描述了对象的属性,如大小、创建时间、访问权限等。对象被存储在对象存储设备(OSD)上,OSD 是实际负责存储和管理数据的物理节点或逻辑单元。

数据分布机制

  • 集群映射(Cluster Map):Ceph 通过集群映射来记录集群的状态信息,包括所有 OSD 的状态、监视器(Monitor)的位置、数据的分布规则等。集群映射会随着集群的变化(如节点加入、离开或故障)而动态更新,并在所有参与节点间同步。
  • 一致性哈希与 CRUSH 算法:Ceph 使用基于一致性哈希改进的 CRUSH(Controlled Replication Under Scalable Hashing)算法来确定数据对象的存储位置。CRUSH 算法根据集群映射和用户指定的存储策略(如副本数量、存储位置限制等),计算出对象应该存储在哪些 OSD 上。这样做的好处是,当集群规模发生变化时,只需要对少量数据进行迁移,减少了数据的移动量,提高了系统的可扩展性和稳定性。

数据冗余与恢复

  • 数据副本策略:为了保证数据的可靠性,Ceph 支持数据副本机制。用户可以根据需求指定数据的副本数量,默认情况下通常为 3 份。CRUSH 算法会将数据副本分散存储在不同的 OSD 上,甚至不同的物理节点或机架上,以避免单点故障。
  • 自动故障检测与恢复:Ceph 的监视器(Monitor)会实时监控集群中各个 OSD 的状态。当检测到某个 OSD 出现故障时,Ceph 会自动启动数据恢复流程。它会根据集群映射和副本信息,从其他正常的 OSD 上复制数据到新的 OSD 上,以保证数据的副本数量达到用户指定的要求。同时,Ceph 会在后台对数据进行一致性检查和修复,确保数据的完整性。

元数据管理

  • 文件系统元数据(MDS):在提供文件系统接口时,Ceph 使用元数据服务器(MDS)来管理文件系统的元数据,如文件目录结构、文件权限、文件与对象的映射关系等。MDS 将元数据与实际数据分离存储,使得文件系统的操作更加高效。客户端在访问文件时,首先与 MDS 进行交互,获取文件的元数据信息,然后再根据元数据与相应的 OSD 进行数据读写操作。
  • 对象存储元数据:对于对象存储,元数据直接与对象关联并存储在 OSD 上。每个对象的元数据包含了对象的基本信息,如对象 ID、大小、创建时间等。这些元数据可以帮助 OSD 快速定位和管理对象。

客户端访问

Ceph 提供了多种客户端接口,包括对象存储接口(如 S3、Swift)、块存储接口(如 iSCSI)和文件系统接口(如 CephFS)。客户端通过这些接口与 Ceph 集群进行交互。当客户端发起读写请求时,它会先与 Ceph 的监视器或元数据服务器进行通信,获取数据的存储位置信息,然后直接与相应的 OSD 进行数据传输,避免了中间节点的性能瓶颈,提高了数据访问的效率。

ceph搭建方式和步骤

1. 环境准备

  • 硬件要求:至少需要 3 台服务器,每台服务器都要有可用的硬盘用于存储数据。同时,服务器需要具备足够的内存和 CPU 资源,以保障 Ceph 服务的正常运行。
  • 软件要求:所有服务器需安装相同版本的 Linux 操作系统,例如 Ubuntu 20.04 或者 CentOS 8。并且要确保服务器之间能够通过网络相互通信,防火墙已正确配置,允许 Ceph 服务所需的端口通过。

2. 安装必要的软件包

在每台服务器上,根据不同的操作系统,使用以下命令安装必要的软件包:

Ubuntu 系统

bash

sudo apt update
sudo apt install -y ceph-deploy
CentOS 系统

bash

sudo yum install -y ceph-deploy

3. 创建部署目录

在其中一台服务器上创建一个用于 Ceph 部署的目录,并进入该目录:

bash

mkdir ceph-cluster
cd ceph-cluster

4. 配置主机名和 SSH 免密登录

  • 配置主机名:在每台服务器上,使用hostnamectl命令设置主机名,并将主机名和对应的 IP 地址添加到/etc/hosts文件中,确保服务器之间可以通过主机名进行通信。
  • SSH 免密登录:在部署节点上生成 SSH 密钥对,并将公钥分发到其他所有服务器上,实现 SSH 免密登录。

bash

ssh-keygen
ssh-copy-id username@server_ip

这里的username是服务器的用户名,server_ip是服务器的 IP 地址。

5. 初始化 Ceph 部署

在部署目录中,使用ceph-deploy工具初始化 Ceph 部署:

bash

ceph-deploy new node1 node2 node3

这里的node1node2node3是你的服务器主机名。

6. 编辑 Ceph 配置文件

打开生成的ceph.conf文件,根据需求进行配置,例如设置集群的副本数、存储池的大小等。以下是一个简单的配置示例:

ini

[global]
fsid = <uuid>
mon_initial_members = node1, node2, node3
mon_host = <node1_ip>,<node2_ip>,<node3_ip>
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_pool_default_size = 3

需要将<uuid>替换为一个唯一的 UUID,可以使用uuidgen命令生成;<node1_ip><node2_ip><node3_ip>替换为对应的服务器 IP 地址。

7. 安装 Ceph 软件

使用ceph-deploy工具在所有服务器上安装 Ceph 软件:

bash

ceph-deploy install node1 node2 node3

8. 部署监视器(Monitor)

在指定的服务器上部署 Ceph 监视器:

bash

ceph-deploy mon create-initial

9. 准备 OSD(对象存储设备)

在每台服务器上,选择要用于 Ceph 存储的硬盘,并对其进行分区和格式化:

bash

ceph-deploy osd prepare node1:/dev/sdb node2:/dev/sdb node3:/dev/sdb

这里的/dev/sdb是要使用的硬盘设备名,根据实际情况进行修改。

10. 激活 OSD

准备好 OSD 后,激活它们:

bash

ceph-deploy osd activate node1:/dev/sdb1 node2:/dev/sdb1 node3:/dev/sdb1

这里的/dev/sdb1是之前分区后的设备名。

11. 验证 Ceph 集群

使用以下命令验证 Ceph 集群是否正常运行:

bash

ceph -s

如果集群正常运行,你将看到集群的状态信息,包括监视器状态、OSD 状态、存储池信息等。

12. 创建存储池和用户

创建一个存储池用于存储数据,并创建一个用户用于访问存储池:

bash

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

这里的mypool是存储池的名称,myuser是用户的名称。

通过以上步骤,你就可以成功搭建一个 Ceph 集群。在实际使用中,你可以根据具体需求对 Ceph 集群进行进一步的配置和优化。

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

相关文章:

  • 人格伤疤测试:发现内心深处的情感创伤
  • 【今日三题】kotori和气球(排列) / 走迷宫(BFS最短路) / 主持人调度(二)(贪心+优先级队列)
  • 服务端字符过滤 与 SQL PDO防注入
  • [C语言]猜数字游戏
  • 软件系统容量管理:反模式剖析与模式应用
  • 什么是环境变量,main函数的命令行参数的概念和作用,以及进程地址空间详解
  • antd中的表格穿梭框(Transfer)如何使用
  • 类和对象 (拷贝构造函数和运算符重载)上
  • MySQL学习总结
  • 华锐视点历经十八年沉淀所形成的产品特性
  • 【AI平台】n8n入门4:n8n云创建工作流(无须搭建,快速试用14天)
  • TypeScript 全局类型声明文件规范性分析与归纳
  • 赛事季突围!备战2025全国信息素养大赛 python挑战赛~
  • JavaScript 相关知识点整理
  • 【LLM】Qwen3模型训练和推理
  • Proser:重新介绍
  • Linux(权限管理)
  • FastAPI的发展历史
  • 在VMware上创建Ubuntu虚拟机,与Xshell和Xftp的连接和使用
  • 文心一言开发指南08——千帆大模型平台推理服务API
  • 9.idea中创建springboot项目_jdk1.8
  • 无需下载,免费在线AI音乐生成器:爱狐AI详解与使用
  • C# 继承详解
  • LangChain4j +DeepSeek大模型应用开发——5 持久化聊天记忆 Persistence
  • 问题整理篇---(1)keil
  • Linux查看程序端口占用情况
  • Kubernetes in action-Kubernetes的pod
  • 使用Python将YOLO数据集拆分成固定文件数量的小数据集
  • Mixture-of-Experts(MoE)原理与在DeepSeek中的应用
  • HOOPS 2025全面适配Linux ARM64:性能突破、能耗优化与工业3D可视化部署场景全解析!