Pool 和 PG 架构(二)

Ceph 的存储架构设计旨在提供高可用性和可扩展性。其中,Pool(存储池)和 PG(放置组)是两个核心概念。下面详细介绍 Ceph 的 Pool 和 PG 架构以及它们之间的关系。

1. Pool池

概念

  • Pool(存储池)是Ceph中逻辑上的存储单元,是存储Object对象的逻辑分区,用于组织和管理数据。用户可以通过创建不同的Pool来为不同的应用程序或用途分配存储空间。
  • Pool可以是replicated(复制型)或erasure-coded(纠删码型)。复制型Pool通过生成数据的多份拷贝来确保数据的高可靠性和可用性,而纠删码型Pool则通过将数据分割成多个数据块和校验块,利用校验块来恢复数据,从而在节省存储空间的同时提供数据保护。
主要参数
  • size:每个对象的副本数。例如,size=3 表示每个对象有 3 个副本。
  • min_size:在某些 OSD 故障时,允许的最小副本数。例如,min_size=2 表示即使只有 2 个副本可用,数据仍然被认为是安全的。
  • pg_num:Pool 中的 PG 数量。这是一个关键参数,会影响性能和数据分布。
  • pgp_num:用于计算对象到 PG 映射的 PG 数量。通常设置为与 pg_num 相同。
  • crush_rule_set:CRUSH 规则集,用于确定数据如何在 OSD 之间分布。

 

2. PG(Placement Group)

概念

  • PG是Ceph中物理上的数据分布单位,用于将数据分散到不同的OSD(Object Storage Daemon)上。每个Pool由多个PG组成,每个PG负责一部分数据的管理和存储。
主要特点
  • 数据分布:对象首先被映射到 PG,然后 PG 被分配到特定的 OSD。这种两层映射机制使得数据分布更加均匀。
  • 复制:每个 PG 的副本会被分配到不同的 OSD,以确保高可用性。
  • 数据恢复:当某个 OSD 故障时,Ceph 会从其他副本中恢复数据,并重新分配到新的 OSD。

 

3. 对象到 PG 的映射

 

对象到 PG 的映射是通过哈希函数实现的。具体步骤如下:

  1. 计算哈希值:使用对象的名称(或 ID)计算哈希值。
  2. 取模运算:将哈希值对 pg_num 取模,得到 PG 的 ID。
  3. 分配到 PG:将对象分配到对应的 PG。

公式如下:

pg_id = hash(object_name) % pg_num

 

4. PG 到 OSD 的映射

 

PG 到 OSD 的映射是通过 CRUSH 算法实现的。CRUSH 算法考虑了集群的物理拓扑结构(如机架、主机等),以确保数据的均匀分布和高可用性。

  1. CRUSH 地图:CRUSH 地图定义了集群的物理拓扑结构和规则集。
  2. 选择 OSD:根据 CRUSH 地图和规则集,将 PG 分配到特定的 OSD。

 

5. 配置建议

 

  • pg_num 和 pgp_num:这两个参数应该设置为相同的值。通常情况下,pg_num 应该是 OSD 数量的 100 倍左右,以确保数据分布均匀。
  • CRUSH 规则集:根据实际的物理拓扑结构和需求,选择合适的 CRUSH 规则集。
  • 性能调优:可以通过调整 pg_num 和 pgp_num 来优化性能。增加 PG 数量可以提高并行度,但也会增加管理开销。

 

总结

 

  • Pool 是 Ceph 中用于组织和管理数据的基本单位。
  • PG 是 Ceph 中用于管理数据分布和复制的逻辑单元。
  • 对象到 PG 的映射 通过哈希函数实现。
  • PG 到 OSD 的映射 通过 CRUSH 算法实现。
  • 配置建议 包括合理设置 pg_num 和 pgp_num,选择合适的 CRUSH 规则集,以及根据实际需求进行性能调优。

 

估算PG数量的一些方法

设置 Ceph 存储池的 PG(Placement Group)数量是一个重要的配置步骤,因为它直接影响到集群的性能和数据分布。以下是一些指导原则和步骤,帮助你合理设置 PG 数量。

1. 基本公式

一个常用的公式来计算 PG 数量是: pg_num=100×OSD 数量pg_num=100×OSD 数量

2. 考虑因素

  • OSD 数量:PG 数量应与 OSD 数量成正比。更多的 OSD 需要更多的 PG 来确保数据均匀分布。
  • 存储池大小:较大的存储池可能需要更多的 PG 来提高并行度和性能。
  • 数据分布:合理的 PG 数量可以确保数据在 OSD 之间均匀分布,避免热点问题。
  • 管理开销:过多的 PG 会增加管理开销,因此需要在性能和管理之间找到平衡。

3. 推荐范围

  • 小型集群(10 个以下 OSD):建议 pg_num 为 100 到 500。
  • 中型集群(10 到 100 个 OSD):建议 pg_num 为 500 到 2000。
  • 大型集群(100 个以上 OSD):建议 pg_num 为 2000 到 10000。

4. 动态调整 PG 数量

Ceph 允许在创建存储池后动态调整 pg_numpgp_num。但是,建议在创建存储池时就设置合理的初始值,以避免后续调整带来的性能影响。

Pool管理操作及其对应的命令格式

操作命令格式描述
创建Poolceph osd pool create {pool-name} {pg-num} [{pgp-num}] [replicated] [crush-ruleset-name]创建一个新的Pool,指定Pool名称、PG数量、PGP数量(可选)、副本类型(默认为replicated)、以及可选的Crush规则集。
查看所有Poolceph osd lspools 或 rados lspools列出集群中所有的Pool。
查看Pool详情ceph osd pool get {pool-name} {option}查看指定Pool的详细参数,如size、min_size、pg_num、pgp_num等。
修改Pool参数ceph osd pool set {pool-name} {option} {value}修改指定Pool的参数设置,如副本数、最小副本数、PG数、PGP数等。
删除Poolceph osd pool delete {pool-name} {pool-name} --yes-i-really-really-mean-it删除指定的Pool,需确认删除操作以避免误操作导致数据丢失。
重命名Poolceph osd pool rename {current-pool-name} {new-pool-name}将Pool的名称从旧名称更改为新名称。
查询Pool配额ceph osd pool get-quota {pool-name}查询指定Pool的容量和最大Object数目配额。
设置Pool配额ceph osd pool set-quota {pool-name} max_objects|max_bytes <val>设置指定Pool的容量和最大Object数目配额。
查询Pool属性ceph osd pool stats {pool-name}查询指定Pool的统计信息,如存储容量、对象数量等。
创建Pool快照ceph osd pool mksnap {pool-name} {snap-name}对指定Pool中的所有对象创建快照。
查询Pool快照rados lssnap --pool={pool-name}查询指定Pool的快照列表。
回滚Pool快照rados rollback {obj-name} {snap-name} --pool={pool-name}目前仅支持对Pool中的单个对象进行快照回滚,不支持整个Pool的回滚。

 

PG(Placement Group)相关的命令 

命令描述
ceph pg stat显示集群中所有PG的简要状态概述,包括活跃(active)、降级(degraded)等状态的PG数量。
ceph pg dump打印所有PG的详细信息,包括PG ID、状态、主副本位置、数据量等。输出格式为JSON,包含丰富的信息用于深入分析和调试。
ceph pg map {pg-id}显示指定PG的映射信息,包括PG的主OSD和副本所在的OSD。
ceph pg {pg-id} query查询指定PG的详细信息,但请注意,这个命令的确切形式可能因Ceph版本而异,通常ceph pg {pg-id}加上适当的参数或选项来查询详细信息。
ceph pg scrub {pg-id}对指定PG执行scrub操作,检查PG的数据一致性。这有助于发现潜在的数据损坏问题。
ceph pg deep-scrub {pg-id}对指定PG执行深度scrub操作,比普通的scrub更为彻底,用于更严格的数据一致性检查。
ceph pg repair {pg-id}修复指定PG中发现的不一致或损坏的数据。这个操作可能会影响集群性能,并且存在数据修复的风险,因此建议在有备份或清楚问题来源时使用。
ceph osd pool set {pool-name} pg_num {pg-count}设置指定Pool中的PG数量。这是调整Pool性能和数据分布的重要步骤。
ceph osd pool get {pool-name} pg_num获取指定Pool中的PG数量。这有助于了解Pool的当前配置。
ceph pg dump_stuck {state}显示处于特定stuck状态的PG信息。例如,ceph pg dump_stuck unclean将显示所有处于unclean状态的stuck PG。
ceph pg mark_unfound_lost revert用于恢复一个丢失的PG,但请注意,这个命令的确切用法可能因Ceph版本而异,且通常用于特殊恢复场景。

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

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

相关文章

业务安全治理

业务安全治理 1.账号安全撞库账户盗用 2.爬虫与反爬虫3.API网关防护4.钓鱼与反制钓鱼发现钓鱼处置 5.大数据风控风控介绍 1.账号安全 撞库 撞库分为垂直撞库和水平撞库两种&#xff0c;垂直撞库是对一个账号使用多个不同的密码进行尝试&#xff0c;可以理解为暴力破解&#x…

MVCC机制解析:提升数据库并发性能的关键

MVCC机制解析&#xff1a;提升数据库并发性能的关键 MVCC&#xff08;Multi-Version Concurrency Control&#xff09; 多版本并发控制 。 MVCC只在事务隔离级别为读已提交(Read Committed)和可重复读(Repeated Read)下生效。 MVCC是做什么用的 MVCC是为了处理 可重复读 和…

C# 实时流转换为m3u8

主要通过FFmpeg 执行命令进行转换 FFmpeg 下载地址 命令行 ffmpeg -i "rtsp://your_rtsp_stream_address" -codec: copy -start_number 0 -hls_time 10 -hls_list_size 12 -f hls "output.m3u8"start_number 设置播放列表中最先播放的索引号&#xff0c;…

形式向好、成本较低、可拓展性较高的名厨亮灶开源了

简介 AI视频监控平台, 是一款功能强大且简单易用的实时算法视频监控系统。愿景在最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;减少企业级应用约 95%的开发成本&#xff0c;在强大视频算法加…

C++_21_模板

模板 简介&#xff1a; 一种用于实现通用编程的机制。 通过使用模板我们可以编写可复用的代码&#xff0c;可以适用于多种数据类型。 C模板的语法使用角括号 < > 来表示泛型类型&#xff0c;并使用关键字 template 来定义和声明模板 概念&#xff1a; c范式编程 特点&…

海外大带宽服务器连接失败怎么办?

在全球化日益加深的今天&#xff0c;海外大带宽服务器已成为企业拓展国际市场、提升业务效率的重要工具。然而&#xff0c;面对复杂多变的网络环境和技术挑战&#xff0c;服务器连接失败的问题时有发生&#xff0c;这不仅影响了企业的正常运营&#xff0c;还可能带来经济损失和…

如何写一个自动化Linux脚本去进行等保测试--引言

#我的师兄喜欢给我的休闲实习生活加活&#xff0c;说是让我在实习期间写一个自动化脚本去进行等保测试。呵呵哒。 怎么办呢&#xff0c;师兄的指令得完成&#xff0c;师兄说让我使用Python完成任务。 设想如下&#xff1a; 1、将Linux指令嵌入到python脚本中 2、调试跑通 …

【简历】25届河南某一本JAVA简历:从头到尾都表现的不懂技术

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历总体说明 今天看一份河南某重点一本大学的Java简历。 校招备战第一法则&#xff1a;必须确定自己的求职层次&#xff0c;是大厂、中厂还是小…

php语言基本语法

HP&#xff08;Hypertext Preprocessor&#xff09;是一种广泛使用的开源服务器端脚本语言&#xff0c;特别适合于Web开发。 它能够嵌入到HTML中&#xff0c;执行动态网页内容。 PHP的一些基本语法元素&#xff1a; 1. 基本结构 PHP代码通常嵌入到HTML中&#xff0c;以<…

OpenHarmony(鸿蒙南向开发)——小型系统芯片移植指南(二)

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ OpenHarmony&#xff08;鸿蒙南向开发&#xff09;——轻量系统芯片移植指南(一) Op…

基于深度学习的图像分类或识别系统(含全套项目+PyQt5界面)

目录 一、项目界面 二、代码实现 1、数据集结构 2、设置需要模型的训练参数和指定数据集路径 3、网络代码 4、训练代码 5、评估代码 6、结果显示 三、项目代码 一、项目界面 二、代码实现 1、数据集结构 每一个文件夹对应一个类别的数据 2、设置需要模型的训练参数和…

09.20 C++对C的扩充以及C++中的封装、SeqList

SeqList.h #ifndef SEQLIST_H #define SEQLIST_H#include <iostream> #include<memory.h> #include<stdlib.h> #include<string.h>using namespace std;//typedef int datatype; //类型重命名 using datatype int;//封装一个顺序表 class Seq…

app抓包 chrome://inspect/#devices

一、前言&#xff1a; 1.首先不支持flutter框架&#xff0c;可支持ionic、taro 2.初次需要翻墙 3.app为debug包&#xff0c;非release 二、具体步骤 1.谷歌浏览器地址&#xff1a;chrome://inspect/#devices qq浏览器地址&#xff1a;qqbrowser://inspect/#devi…

新媒体运营

一、新媒体运营的概念 1.新媒体 2.新媒体运营的五大方向 用户运营 产品运营 。。。 二、新媒体的岗位职责及要求 三、新媒体平台

快速开发与维护:探索 AndroidAnnotations

在移动应用开发的世界中&#xff0c;效率和可维护性是两个至关重要的要素。随着应用功能的不断增长和用户需求的不断变化&#xff0c;开发者们一直在寻找能够提高生产力的工具和框架。今天&#xff0c;我们将深入探讨一个能够帮助开发者实现快速开发和易于维护的框架——Androi…

dgl库安装

此篇文章继续上一篇pytorch已经安装成功的情况 &#xff08;python3.9&#xff0c;pytorch2.2.2&#xff0c;cuda11.8&#xff09; 上一篇pytorch安装教学链接 选择与之匹配的版本 输入下方代码进行测试 import dgl.data dataset dgl.data.CoraGraphDataset() print(‘Numb…

使用宝塔部署项目在win上

项目部署 注意&#xff1a; 前后端部署项目&#xff0c;需要两个域名&#xff08;二级域名&#xff0c;就是主域名结尾的域名&#xff0c;需要在主域名下添加就可以了&#xff09;&#xff0c;前端一个&#xff0c;后端一个 思路&#xff1a;访问域名就会浏览器会加载前端的代…

【Redis入门到精通二】Redis核心数据类型(String,Hash)详解

目录 Redis数据类型 1.String类型 &#xff08;1&#xff09;常见命令 &#xff08;2&#xff09;内部编码 2.Hash类型 &#xff08;1&#xff09;常见命令 &#xff08;2&#xff09;内部编码 Redis数据类型 查阅Redis官方文档可知&#xff0c;Redis提供给用户的核心数据…

【HTML5】html5开篇基础(1)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

代码随想录冲冲冲 Day51 图论Part3

101. 孤岛的总面积 dfs 首先dfs的作用就是在遇到陆地的时候找到所有的周围陆地 对于这道题的dfs 会把所有的链接边缘的陆地变成海洋 这样在全部调整之后 剩下的就是孤岛了 这道题中的dfs的结束条件就是遇到海洋时 遇到每一个陆地就会把面积1&#xff0c;在每一次重新找到…