第⑯讲:Ceph集群Pool资源池管理以及PG的数据分布的核心技术要点

server/2024/9/24 3:37:00/

文章目录

    • 1.Pool资源池的管理
      • 1.1.查看Pool资源池列表
      • 1.2.创建一个Pool资源池
      • 1.3.查看Pool资源池的参数信息
      • 1.4.修改Pool资源池的参数信息
      • 1.5.为Pool资源池设置应用模式
      • 1.6.重命名Pool资源池
      • 1.7.设置Pool资源池的限额
      • 1.8.删除Pool资源池
      • 1.9.查看Pool资源池的利用率
    • 2.PG的数据分布概念

1.Pool资源池的管理

1.1.查看Pool资源池列表

[root@ceph-node-1 ~]# ceph osd lspools
1 ceph-rbd-data
2 .rgw.root
3 default.rgw.control
4 default.rgw.meta
5 default.rgw.log
6 default.rgw.buckets.index
7 default.rgw.buckets.data
8 cephfs_metadata
9 cephfs_data

1.2.创建一个Pool资源池

语法格式:ceph osd pool create {pool-name} {pg-num} [{pgp-num}] [replicated] [crush-rule-name] [expected-num-objects]

[root@ceph-node-1 ~]# ceph osd pool create pool-test 3 3
pool 'pool-test' created

1.3.查看Pool资源池的参数信息

列出Pool资源池的所有参数

[root@ceph-node-1 ~]# ceph osd pool get pool-test 

image-20220406223637817

查看pool的副本数量
[root@ceph-node-1 ~]# ceph osd pool get pool-test size
size: 3查看pool的pg数量
[root@ceph-node-1 ~]# ceph osd pool get pool-test pg_num
pg_num: 3

1.4.修改Pool资源池的参数信息

设置pool的副本数
[root@ceph-node-1 ~]# ceph osd pool set pool-test size 1
set pool 10 size to 1

1.5.为Pool资源池设置应用模式

查看为Pool设置应用模式的命令格式,支持禁用、启用、查看、删除、设置等方式。

[root@ceph-node-1 ~]# ceph -h | grep application
osd pool application disable <poolname> <app> {-- disables use of an application <app> on pool 
osd pool application enable <poolname> <app> {--  enable use of an application <app> [cephfs,rbd,
osd pool application get {<poolname>} {<app>}     get value of key <key> of application <app> on 
osd pool application rm <poolname> <app> <key>    removes application <app> metadata key <key> on 
osd pool application set <poolname> <app> <key>   sets application <app> metadata key <key> to 

为Pool设置应用模式。

[root@ceph-node-1 ~]# ceph osd pool application enable pool-test rbd
enabled application 'rbd' on pool 'pool-test'

查看Pool设置的应用模式。

[root@ceph-node-1 ~]# ceph osd pool application get  pool-test 
{"rbd": {}
}

1.6.重命名Pool资源池

[root@ceph-node-1 ~]# ceph osd pool rename pool-test pool-rename
pool 'pool-test' renamed to 'pool-rename'

1.7.设置Pool资源池的限额

同个限额可以调整资源池的最大Object文件数量等等参数。

[root@ceph-node-1 ~]# ceph osd pool set-quota pool-rename max_objects 10
set-quota max_objects = 10 for pool pool-rename

1.8.删除Pool资源池

[root@ceph-node-1 ~]# ceph osd pool delete pool-rename
Error EPERM: WARNING: this will *PERMANENTLY DESTROY* all data stored in pool pool-rename.  If you are *ABSOLUTELY CERTAIN* that is what you want, pass the pool name *twice*, followed by --yes-i-really-really-mean-it.

直接删除会报错,报错的意思是说删除资源池会对其中的数据永久破坏,如果确认删除,则输入两次资源池的名称,然后根据提示信息加上–yes-i-really-really-mean-it参数进行删除。

[root@ceph-node-1 ~]# ceph osd pool delete pool-rename pool-rename --yes-i-really-really-mean-it
pool 'pool-rename' removed

1.9.查看Pool资源池的利用率

[root@ceph-node-1 ~]# rados df 
POOL_NAME                    USED OBJECTS CLONES COPIES MISSING_ON_PRIMARY UNFOUND DEGRADED RD_OPS      RD WR_OPS      WR USED COMPR UNDER COMPR 
.rgw.root                 768 KiB       4      0     12                  0       0        0    193 193 KiB      4   4 KiB        0 B         0 B 
ceph-rbd-data             192 KiB       3      0      9                  0       0        0    501 1.7 MiB    222  13 MiB        0 B         0 B 
cephfs_data                   0 B       0      0      0                  0       0        0      0     0 B   4272   8 GiB        0 B         0 B 
cephfs_metadata           2.8 MiB      23      0     69                  0       0        0      9 425 KiB    381 647 KiB        0 B         0 B 
default.rgw.buckets.data  1.9 MiB       8      0     24                  0       0        0    102 253 KiB    305 493 KiB        0 B         0 B 
default.rgw.buckets.index     0 B       3      0      9                  0       0        0    366 388 KiB    147  70 KiB        0 B         0 B 
default.rgw.control           0 B       8      0     24                  0       0        0      0     0 B      0     0 B        0 B         0 B 
default.rgw.log               0 B     207      0    621                  0       0        0 287858 281 MiB 191830     0 B        0 B         0 B 
default.rgw.meta            3 MiB      19      0     57                  0       0        0    281 239 KiB    151  55 KiB        0 B         0 B 
pool-rename                   0 B       0      0      0                  0       0        0      0     0 B      0     0 B        0 B         0 B total_objects    275
total_used       7.6 GiB
total_avail      62 GiB
total_space      70 GiB

2.PG的数据分布概念

PG的官方文档:https://docs.ceph.com/en/nautilus/rados/operations/placement-groups/#how-are-placement-groups-used

PG是建立在Pool资源池之上的,一个文件存储在OSD时,首先被拆分成多个Object文件,这些Object文件都是存储在Pool资源池的PG里的,PG最后再通过CRUSH算法将数据存储到OSD中。

如果一个Pool资源池中的PG数量很多,就意味着会通过CRUSH算法将Object数据分散写入到更多的OSD中,数据分散存储在OSD的数量越多,对于数据的安全性就越高,相反,如果Pool中的PG数量过少,那么通过CRUSH算法将数据分散存储到OSD的数量就越少,数据的丢失概率就会很高。

image-20220407105146809

PG的作用有两种:

  • 数据分布情况,如果PG的数量越多,那么数据就会分散在多个OSD中进行存储,降低数据丢失的概率,如果PG的数量很少,那么数据分散在OSD的数量也会随之减少,就会提高数据丢失的概率。
  • 提高计算效率,如果没有PG的概念,一个文件会被拆分成多个Object文件,集群中就会有成千上万个Object,如果这些Object都由CRUSH进行计算,然后同步到OSD里,会大大降低集群的性能,有了PG的概念后,所有的Object都是存储在PG里的,CRUSH只需要根据PG进行计算就可以了,PG的数量远远要比Object的数量少很多。

集群中PG数量分配多少是合理的,是有具体计算公式的,如下所示,通过这个公式可用计算出集群中可以设置多少个PG。

             (OSDs * 100)
Total PGs =  ------------pool size

PG的数量是通过OSD的数量乘以100然后除以Pool的副本数得来的,这个100是指这个OSD中可以承载多少个PG数量。

每个OSD中最多只能容纳250个PG,PG的数量建议在100-200之间。

在使用公式计算PG的数量时,建议使用OSD*200,可以方便后期的数据量的扩展,随着数据量的增长,PG的数量也需要增长,如果一开始设置的数量很多,再后期就不需要扩容了。

注意这个公式只是计算出集群中有多少个PG合理,并不是计算的Pool拥有的PG数量。

例子:集群有200个OSD,Pool资源池的副本数为3。

(200x100)/3=6667

PG的数量建议是2的n次方,最接近6667的2的n次方是4096或者8192,为了方便后期的扩展,建议设置为8196个PG。

Ceph官方提供了一个PG计算器,地址为:http://ceph.com/pgcalc/,现在可能无法使用了。

pgcalc工具可以使用的使用,可用在这里添加Pool的一些参数(副本数、OSD的数量、数据使用比例、OSD可承载的PG数量)就可以计算出集群中PG的数量以及一个Pool设置多少个PG合理。

即使这个工具无法使用了,那也没有关系,还是有公式计算的。

在上面通过公式能够计算出集群合理的PG数量,下面的公式可以计算出一个Pool资源池分配多少个PG合理。

             (OSDs * 100)
Pool PGs =  -------------- * pool data percentpool size

"pool data percent"指的是该Pool将来可能存放的数据量占集群的百分比。

例子:OSD100个、OSD可承载的PG数量为200个、Pool副本数为3、该Pool的数据量占集群的15%。

(100X200)/3X0.15=1000个

1000接近2的n次方的值为1024,那么就建议这个Pool设置1024个PG。


http://www.ppmy.cn/server/10432.html

相关文章

【后端】PyCharm的安装指引与基础配置

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、PyCharm是什么二、PyCharm安装指引安装PyCharm社区版安装PyCharm专业版 三、配置PyCharm&#xff1a;四、总结 前言 随着开发语言及人工智能工具的普及&am…

SSA-LSTM多变量时序预测 基于麻雀搜索算法-长短期记忆神经网络多变量时序预测 (多输入单输出)

文章目录 效果一览文章概述订阅专栏只能获取一份代码部分源码参考资料效果一览 文章概述 SSA-LSTM多变量时序预测 基于麻雀搜索算法-长短期记忆神经网络多变量时序预测 (多输入单输出) 订阅专栏只能获取一份代码 部分源码 %

【话题】为什么选择成为了一名程序员?

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读小5的系列文章&#xff0c;这是《话题》系列文章 目录 背景沉迷游戏回归学习机缘巧合兴趣驱动的选择职业发展的考虑兴趣与职业发展的结合结论文章推荐 背景 选择程序员之路&#xff1a;兴趣驱动还是职业发展&#xff1f; 在…

vue实现周日历 日历按周切换 vue日程管理

实现的功能 1、点击今天&#xff1a;回到今日日期并选中今日日期&#xff0c;查当天数据 2、点击左箭头&#xff1a;切换上一周 3、点击右箭头&#xff1a;切换下一周 4、黄圆圈代表有日程提醒&#xff0c;点击选中&#xff0c;下方对应显示当前日程提醒的内容&#xff0c;没有…

怎么通过微信小程序实现远程控制包间内的电器

怎么通过微信小程序实现远程控制包间内的电器呢&#xff1f; 本文描述了使用微信小程序调用HTTP接口&#xff0c;实现控制包间内的电器&#xff0c;专用的包间控制器&#xff0c;可独立控制包间内的全部电器&#xff0c;包括空调。 可选用产品&#xff1a;可根据实际场景需求&…

什么是区块链?什么是X314协议?

X314协议是一种基于区块链技术的分布式账本协议&#xff0c;具有去中心化、安全性高和可扩展性强的特点。本文将从多个角度对X314协议进行通俗解释&#xff0c;带您了解这一前沿技术。 一、什么是区块链和分布式账本&#xff1f; 首先&#xff0c;我们需要了解什么是区块链和分…

Qt : 如何解决重载引起的歧义

一、引子 在Qt中编写代码&#xff0c;进行信号和槽函数的连接时&#xff0c;如果采用新的语法&#xff0c;如&#xff1a; connect(ui->doubleSpinBox, &QDoubleSpinBox::valueChanged,this,&App::minValueChanged);当你准备快乐编译时&#xff0c;突然被背刺。卧槽…

批量更新 AWS ECS Fargate 服务

AWS ECS Fargate 是一种全托管的容器部署服务,可以帮助用户轻松地管理和运行容器化的应用程序。在实际应用中,经常需要对多个服务进行更新以保持系统的稳定性和安全性。本文将介绍如何使用 Python SDK 批量更新 AWS ECS Fargate 服务,并提供完整的代码示例。 1. 准备工作 …