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

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版本而异,且通常用于特殊恢复场景。

相关文章:

Pool 和 PG 架构(二)

Ceph 的存储架构设计旨在提供高可用性和可扩展性。其中&#xff0c;Pool&#xff08;存储池&#xff09;和 PG&#xff08;放置组&#xff09;是两个核心概念。下面详细介绍 Ceph 的 Pool 和 PG 架构以及它们之间的关系。 1. Pool池 概念&#xff1a; Pool&#xff08;存储池…...

客户服务升级指南:如何以细节赢得客户忠诚

在当今这个竞争激烈的市场环境中&#xff0c;客户忠诚度已成为企业生存与发展的关键所在。而要想赢得并维持客户的忠诚&#xff0c;仅凭优质的产品或服务已远远不够&#xff0c;更需要企业在客户服务上下足功夫&#xff0c;从每一个细节入手&#xff0c;打造超越客户期待的服务…...

闲盒支持的组网方式和注意事项

1. 直连光猫拨号​ 通过光猫拨号&#xff0c;设备直连光猫的设备&#xff0c;需要对光猫开启UPNP并关闭DMZ 如果只接一个盒子&#xff0c;建议直接针对盒子IP开dmz。 2. 直连路由器​ 通过路由器拨号&#xff0c;设备直连路由器的设备&#xff0c;需要对路由器开启UPNP并关闭…...

828华为云征文|华为云Flexus云服务器X实例之openEuler系统下搭建MaxKB开源知识库问答系统

828华为云征文&#xff5c;华为云Flexus云服务器X实例之openEuler系统下搭建MaxKB开源知识库问答系统 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、MaxKB 介绍2.1 MaxKB简介2.2 MaxKB整体架构…...

[Linux]:信号(上)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Linux学习 贝蒂的主页&#xff1a;Betty’s blog 1. 信号的引入 1.1 信号的概念 在Linux系统中&#xff0c;信号&#xff08;…...

浙大数据结构:05-树9 Huffman Codes

这道题难度挺大&#xff0c;写起来较为费劲&#xff0c;这里我依然使用了STL库&#xff0c;使得代码量大幅减少不过百行&#xff0c;便于大家理解。 机翻&#xff1a; 1、条件准备 数组存储字符对应频率&#xff0c;n,student存储输入多少字符&#xff0c;有多少学生测试。 …...

scrapy爬虫基础

一、初识 创建项目&#xff1a; scrapy startproject my_one_project # 创建项目命令 cd my_one_project # 先进去&#xff0c; 后面在里面运行 运行爬虫命令为&#xff1a;scrapy crawl tk spiders下创建test.py 其中name就是scrapy crawl tk &…...

利用H5无插件播放RTSP流的实现方案

文章目录 0. 引言1. 问题分析1.1 RTSP流与浏览器的兼容性1.2 解决思路 2. 方案设计2.1 总体架构2.2 关键组件 3. 实施步骤3.1 环境准备3.2 安装与配置3.2.1 安装FFmpeg3.2.2 安装OpenResty3.2.3 添加nginx-rtmp-module模块3.2.4 配置OpenResty 3.3 推流操作3.4 前端播放3.4.1 引…...

CSS文本格式化

通过 CSS 中的文本属性您可以像操作 Word 文档那样定义网页中文本的字符间距、对齐方式、缩进等等&#xff0c;CSS 中常用的文本属性如下所示&#xff1a; text-align&#xff1a;设置文本的水平对齐方式&#xff1b;text-decoration&#xff1a;设置文本的装饰&#xff1b;te…...

python的 __name__和__doc__属性

__name__属性 __name__属性 用于判断当前模块是不是程序入口&#xff0c;如果当前程序正在使用&#xff0c;__name__的值为__main__。 在编写程序时&#xff0c;通常需要给每个模块添加条件语句&#xff0c;用于单独测试该模块的功能。 每个模块都有一个名称&#xff0c;当一…...

Go语言中的Mutex实现探讨

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在并发编程中,互斥锁(Mutex)是一个重要的工具,它帮助我们控制多个协程对共享资源的访问,从而防止数据竞争和不一致性。本文将深入探讨Go语言中Mutex的实现历程和使用方式,同时分享在处理并发问题时的思路与…...

第五届计算机科学与管理科技国际学术会议(ICCSMT 2024)

梁哲&#xff0c;同济大学长聘特聘教授&#xff0c;国家杰青、首届国家杰青延续项目获得者、上海市曙光学者、上海市优秀学术带头人。本科毕业于新加坡国立大计算机工程系、硕士毕业于新加坡国立大学工业与系统工程系、博士毕业于美国新泽西州立大学工业工程系。理论研究主要集…...

【machine learning-13-线性回归的向量化】

向量化 向量化简洁并行计算 向量化 线性回归的向量化表示如下&#xff0c;其中w 和 x 都分别加了箭头表示这是个向量&#xff0c;后续不加也可以表示为向量&#xff0c;w和x点乘加上b&#xff0c;就构成了多元线性回归的表达方式&#xff0c;如下&#xff1a; 那么究竟为什么…...

【CSS|第2期】探索HTML与CSS中的文档流:从自然流到高级布局技巧

日期&#xff1a;2024年9月9日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉在这里插入代码片得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对…...

MATLAB绘图基础9:多变量图形绘制

参考书&#xff1a;《 M A T L A B {\rm MATLAB} MATLAB与学术图表绘制》(关东升)。 9.多变量图形绘制 9.1 气泡图 气泡图用于展示三个或更多变量变量之间的关系&#xff0c;气泡图的组成要素&#xff1a; 横轴( X {\rm X} X轴)&#xff1a;表示数据集中的一个变量&#xff0c…...

JBOSS中间件漏洞复现

CVE-2015-7501 1.开启环境 cd vulhub/jboss/JMXInvokerServlet-deserialization docker-compose up -d docker ps 2.访问靶场 3.访问/invoker/JMXInvokerServlet目录 4.将反弹shell进⾏base64编码 bash -i >& /dev/tcp/47.121.191.208/6666 0>&1 YmFzaCAt…...

每日论文6—16ISCAS一种新型低电流失配和变化电流转向电荷泵

《A Novel Current Steering Charge Pump with Low Current Mismatch and Variation》16ISCAS 本文首先介绍了传统的current steering charge pump&#xff0c;如下图&#xff1a; 比起最简单的电荷泵&#xff0c;主要好处是UP和DN开关离输出节点较远&#xff0c;因此一定程度…...

低代码开发平台:未来五大发展趋势预测

在数字化转型的浪潮中&#xff0c;低代码开发平台正迅速崛起&#xff0c;成为企业软件开发的重要工具。随着技术的不断进步和市场需求的持续增长&#xff0c;低代码开发平台在未来将展现出更为广阔的发展前景。本文将预测并探讨低代码开发平台的五大发展趋势。 深度融合数字化与…...

国内AI大模型,这篇文章说透了

探索国内顶尖AI企业及其创新产品。 人工智能&#xff08;AI&#xff09;的发展正以前所未有的速度推进。 从简单的自动化任务到复杂的决策制定、自然语言处理、图像识别及自主系统的实现&#xff0c;不断拓宽着人类智慧的边界。 国内AI发展迅猛&#xff0c;不仅在理论研究上…...

3.4 爬虫实战-爬去智联招聘职位信息

课程目标 爬去智联招聘 课程内容 import requests from bs4 import BeautifulSoup from tqdm import tqdm import pandas as pd import time def tran_salary(ori_salary):if "万" in ori_salary:ori_salary ori_salary.replace("万","")ori…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...