Ceph分布式存储系列(五):pool池限制大小的方式

pool池不能和卷一样创建的时候指定大小,但是提供了限制配额的功能

两种限制方式:

  • 限制池内的object数 (max_objects)
  • 限制池内的存储数据大小(max_bytes)

简单来说,其实就几条命令而已

查看池配额设置
$ ceph osd pool get-quota {pool_name}

限制池中存放object的个数
$ ceph osd pool set-quota {pool_name} max_objects {number}

限制池中最大存储的数据量大小
$ ceph osd pool set-quota {pool_name} max_bytes {number}

下面就来简单测试一下

一、限制池内object个数

创建一个pg数为8的pool池-test

root@ceph-node1 ~]# ceph osd pool create test 8
pool 'test' created
[root@ceph-node1 ~]# ceph osd pool application enable test rbd
enabled application 'rbd' on pool 'test'

查看集群状态和池的使用量

[root@ceph-node1 mnt]# ceph -s
  cluster:
    id:     130b5ac0-938a-4fd2-ba6f-3d37e1a4e908
    health: HEALTH_OK
....
[root@ceph-node1 ~]# ceph df |grep POOLS -A 2
POOLS:
    POOL     ID     PGS     STORED     OBJECTS     USED     %USED     MAX AVAIL
    test      9       8        0 B           0      0 B         0       8.7 GiB

查看当前池的配额

[root@ceph-node1 ~]# ceph osd pool get-quota test
quotas for pool 'test':
  max objects: N/A
  max bytes  : N/A

配置max_objects,限制object数量

[root@ceph-node1 ~]# ceph osd pool set-quota test max_objects 10
set-quota max_objects = 10 for pool test
[root@ceph-node1 ~]#
[root@ceph-node1 ~]# ceph osd pool get-quota test
quotas for pool 'test':
  max objects: 10 objects
  max bytes  : N/A

创建10M大小的测试文件,手动传object进入测试

[root@ceph-node1 mnt]# dd if=/dev/zero of=/mnt/file bs=10M count=1
1+0 records in
1+0 records out
10485760 bytes (10 MB) copied, 0.0452471 s, 232 MB/s

将文件导入pool池中(起object名字为object-1)
[root@ceph-node1 mnt]# rados put object-1 file -p test

查看pool池内的object
[root@ceph-node1 mnt]# rados ls -p test
object-1

一共创建10个object

循环创建
[root@ceph-node1 mnt]# for i in {2..10}; do rados put object-$i file -p test; done

查看所有object
[root@ceph-node1 mnt]# rados ls -p test
object-4
object-10
object-3
object-5
object-7
object-1
object-2
object-8
object-6
object-9

以上,代表能够创建成功,稍等片刻后查看ceph状态

查看ceph状态和存储

[root@ceph-node1 mnt]# ceph -s
  cluster:
    id:     130b5ac0-938a-4fd2-ba6f-3d37e1a4e908
    health: HEALTH_WARN
            1 pool(s) full
....
[root@ceph-node1 mnt]# ceph df |grep POOLS -A 2
POOLS:
    POOL     ID     PGS     STORED      OBJECTS     USED        %USED     MAX AVAIL
    test      9       8     100 MiB          10     300 MiB      1.12       8.6 GiB

可以看到状态信息中已经有了一个警告: 1 pool(s) full,代表一个池已经满了

提示:
STORED 代表存储数据的真实大小
USED 代表一共使用了多大的空间(因为这里创建的池是默认的三副本,就是复制了三份,所以100x3,就是300M)

我们再试下添加新object和删除

[root@ceph-node1 mnt]# rados put object-11 file -p test
2021-01-20 17:05:28.388 7ff1b55399c0  0 client.170820.objecter  FULL, paused modify 0x55f2d92ae380 tid 0

甚至连删除都无法删除
[root@ceph-node1 mnt]# rados rm object-10 -p test
2021-01-20 17:05:40.149 7f43dac589c0  0 client.170835.objecter  FULL, paused modify 0x5624ef387bb0 tid 0

想恢复,很简单,调整下max_objects值为0即可

0为默认值,即代表不做限制

[root@ceph-node1 mnt]# ceph osd pool set-quota test max_objects 0
set-quota max_objects = 0 for pool test
[root@ceph-node1 mnt]#
[root@ceph-node1 mnt]# ceph osd pool get-quota test
quotas for pool 'test':
  max objects: N/A
  max bytes  : N/A
[root@ceph-node1 mnt]# ceph -s
  cluster:
    id:     130b5ac0-938a-4fd2-ba6f-3d37e1a4e908
    health: HEALTH_OK
二、限制池内的存储数据大小

在上面的基础上进行试验

删除上边测试用的object

[root@ceph-node1 mnt]# for i in {1..10}; do rados rm object-$i -p test; done;
[root@ceph-node1 mnt]#
[root@ceph-node1 mnt]# rados ls -p test
[root@ceph-node1 mnt]#

调整max_bytes,限制存储数据大小

[root@ceph-node1 mnt]# ceph osd pool set-quota test max_bytes 100M
set-quota max_bytes = 104857600 for pool test
[root@ceph-node1 mnt]#
[root@ceph-node1 mnt]# ceph osd pool get-quota test
quotas for pool 'test':
  max objects: N/A
  max bytes  : 100 MiB

创建100M的测试文件导入pool池中

[root@ceph-node1 mnt]# dd if=/dev/zero of=/mnt/file_100 bs=100M count=1
1+0 records in
1+0 records out
104857600 bytes (105 MB) copied, 1.00625 s, 104 MB/s
[root@ceph-node1 mnt]#
[root@ceph-node1 mnt]# ll -h file_100
-rw-r--r--. 1 root root 100M Jan 20 17:50 file_100
[root@ceph-node1 mnt]#
[root@ceph-node1 mnt]# rados put object-1 file_100 -p test
[root@ceph-node1 mnt]#

命令执行完之后,稍等一会,查看集群状态

[root@ceph-node1 mnt]# ceph -s
  cluster:
    id:     130b5ac0-938a-4fd2-ba6f-3d37e1a4e908
    health: HEALTH_WARN
            1 pool(s) full
[root@ceph-node1 mnt]# ceph df
POOLS:
    POOL     ID     PGS     STORED      OBJECTS     USED        %USED     MAX AVAIL
    test      9       8     100 MiB           1     300 MiB      1.12       8.7 GiB

这时如果再有数据进入,就会报错了

[root@ceph-node1 mnt]# rados put object-2 file_100 -p test
2021-01-20 17:54:12.740 7fa9704ce9c0  0 client.173479.objecter  FULL, paused modify 0x55e57f97d380 tid 0

恢复的话,和max_object一样,设置为0即可

[root@ceph-node1 mnt]# ceph osd pool set-quota test max_bytes 0
set-quota max_bytes = 0 for pool test
[root@ceph-node1 mnt]# ceph osd pool get-quota test
quotas for pool 'test':
  max objects: N/A
  max bytes  : N/A

如果想配置的更精细一点,那么也可以两个参数都配置

End……

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Ceph企业级分布式存储是一种基于对象存储的分布式文件系统。其原理和工程实践在《Ceph企业级分布式存储:原理与工程实践》一书中有详细的阐述。 Ceph采用了一个高度可扩展的架构,由多个互相通信的节点组成,包括存储节点和控制节点。存储节点是实际存储数据的设备,而控制节点则负责管理数据的分发和调度。Ceph使用一种称为RADOS(可靠自动分布式对象存储)的算法,将数据分片并存储在多个存储节点上,实现数据的冗余备份和负载均衡,提高了系统的可靠性和吞吐量。 在工程实践方面,Ceph提供了一套完整的存储解决方案。它包括了分布式块存储(RBD)、分布式文件系统(Ceph FS)和对象存储(RADOS Gateway)等功能模块,可以满足不同应用场景下的存储需求。Ceph还提供了丰富的管理工具和API接口,方便用户进行系统配置、监控和扩展。 此外,Ceph还支持动态扩容和故障恢复。当系统需要扩展存储容量时,可以通过添加新的存储节点来增加整体的存储能力。当存储节点发生故障或者数据丢失时,Ceph会自动进行数据的修复和恢复,保证了数据的可用性和一致性。 总之,《Ceph企业级分布式存储:原理与工程实践》是一本系统介绍Ceph存储系统的书籍,可以帮助读者了解Ceph的原理、架构和实践经验,对于企业在构建高可用性、高可靠性的存储系统方面具有重要的参考价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值