在 Ceph 中,我们可以对一个 Pool 的空间大小文件数设置配额大小, 对 RBDimage/volume 也可心进行在线调整大小, 十分方便.


Table of Contents

  1. Pool 配额设置
    1. 设置 Pool 的配额大小
    2. 查寻 Pool 配额设置
    3. 取消 Pool 的配额
  2. RBD 镜像在线调整大小
    1. 利用 libvirt 调整 rbd 镜像
      1. 在物理机上调整大小
      2. 在虚拟机上调整大小
    2. 利用内核模块调整 RBD 大小

Pool 配额设置

设置 Pool 的配额大小

  1. 设置空间大小 配额
1
2
3
4
## usage
$ ceph osd pool set-quota {pool-name} max_bytes {bytes}
## e.g.
$ ceph osd pool set-quota test-pool max_bytes $((100 * 1024 * 1024 * 1024))
  1. 设置 文件数 配额
1
2
3
4
## usage
$ ceph osd pool set-quota {pool-name} max_objects {file_num}
## e.g.
$ ceph osd pool set-quota test-pool max_objects 10000
  1. 两个配额可以同时设置, 既设置空间限制, 又设置文件数限制.

查寻 Pool 配额设置

1
2
3
4
## usage
$ ceph osd pool get-quota {pool-name}
## e.g.
$ ceph osd pool get-quota test-pool

取消 Pool 的配额

要取消一个 Pool 的配额, 只需要将相应的限制设为 0 即可.

1
2
3
4
5
## usage
$ ceph osd pool set-quota {pool-name} max_bytes|max_objects 0
## e.g.
$ ceph osd pool set-quota test-pool max_bytes 0
$ ceph osd pol set-quota test-pool max_objects 0

RBD 镜像在线调整大小

RBD 镜像调整大小很简单. 若是离线状态, 可以直接对其调整大小, 若是已经将其挂载到系统中, 则需要将其卸载, 调整后再挂载. 对于挂载到虚拟机上的可以通过 virsh 命令在线调整.

利用 libvirt 调整 rbd 镜像

在物理机上调整大小

  1. 获取当前镜像大小
1
2
3
4
5
6
7
8
9
## usage
$ qemu-img info -f rbd "rbd:{pool-name}/{image-name}"
## e.g.
$ qemu-img info -f rbd "rbd:volume/test-imgage"
image: json:{"pool": "volumes", "image": "test-image", "driver": "rbd"}
file format: rbd
virtual size: 50G (53687091200 bytes)
disk size: unavailable
cluster_size: 4194304
  1. 将镜像大小调整到一个合适的大小, 一般只能调大, 否则很可能会损坏文件系统. 若要调小容量, 需要加上 --allow-shrink 选项.
1
2
3
## e.g.
$ qemu-img resize -f rbd "rbd:volumes/test-image" 30G --allow-shrink
Image resized.
  1. 列出所有挂载的 镜像.
1
2
3
4
## usage
$ virsh domblklist {domain-name}
## e.g.
$ virsh domblklist rbd-test
  1. 调整 libvirt 块设备
1
2
$ virsh blockresize --domain rbd-test --path vdb --size 60G
$ virsh info volumes/test-block

在虚拟机上调整大小

  1. 重新挂载 rbd, 假定挂载到 /mnt/rbd/data:
1
$ sudo mount -o remount,rw /dev/vdb1
  1. 文件系统为 xfs:
1
$ xfs_growfs /mnt/rbd/data
  1. 文件系统为 ext3/ext4:
1
2
3
4
$ e2fsck -fy /dev/vdb1
$ resize2fs /dev/vdb1
## check rbd size
$ df -h

利用内核模块调整 RBD 大小

在 内核版本在3.10+ 以上的系统上, 可以直接使用 rbdresize 功能:

  1. 获取 RBD 镜像当前大小:
1
2
3
4
5
6
7
8
9
10
11
12
13
$ rbd info volumes/volume-a737fff5-6426-42ab-8873-4119bbecebbf
rbd image 'volume-a737fff5-6426-42ab-8873-4119bbecebbf':
size 60 GiB in 15360 objects
order 22 (4 MiB objects)
id: 2b4301cac20ca
block_name_prefix: rbd_data.2b4301cac20ca
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
op_features:
flags:
create_timestamp: Tue Sep 18 09:00:49 2018
parent: images/c18d8e1d-b4df-42ec-b06f-53bbe53187c1@snap
overlap: 1.1 GiB
  1. 物理机调整 RBD 大小:
1
$ rbd resize volumes/volume-a737fff5-6426-42ab-8873-4119bbecebbf --size 80G
  1. 虚拟机调整 RBD 大小:
1
2
3
4
5
### xfs
$ xfs_growfs /dev/vdb1
### ext4
$ e2fsck -fy /dev/vdb1
$ resize2fs /dev/vdb1