Ceph 存储池命令 以及 数据压缩

2023-10-31


http://docs.ceph.org.cn/rados/ #ceph 官方运维手册

存储池的管理通常保存创建、列出、重命名和删除等操作
管理工具使用 ceph osd pool 的子命令及参数,比如 create/ls/rename/rm 等。

一、存储池操作

1.1 常用命令

创建存储池命令格式

ceph osd pool create <poolname> pg_num pgp_num {replicated|erasure}
# 示例
ceph osd pool create mypool 64 64

列出存储池

[ceph@ceph-deploy ceph-cluster]$ ceph osd pool ls       #不带 pool ID
mypool 
myrdb1
[ceph@ceph-deploy ceph-cluster]$ ceph osd lspools       #带 pool ID
1 mypool 
2 myrdb1

获取存储池的统计信息

[ceph@ceph-deploy ceph-cluster]$ ceph osd pool stats mypool 
pool mypool id 1 
nothing is going on

重命名存储池

# 格式
ceph osd pool rename old-name new-name
# 示例
ceph osd pool rename myrdb1 myrdb2

显示存储池的用量信息

rados df

在这里插入图片描述

1.2 删除存储池

如果把存储池删除会导致把存储池内的数据全部删除,因此 ceph 为了防止误删除存储池设置了两个机制来防止误删除操作。

第一个机制是 NODELETE 标志,需要设置为 false 但是默认就是 false 了。

# 创建一个测试的pool
ceph osd pool create mypool2 32 32 
pool 'mypool2' created

# 如果 NODELETE 标志设置为了 true 就表示不能删除,可以使用 set 指令重新设置为 fasle
ceph osd pool set mypool2 nodelete true 
set pool 9 nodelete to true

ceph osd pool set mypool2 nodelete false 
set pool 9 nodelete to false

# 查看 NODELETE 标志位
ceph osd pool get mypool2 nodelete 
nodelete: false

第二个机制是集群范围的配置参数 mon allow pool delete,默认值为 false,即监视器不允许删除存储池,可以在特定场合使用 tell 指令临时设置为(true)允许删除,在删除指定的 pool 之后再重新设置为 false。

[ceph@ceph-deploy ceph-cluster]$ ceph tell mon.* injectargs --mon-allow-pool-delete=true 
mon.ceph-mon1: injectargs:mon_allow_pool_delete = 'true' 
mon.ceph-mon2: injectargs:mon_allow_pool_delete = 'true' 
mon.ceph-mon3: injectargs:mon_allow_pool_delete = 'true'

[ceph@ceph-deploy ceph-cluster]$ ceph osd pool rm mypool2 mypool2 --yes-i-really-really-mean-it 
pool 'mypool2' removed

[ceph@ceph-deploy ceph-cluster]$ ceph tell mon.* injectargs --mon-allow-pool-delete=false 
mon.ceph-mon1: injectargs:mon_allow_pool_delete = 'false' 
mon.ceph-mon2: injectargs:mon_allow_pool_delete = 'false' 
mon.ceph-mon3: injectargs:mon_allow_pool_delete = 'false

1.3 存储池配额

存储池可以设置两个配对存储的对象进行限制,一个配额是最大空间(max_bytes),另外一个配额是对象最大数量(max_objects)。

[ceph@ceph-deploy ceph-cluster]$ ceph osd pool get-quota mypool 
quotas for pool 'mypool': 
  max objects: N/A    #默认不限制对象数量 
  max bytes: N/A      #默认不限制空间大小

[ceph@ceph-deploy ceph-cluster]$ ceph osd pool set-quota mypool max_objects 1000    #限制最大 1000 个对象 
set-quota max_objects = 1000 for pool mypool
[ceph@ceph-deploy ceph-cluster]$ ceph osd pool set-quota mypool max_bytes 10737418240    #限制最大 10737418240 字节 
set-quota max_bytes = 10737418240 for pool mypool

[ceph@ceph-deploy ceph-cluster]$ ceph osd pool get-quota mypool 
quotas for pool 'mypool': 
  max objects: 1 k objects   #最多 1000 对象 
  max bytes : 10 GiB         #最大 10G 空间

# 一般情况下,只限制大小,不限制数量。

1.4 存储池可用参数

size:存储池中的对象副本数,默认一主两个辅助 3 副本

ceph osd pool get mypool size 
size: 3

ceph osd pool set mypool size 2    #设置一主一个辅助副本

min_size:提供服务所需要的最小副本数,如果定义 size 为 3,min_size 也为 3,坏掉一个 OSD,如果 pool 池中有副本在此块 OSD 上面,那么此 pool 将不提供服务,如果将 min_size 定义为 2,那么还可以提供服务,如果提供为 1,表示只要有一块副本都提供服务。

ceph osd pool get mypool min_size 
min_size: 2

pg_num:查看当前 PG 的数量

ceph osd pool get mypool pg_num 
pg_num: 32

ceph osd pool set mypool pg_num 64 #修改指定 pool 的 pg 数量 
set pool 1 pg_num to 64

crush_rule:设置 crush 算法规则

ceph osd pool get mypool crush_rule 
crush_rule: replicated_rule                 #默认为副本池

nodelete:控制是否可删除,默认可以

ceph osd pool get mypool nodelete 
nodelete: false

nopgchange:控制是否可更改存储池的 pg num 和 pgp num

ceph osd pool get mypool nopgchange 
nopgchange: false

nosizechange:控制是否可以更改存储池的大小

ceph osd pool get mypool nosizechange 
nosizechange: false             #默认允许修改存储池大小

存储池配额相关命令

ceph osd pool get-quota mypool 
quotas for pool 'mypool': 
  max objects: 1 k objects 
  max bytes : 10 GiB
  
ceph osd pool set-quota mypool max_bytes 21474836480 
set-quota max_bytes = 21474836480 for pool mypool

ceph osd pool get-quota mypool 
quotas for pool 'mypool': 
  max objects: 1 k objects 
  max bytes : 20 GiB

noscrub 和 nodeep-scrub:控制是否整理或深层整理存储池,可临时解决高 I/O 问题。
浅整理:主要整理文件的元数据
深层整理:主要整理数据是否一致性

ceph osd pool get mypool noscrub 
noscrub: false                   #查看当前是否关闭轻量扫描数据,默认为不关闭,即开启

ceph osd pool get mypool nodeep-scrub 
nodeep-scrub: false              #查看当前是否关闭深度扫描数据,默认为不关闭,即开启

ceph osd pool set mypool noscrub true
set pool 1 noscrub to true       #可以修改某个指定的 pool 的轻量级扫描测量为 true,即不执行 轻量级扫描

ceph osd pool set mypool nodeep-scrub true 
set pool 1 nodeep-scrub to true  #可以修改某个指定的 pool 的深度扫描测量为 true,即不执 行深度扫描

ceph osd pool get mypool noscrub 
noscrub: true                    #再次查看就不进行轻量级扫描了

ceph osd pool get mypool nodeep-scrub 
nodeep-scrub: true               #再次查看就不执行深度扫描了

scrub_min_interval:集群存储池的最小清理时间间隔,默认值没有设置,可以通过配置文件中的 osd_scrub_min_interval 参数指定间隔时间。

ceph osd pool get mypool scrub_min_interval 
Error ENOENT: option 'scrub_min_interval' is not set on pool 'mypool' 

scrub_max_interval:整理存储池的最大清理时间间隔,默认值没有设置,可以通过配置文件中的 osd_scrub_max_interval 参数指定。

ceph osd pool get mypool scrub_max_interval 
Error ENOENT: option 'scrub_max_interval' is not set on pool 'mypool' 

deep_scrub_interval:深层整理存储池的时间间隔,默认值没有设置,可以通过配置文件中的 osd_deep_scrub_interval 参数指定。

ceph osd pool get mypool deep_scrub_interval 
Error ENOENT: option 'deep_scrub_interval' is not set on pool 'mypool' 

查看默认整理的属性

ceph daemon osd.3 config show | grep scrub
"mds_max_scrub_ops_in_progress": "5", 
"mon_scrub_inject_crc_mismatch": "0.000000", 
"mon_scrub_inject_missing_keys": "0.000000",
"mon_scrub_interval": "86400", 
"mon_scrub_max_keys": "100", 
"mon_scrub_timeout": "300", 
"mon_warn_not_deep_scrubbed": "0", 
"mon_warn_not_scrubbed": "0", 
"osd_debug_deep_scrub_sleep": "0.000000", 
"osd_deep_scrub_interval": "604800.000000", #定义深度清洗间隔,604800 秒=7 天 
"osd_deep_scrub_keys": "1024", 
"osd_deep_scrub_large_omap_object_key_threshold": "200000", 
"osd_deep_scrub_large_omap_object_value_sum_threshold": "1073741824", 
"osd_deep_scrub_randomize_ratio": "0.150000", "osd_deep_scrub_stride": "524288", 
"osd_deep_scrub_update_digest_min_age": "7200", "osd_max_scrubs": "1", #定义一个 ceph OSD daemon 内能够同时进行 scrubbing 的操作数 
"osd_op_queue_mclock_scrub_lim": "0.001000", 
"osd_op_queue_mclock_scrub_res": "0.000000", 
"osd_op_queue_mclock_scrub_wgt": "1.000000", 
"osd_requested_scrub_priority": "120", 
"osd_scrub_auto_repair": "false", 
"osd_scrub_auto_repair_num_errors": "5", 
"osd_scrub_backoff_ratio": "0.660000", 
"osd_scrub_begin_hour": "0", 
"osd_scrub_begin_week_day": "0", 
"osd_scrub_chunk_max": "25", 
"osd_scrub_chunk_min": "5", 
"osd_scrub_cost": "52428800", 
"osd_scrub_during_recovery": "false", 
"osd_scrub_end_hour": "24", 
"osd_scrub_end_week_day": "7", 
"osd_scrub_interval_randomize_ratio": "0.500000", 
"osd_scrub_invalid_stats": "true", #定义 scrub 是否有效 "osd_scrub_load_threshold": "0.500000", 
"osd_scrub_max_interval": "604800.000000", #定义最大执行 scrub 间隔,604800 秒=7 天 
"osd_scrub_max_preemptions": "5", 
"osd_scrub_min_interval": "86400.000000", #定义最小执行普通 scrub 间隔,86400 秒=1 天 
"osd_scrub_priority": "5", "osd_scrub_sleep": "0.000000",

二、存储池快照

快照用于读存储池中的数据进行备份与还原,创建快照需要占用的磁盘空间会比较大,取决于存储池中的数据大小,使用以下命令创建快照

2.1 创建快照

# 命令 1
ceph osd pool mksnap {pool-name} {snap-name} 
# 示例
ceph osd pool mksnap mypool mypool-snap 
created pool mypool snap mypool-snap 

#命令 2
rados -p {pool-name} mksnap {snap-name} 
# 示例
rados -p mypool mksnap mypool-snap2 
created pool mypool snap mypool-snap2

2.2 验证快照

rados lssnap -p mypool 
1 mypool-snap 2020.11.03 16:12:56 
2 mypool-snap2 2020.11.03 16:13:40 
2 snaps

2.3 回滚快照

测试上传文件后创建快照,然后删除文件再还原文件,基于对象还原。

# 格式
rados rollback <obj-name> <snap-name> roll back object to snap <snap-name>

# 上传文件 
[ceph@ceph-deploy ceph-cluster]$ rados -p mypool put testfile /etc/hosts

#验证文件 
[ceph@ceph-deploy ceph-cluster]$ rados -p mypool ls 
msg1 
testfile 
my.conf

#创建快照 
[ceph@ceph-deploy ceph-cluster]$ ceph osd pool mksnap mypool mypool-snapshot001 
created pool mypool snap mypool-snapshot001

#验证快照 
[ceph@ceph-deploy ceph-cluster]$ rados lssnap -p mypool 
3 mypool-snap 2020.11.04 14:11:41 
4 mypool-snap2 2020.11.04 14:11:49 
5 mypool-conf-bak 2020.11.04 14:18:41 
6 mypool-snapshot001 2020.11.04 14:38:50 
4 snaps

#删除文件
[ceph@ceph-deploy ceph-cluster]$ rados -p mypool rm testfile

#删除文件后,无法再次删除文件,提升文件不存在
[ceph@ceph-deploy ceph-cluster]$ rados -p mypool rm testfile 
error removing mypool>testfile: (2) No such file or directory

#通过快照还原某个文件 
[ceph@ceph-deploy ceph-cluster]$ rados rollback -p mypool testfile mypool-snapshot001 
rolled back pool mypool to snapshot mypool-snapshot001 

#再次执行删除就可以执行成功 
[ceph@ceph-deploy ceph-cluster]$ rados -p mypool rm testfile

2.4 删除快照

# 格式
ceph osd pool rmsnap <poolname> <snap>

[ceph@ceph-deploy ceph-cluster]$ rados lssnap -p mypool 
3 mypool-snap 2020.11.04 14:11:41 
4 mypool-snap2 2020.11.04 14:11:49 
5 mypool-conf-bak 2020.11.04 14:18:41 
6 mypool-snapshot001 2020.11.04 14:38:50 
4 snaps

[ceph@ceph-deploy ceph-cluster]$ ceph osd pool rmsnap mypool mypool-snap 
removed pool mypool snap mypool-snap 

[ceph@ceph-deploy ceph-cluster]$ rados lssnap -p mypool 
4 mypool-snap2 2020.11.04 14:11:49 
5 mypool-conf-bak 2020.11.04 14:18:41 
6 mypool-snapshot001 2020.11.04 14:38:50 
3 snaps

三、数据压缩

如果使用 bulestore 存储引擎,ceph 支持称为”实时数据压缩”即边压缩边保存数据的功能,该功能有助于节省磁盘空间,可以在BlueStore OSD上创建的每个Ceph池上启用或禁用压缩, 以节约磁盘空间,默认没有开启压缩,需要后期配置并开启。

3.1 启用压缩并指定压缩算法

ceph osd pool set <pool name> compression_algorithm snappy # 默 认 算 法 为 snappy

snappy:该配置为指定压缩使用的算法默认为 sanppy,还有 none、zlib、lz4、zstd 和 snappy 等算法,zstd 压缩比好,但消耗 CPU,lz4 和 snappy 对 CPU 占用较低,不建议使用 zlib。

3.2 指定压缩模式

ceph osd pool set <pool name> compression_mode aggressive

aggressive:压缩的模式,有 none、aggressive、passive 和 force,默认 none。
none:从不压缩数据。
passive:除非写操作具有可压缩的提示集,否则不要压缩数据。
aggressive:压缩数据,除非写操作具有不可压缩的提示集。
force:无论如何都尝试压缩数据,即使客户端暗示数据不可压缩也会压缩,也就是在所有情况下都使用压缩。

查看默认配置

ceph daemon osd.3 config show | grep compression

存储池压缩设置参数:

compression_algorithm #压缩算法 
compression_mode #压缩模式 
compression_required_ratio #压缩后与压缩前的压缩比,默认为.875 
compression_max_blob_size: #大于此的块在被压缩之前被分解成更小的 blob(块),此设置将覆盖 bluestore 压缩 max blob * 的全局设置。 
compression_min_blob_size:#小于此的块不压缩, 此设置将覆盖 bluestore 压缩 min blob *的全局设置。

全局压缩选项,这些可以配置到 ceph.conf 配置文件,作用于所有存储池:

bluestore_compression_algorithm #压缩算法 
bluestore_compression_mode #压缩模式 
bluestore_compression_required_ratio #压缩后与压缩前的压缩比,默认为.875 
bluestore_compression_min_blob_size #小于它的块不会被压缩,默认 0 
bluestore_compression_max_blob_size #大于它的块在压缩前会被拆成更小的块,默认 0 
bluestore_compression_min_blob_size_ssd #默认 8k 
bluestore_compression_max_blob_size_ssd #默认 64k 
bluestore_compression_min_blob_size_hdd #默认 128k 
bluestore_compression_max_blob_size_hdd #默认 512k

到 node 节点验证: 
[root@ceph-node3 ~]# ceph daemon osd.11 config show | grep compression

#修改压缩算法
[ceph@ceph-deploy ~]$ ceph osd pool set mypool compression_algorithm snappy 
set pool 1 compression_algorithm to snappy

[ceph@ceph-deploy ~]$ ceph osd pool get mypool compression_algorithm 
compression_algorithm: snappy

#修改压缩模式: 
[ceph@ceph-deploy ~]$ ceph osd pool set mypool compression_mode force 
set pool 1 compression_mode to force 
[ceph@ceph-deploy ~]$ ceph osd pool get mypool compression_mode 
compression_mode: force
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ceph 存储池命令 以及 数据压缩 的相关文章

随机推荐

  • node实现发送邮件和上传文件功能

    文章目录 node实现发送邮件带附件 node 是什么 下载 文件结构 index html文件 nodemails js文件 node实现发送邮件带附件 记录下我前不久刚刚接触过的node用来实现发送邮件和上传文件图片功能 希望能帮到和我
  • L2-021 点赞狂魔分数

    微博上有个 点赞 功能 你可以为你喜欢的博文点个赞表示支持 每篇博文都有一些刻画其特性的标签 而你点赞的博文的类型 也间接刻画了你的特性 然而有这么一种人 他们会通过给自己看到的一切内容点赞来狂刷存在感 这种人就被称为 点赞狂魔 他们点赞的
  • vector扩容

    扩容原理 vector以连续的数组存放数据 当vector空间已满时会申请新的空间并将原容器中的内容拷贝到新空间中 并销毁原容器 存储空间的重新分配会导致迭代器失效 因为分配空间后需要进行拷贝 编译器会预分配更多空间以减少发生拷贝影响程序效
  • 音视频绕不开的话题之WebRTC

    什么是WebRTC 闲来无事 我们今天探讨下音视频绕不开的一个话题 WebRTC WebRTC之于音视频行业 无异于FFMpeg 可以说WebRTC的开源 让音视频行业大跨步进入发展快车道 WebRTC是一个支持实时音视频通信的开源项目 它
  • Vue3项目开发使用技巧setup

  • 【第18例】IPD进阶:跨部门团队 —— SPDT超级产品开发团队

    目录 简介 专栏目录 详细内容 相关专栏推荐 CSDN学院 作者简介 简介 今天 IPD体系进阶100例 就更新到了第 18 例 SPDT 是英文 Super Product Development Team 的英文首字母简称
  • java网络编程:9、基于TCP的socket编程(二)服务器端循环监听接收多个客户端_多线程服务器程序

    声明 本教程不收取任何费用 欢迎转载 尊重作者劳动成果 不得用于商业用途 侵权必究 文章目录 一 核心代码编写 1 服务器端程序的编写 2 客户端程序的编写 3 测试打印输出 二 系列文章 java网络编程 上篇讲了基于tcp的编程的一些基
  • 【Python-利用动态二维码传输文件(七)】计算文件传输速度,以KB/s形式显示在Tkinter界面。

    上一篇文章实现了动态二维码文件接收端的基本功能 但只能显示接收数据的完成度 不能显示接收速度 本篇文章研究怎么计算文件传输速度 并以KB s形式显示在Tkinter界面 方便以后调试和优化代码 一 程序效果展示 可以看到右下角有统计发送速度
  • 应用 POI 解析 Excel 表格并批量上传到数据库

    在日常生活中 我们时常会遇到添加用户之类的操作 但是这类操作 只能一位一位的添加 遇到向我这种强迫症晚期患者 会被烦死 那么应用 POI 解析含有用户信息的 EXCEL 表格会省很多时间 本文针对解析 EXCEL 表格以及将表格上的内容批量
  • 机器学习——损失函数(lossfunction)

    问 非监督式机器学习算法使用样本集中的标签构建损失函数 答 错误 非监督式机器学习算法不使用样本集中的标签构建损失函数 这是因为非监督式学习算法的目的是在没有标签的情况下发现数据集中的特定结构和模式 因此它们依赖于不同于监督式学习的算法 因
  • ADC介绍

    ADC Analogue to Digital Converter 模数转换器 analog to Digital Converter 简称ADC 是一种数据转换器 它通过将模拟信号编码为二进制代码 使数字电路能够与现实世界进行接口 模数转
  • react学习笔记(完整版 7万字超详细)

    1 React基础 1 1 react 调试插件安装 浏览器右上角 gt 更多工具 gt 扩展程序 gt 开启开发者模式 gt 将调试插件包拖拽进来即可 1 2 react 基本使用 React 需要引入两个包 React ReactDOM
  • uni-app开发微信小程序,wx.onNetworkStatusChange、uni.onNetworkStatusChange网络状态监听不生效问题

    问题描述 1 该方法只能在手机上进行验证才能生效 小程序开发工具上面不生效 2 该方法只能写在onLoad方法里面 写在mounted方法不生效 错误写法 mounted uni onNetworkStatusChange function
  • JDBC(超详细)

    1 简介 JDBC Java DataBase Connectivity java数据库连接 是一种用于执行SQL语句的Java API 可以为多种 关系数据库提供统一访问 它由一组用Java语言编写的类和接口组成 JDBC提供了一种基准
  • 图解使用mock.js获取四位数验证码

    Mock js是用来模拟产生一些虚拟的数据 可以让前端在后端接口还没有开发出来时独立开发 我们可以使用真实的url mockjs可以拦截ajax请求 返回设定好的数据 一 安装 npm install mockjs D 二 全局引入mock
  • SpringBoot 启动时自动执行代码的几种方式

    一 java自身的启动时加载方式 static代码块 static静态代码块 在类加载的时候即自动执行 构造方法 在对象初始化时执行 执行顺序在static静态代码块之后 二 Spring启动时加载方式 PostConstruct注解 Po
  • C语言初步总结

    内容比较多 大家可以复制做一个文档 然后用得时候直接搜索就好了 非常方便 不用网络也可以使用 第二周的学习总结 1 对C语言的介绍与初步认识 C语言的产生与发展 FORTRAN 1957年 ALGOL 60 1960年 传统C或K R C
  • RS485在切换收发状态的时候收到0x00

    介绍一下测试背景 我使用单片机的TTL232 通过MAX485芯片转成RS485协议 但是遇到一个问题 MAX485芯片在从发送状态切换到接收状态的时候会收到一个0x00 很显然这是一个 假 数据 并不是真实接收到的数据 这个0x00着实有
  • C++中namespace detail或namespace internal的使用

    在很多开源代码中偶尔会使用名字为 detail 或 internal 的命名空间 如OpenCV的modules目录中 有些文件中使用了namespace detail 有些文件中使用了namespace internal 名为detail
  • Ceph 存储池命令 以及 数据压缩

    文章目录 一 存储池操作 1 1 常用命令 1 2 删除存储池 1 3 存储池配额 1 4 存储池可用参数 二 存储池快照 2 1 创建快照 2 2 验证快照 2 3 回滚快照 2 4 删除快照 三 数据压缩 3 1 启用压缩并指定压缩算法