Ceph 存储池(Pool)详解

Ceph 的 存储池(Pool) 是逻辑存储单元,用于管理数据的分布、冗余和访问策略。它是 Ceph 存储集群的核心抽象,支持 对象存储(RGW)、块存储(RBD)和文件存储(CephFS)。以下是对象池的全面解析:


1. 存储池的核心概念

(1) 什么是存储池?

  • 逻辑分区:存储池是 Ceph 集群中的虚拟存储分区,类似传统存储的“卷”或“LUN”。
  • 数据隔离:不同池可配置不同的副本策略、纠删码(EC)规则、PG 数量等。
  • 多用途:一个 Ceph 集群可创建多个池,分别用于 RGW、RBD、CephFS 等。

(2) 存储池的关键属性

属性说明
pool_id池的唯一标识符,由 Monitor 分配。
pg_num归置组(PG)数量,影响数据分布均衡性。
pgp_num用于 CRUSH 计算的 PG 数量(通常等于 pg_num)。
size / min_size副本数(如 size=3 表示 3 副本)。
crush_rule定义数据分布规则(如跨机架、跨主机)。
erasure_code_profile纠删码配置(如 k=4,m=2)。
application标记池的用途(如 rbdrgwcephfs)。

2. 存储池的类型

(1) 副本池(Replicated Pool)

  • 特点:每个对象存储多份完整副本(默认 size=3)。
  • 优势:高可靠性,恢复速度快。
  • 适用场景:高性能块存储(RBD)、热数据对象存储。
  • 示例
    ceph osd pool create rbd_pool 128 128 replicated
    ceph osd pool application enable rbd_pool rbd
    

(2) 纠删码池(Erasure Coded Pool)

  • 特点:将对象拆分为 k 个数据块 + m 个校验块,空间利用率高(如 k=4,m=2 仅需 1.5x 空间)。
  • 劣势:恢复速度慢,计算开销大。
  • 适用场景:冷数据归档、低成本对象存储。
  • 示例
    ceph osd erasure-code-profile set ec_profile k=4 m=2
    ceph osd pool create ec_pool 128 128 erasure ec_profile
    

3. 存储池的底层机制

(1) 放置组(PG)

  • PG 的作用

    • 将对象分组管理,减少 CRUSH 计算开销。
    • 每个 PG 映射到一组 OSD(如 [osd.1, osd.5, osd.9])。
  • PG 数量公式

    pg_num = OSD总数 * 100 / 副本数或者纠删码k+m (结果取2的n次幂)

    • 例如:100 个 OSD、3 副本 → pg_num=1024

(2) CRUSH 规则

  • 定义数据分布策略
    • 控制 PG 如何映射到 OSD(如跨机架、跨主机)。
  • 示例规则
    ceph osd crush rule create-replicated replicated_rule default host
    

(3) 数据存储流程

  1. 客户端写入对象 → 计算 object_id 的哈希值 → 确定所属 PG。
  2. CRUSH 算法 根据 PG ID 和规则 → 选择目标 OSD 列表(如 3 副本)。
  3. 数据写入 OSD,元数据由 Monitor 记录。

4. 存储池的管理操作

(1) 创建与配置

# 创建副本池
ceph osd pool create my_pool 128 128 replicated# 创建纠删码池
ceph osd erasure-code-profile set ec_profile k=4 m=2
ceph osd pool create ec_pool 128 128 erasure ec_profile# 设置池属性
ceph osd pool set my_pool size 3     # 修改副本数
ceph osd pool set my_pool pg_num 256 # 调整 PG 数量

(2) 监控与统计

# 查看所有池
ceph osd pool ls [detail]# 查看池用量
ceph df# 查看 PG 分布
ceph pg dump | grep <pool-id>

(3) 删除与清理

# 删除池(需确认两次)
ceph osd pool delete my_pool my_pool --yes-i-really-really-mean-it# 清理残留数据
rados -p my_pool purge --yes-i-really-mean-it

5. 存储池的最佳实践

(1) PG 数量优化

  • 每个 OSD 承载约 100 PG(避免过多或过少)。
  • 使用 pg_autoscaler 自动调整:
    ceph mgr module enable pg_autoscaler
    ceph osd pool set my_pool pg_autoscale_mode on
    

(2) 性能调优

  • 副本池:优先使用 SSD 存储 WAL/DB 日志。
  • 纠删码池:为 EC 计算预留额外 CPU 核(每节点 2-4 核)。

(3) 故障域设计

  • 跨机架/主机分布
    ceph osd crush rule create-replicated replicated_rule default rack
    

6. 常见问题

Q1: 池的 PG 数量设置错误如何修复?

  • 扩容 PG
    ceph osd pool set my_pool pg_num 256
    ceph osd pool set my_pool pgp_num 256
    
  • 注意:减少 PG 数量通常不支持。

Q2: 如何迁移数据到新池?

  • 使用 rados cppoolrbd migration(块存储):
    rados cppool old_pool new_pool
    

Q3: 池的副本数可以动态修改吗?

  • 可以,但需触发数据迁移:
    ceph osd pool set my_pool size 3
    

总结

  • 对象池是 Ceph 的逻辑存储单元,支持副本和纠删码两种冗余策略。
  • PG 和 CRUSH 规则 共同决定数据分布,需合理配置以避免热点。
  • Monitor、OSD、MGR 协同维护池,分别负责元数据、存储和自动化管理。
  • 最佳实践:根据负载类型选择池类型,监控 PG 分布,优化故障域。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/918790.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/918790.shtml
英文地址,请注明出处:http://en.pswp.cn/news/918790.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 Docker 部署 PostgreSQL

通过 Docker 部署 PostgreSQL 是一种快速、高效的方式&#xff0c;适用于开发和测试环境。 步骤 1&#xff1a;拉取 PostgreSQL 镜像 运行以下命令从 Docker Hub 拉取最新的 PostgreSQL 镜像&#xff1a; docker pull postgres 如果需要其他的镜像&#xff0c;可以指定版本…

P1886 滑动窗口 /【模板】单调队列【题解】

P1886 滑动窗口 /【模板】单调队列 题目描述 有一个长为 nnn 的序列 aaa&#xff0c;以及一个大小为 kkk 的窗口。现在这个窗口从左边开始向右滑动&#xff0c;每次滑动一个单位&#xff0c;求出每次滑动后窗口中的最小值和最大值。 例如&#xff0c;对于序列 [1,3,−1,−3,5,3…

河南萌新联赛2025第(五)场:信息工程大学补题

文章目录[TOC](文章目录)前言A.宇宙终极能量调和与多维时空稳定性验证下的基础算术可行性研究B.中位数C.中位数1F.中位数4G.简单题H.简单题I.Re:从零开始的近世代数复习&#xff08;easy&#xff09;K.狂飙追击L.防k题前言 这次萌新联赛考到了很多数学知识 A.宇宙终极能量调和…

SuperMap GIS基础产品FAQ集锦(20250804)

一、SuperMap iServer 问题1&#xff1a;iServer的名称和logo怎么自定义&#xff1f; 11.3.0 【解决办法】参考&#xff1a;https://blog.csdn.net/supermapsupport/article/details/144744640 问题2&#xff1a;iServer 刷新工作空间&#xff0c;当数据库是 PostGIS 时&#x…

AWS CloudFormation批量删除指南:清理Clickstream Analytics堆栈

概述 在AWS环境管理中,经常会遇到需要批量删除CloudFormation堆栈的情况。本文记录了一次完整的Clickstream Analytics堆栈清理过程,包括遇到的问题和解决方案,希望能为其他开发者提供参考。 背景 我们的AWS账户中部署了多个Clickstream Analytics解决方案的CloudFormati…

redis中分布式锁的应用

我们之前讲了秒杀模块的实现&#xff0c;使用了sychronized互斥锁&#xff0c;但是在集群模式下因为不同服务器有不同jvm&#xff0c;所以synchronized互斥锁失效了。 redis实现秒杀超卖问题的解决方案&#xff1a;(仅限于单体项目)-CSDN博客 这时就要找到一个多台服务器都能…

【科研绘图系列】R语言绘制微生物丰度和基因表达值的相关性网络图

文章目录 介绍 加载R包 数据下载 导入数据 数据预处理 画图 系统信息 参考 介绍 【科研绘图系列】R语言绘制微生物丰度和基因表达值的相关性网络图 加载R包 library(tidyverse) library(ggsignif) library(RColorBrewer) library(dplyr) library(reshape2) library(grid

Pycharm现有conda环境有对应env,但是添加后没反应

一、系统环境 二、异常现象 Pycharm现有conda环境有对应env&#xff1a; anaconda3的envs下也确实存在这个环境&#xff1a; 但是添加后没反应&#xff08;点击确认后&#xff0c;yolov7环境没有出现在列表中&#xff09;&#xff1a; 但是我之前在别的机子添加是没问题的。 …

Git常用指令大全:从入门到精通

Git 的常用指令&#xff0c;分为基础操作、分支管理、远程协作、撤销操作和高级功能五个部分&#xff0c;并附上实用示例&#xff1a;一、基础操作&#xff08;必会&#xff09;初始化仓库 git init # 在当前目录创建新仓库克隆远程仓库 git clone https://github.com/user/rep…

Redis (REmote DIctionary Server) 高性能数据库

Redis {REmote DIctionary Server} 高性能数据库1. What is Redis?1.1. 基于内存的数据存储2. Install Redis on Linux3. Starting and stopping Redis in the background3.1. systemctl3.2. service 4. Connect to Redis5. 退出 Redis 的命令行界面 (redis-cli)6. redis-serv…

MySQL中的DML(二)

DML(Data Manipulation Language) : 数据库操作语言&#xff0c;对数据库中表的数据进行增删改操作。 创建student表&#xff1a; CREATE DATABASE test; use test; CREATE TABLE student (id int,name varchar(255),address varchar(255),city varchar(255) );INSERT INTO stu…

linux 主机驱动(SPI)与外设驱动分离的设计思想

一、 主机驱动与外设驱动分离Linux中的SPI、I2c、USB等子系统都利用了典型的把主机驱动和外设驱动分离的想法&#xff0c;让主机端负责产生总线上的传输波形&#xff0c;而外设端只是通过标准的API来让主机端以适当的波形访问自身。因此这里涉及了4个软件模块&#xff1…

如何生成.patch?

文章目录 ​​方法 1:使用 `git format-patch`(推荐)​ ​​步骤​​ ​方法 2:使用 `diff`命令(适用于非 Git 项目)​ ​​方法 3:使用 `git diff`(生成未提交的变更)​ ​方法 4:使用 `quilt`(适用于大量补丁管理) ​如何提交补丁给上游项目?​ ​总结​​ 在 L…

【计算机网络 | 第6篇】计算机体系结构与参考模型

文章目录计算机体系结构与参考模型分层思想&#x1f342;常见的3种模型&#xff08;网络体系结构&#xff09;&#x1f426;‍&#x1f525;TCP/IP体系结构各层包含的主要协议&#x1f95d;每层所解决的主要问题&#x1f914;层次间的交互规则&#x1f95d;实体与对等实体协议服…

Autoware Universe 感知模块详解 | 第一节 感性认识多源传感器标定

传感器与感知模块 在基于规则的自动驾驶系统中&#xff0c;感知模块&#xff0c;承担着理解车体周围环境信息的重要职责。它通过融合多种传感器数据&#xff0c;与定位模块共同为规划与控制模块提供准确、系统化的输入信息。正如人可以通过眼睛观察周围的环境&#xff08;盲人也…

docker搭建java运行环境(java或者springboot)

目录1. 创建测试代码2. 编译打包3. 代码环境运行使用普通运行方式使用docker挂载项目&#xff08;长期运行&#xff09;1. 创建 Dockerfile2. 构建并后台运行使用docker swram实现零停机更新&#xff08;推荐&#xff09;1. 初始化swarm2. 创建 Dockerfile3. 使用Dockerfile 构…

哈希表特性与unordered_map/unordered_set实现分析

目录 一、哈希表核心特性总结 1.开放地址法 2.链地址法 二、unordered_map/unordered_set实现要点分析 1. 哈希表核心实现(HashTable2.h) (1) 哈希函数处理 (2) 链地址法实现 (3) 迭代器设计 (4) hashtable设计 2. unordered_map实现要点 3. unordered_map实现要点 一…

生产环境sudo配置详细指南

目录 1. 语法格式 2. 配置示例 3. 使用 /etc/sudoers.d/ 目录管理&#xff08;推荐&#xff09; 4. 基础配置&#xff1a;用户权限管理 4.1 ​​添加用户到sudo组 ​​4.2 验证用户组信息 5. sudo日志配置 5.1 修改sudoers配置文件 5.2 创建日志目录与权限设置 6. Su…

CSS动态视口单位:彻底解决移动端适配顽疾,告别布局跳动

你是否曾被这些问题困扰&#xff1a; 移动端页面滚动时&#xff0c;地址栏收缩导致页面高度突变&#xff0c;元素错位&#xff1f;100vh在移动设备上实际高度超出可视区域&#xff1f;全屏弹窗底部总被浏览器UI遮挡&#xff1f; 这些痛点背后都是传统视口单位的局限——无法响应…

【P27 4-8】OpenCV Python——Mat类、深拷贝(clone、copyTo、copy)、浅拷贝,原理讲解与示例代码

P27 4-8 1 Mat结构体2 深拷贝VS浅拷贝3 代码示例1 Mat结构体 2 深拷贝VS浅拷贝 只拷贝了头部&#xff0c;header&#xff0c;&#xff0c;但是data部分是共用的&#xff0c;速度非常快&#xff1b; 缺点&#xff0c;任意一个修改&#xff0c;另一个data跟着变&#xff0c;这就是…