ceph의 qos 정보
확장성이 뛰어난 분산형 스토리지 시스템인 Ceph는 클라우드 컴퓨팅과 빅 데이터 시대의 핵심 구성 요소로 자리 잡았습니다. 기업과 조직에서 데이터 스토리지에 대한 수요가 증가함에 따라 Ceph는 안정성, 확장성, 성능과 같은 강력한 기능을 통해 이러한 요구를 충족합니다. 그러나 클러스터 규모가 커지고 워크로드가 다양해지면서 효율적인 리소스 할당과 성능 격리를 보장하는 방법이 중요한 문제로 대두되고 있습니다. 이러한 맥락에서 Ceph의 서비스 품질 기능은 특히 중요합니다.
Ceph의 QoS 구현, 특히 RADOS 블록 장치 모듈은 IOPS 및 대역폭과 같은 스토리지 리소스의 사용을 제어하고 제한하는 메커니즘을 제공합니다. 이는 멀티테넌트 환경에서 서비스 품질을 유지하고 리소스 과다 사용 또는 '이웃 노이즈' 문제를 방지하는 데 매우 중요합니다. 관리자는 QoS 매개변수를 정확하게 구성함으로써 다양한 가상 머신, 컨테이너 또는 애플리케이션에 적절한 스토리지 리소스를 할당하여 전반적인 시스템 성능과 응답성을 보장할 수 있습니다.
이 백서에서는 RBD QoS 설정의 효과를 검증하고 정량화하는 방법에 중점을 두고 Ceph RBD의 QoS 특성을 심층적으로 살펴봅니다. 일련의 테스트와 분석을 통해 QoS 매개변수가 RBD 성능에 미치는 영향과 특정 워크로드 및 성능 요구사항에 맞게 조정하는 방법을 보여드립니다. Ceph를 처음 사용하든 숙련된 사용자이든, RBD의 QoS 기능을 이해하고 적용하는 것은 스토리지 시스템의 효율성과 안정성을 개선하는 데 있어 매우 중요한 단계입니다.
테스트 환경
OS: 우분투 20.04
커널: 5.4.0-163-generic
CPU / 메모리: 32C / 128G
하드 드라이브: 10T
테스트 프로세스
ceph rbd 스토리지를 사용하여 가상 머신 풀업
fio로 무제한 속도로 iops 및 초당 테스트하기
이미지 QOS IOPS 속도 제한 테스트 RBD IOPS 활성화
이미지 QOS BPS 속도 제한 테스트 RBD BPS 활성화
풀 QOS IOPS 속도 제한 테스트 RBD IOPS 활성화
풀 qos bps 속도 제한 테스트 rbd bps 활성화
블록 디바이스에서 초당 속도 제한을 위한 QEMU 테스트하기
블록 장치에서 IOPS 속도 제한을 위한 QEMU 테스트하기
QOS를 제거하고 다시 테스트하여 복원되었는지 확인합니다.
테스트 단계
현재 이미지의 qos 구성 보기
rbd -p libvirt-pool config image ls scan.img|grep qos
스토리지 풀의 qos 구성을 확인합니다. 스토리지 풀의 qos 제한은 모든 이미지의 총 qos가 설정값을 초과하지 않아야 한다는 것입니다.
rbd config pool ls libvirt-pool|grep qos
기본적으로 설정되지 않은 경우 bps와 iops가 모두 0으로 표시되어 기본적으로 제한이 없음을 알 수 있습니다. rbd_qos_schedule_tick_min=50은 qos의 최소 스케줄링 간격이 50밀리초임을 나타내며, 50밀리초마다 현재 io 작업이 qos 구성을 준수하는지 여부를 확인합니다. 여기에 설명된 rbd_qos_write_iops_burst_seconds=1은 쓰기 IOPS 제한에 도달한 후 RBD 이미지가 버스트 모드에서 쓰기 작업을 계속할 수 있는 시간을 나타냅니다. 이 버스트 모드를 사용하면 연속적인 고속 쓰기보다는 짧은 고부하 상황을 처리하기 위해 짧은 시간 동안 IOPS가 설정된 제한을 초과할 수 있습니다. 이 매개변수의 값이 1초이면 IOPS 제한이 트리거된 후 쓰기 작업이 다음 1초 동안 높은 IOPS를 유지할 수 있으며, 그 이후에는 설정된 rbd_qos_write_iops_limit 값으로 다시 제한되며, bps의 burst_seconds의 의미도 유사하게 적용됩니다.
관련 매개변수에 대해 설명합니다:
**IOPS **초당 I/O
**read IOPS **초당 I/O 읽기 수
**write IOPS **초당 쓰기 I/O
**bps **초당 바이트
**읽은 바이트 수:** 초당 읽은 바이트 수
**쓰기 bps:** 초당 기록되는 바이트 수
fio로 읽기 및 쓰기 테스트
fio는 디스크 및 파일 시스템의 성능을 평가하는 데 널리 사용되는 유연한 I/O 성능 테스트 도구입니다. 다음은 무작위 읽기 및 쓰기 테스트에 fio를 사용하는 방법을 보여주는 기본 예제입니다:
fio --name=randrw_test --ioengine=libaio --iodepth=1 --rw=randrw --rwmixread=50 --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 --group_reporting
매개변수 설명
--name=randrw_test: 테스트 이름입니다.
--ioengine=libaio: Linux AIO를 I/O 엔진으로 사용합니다.
--I/O 깊이=1: 여기서 1로 설정하면 각 작업에는 주어진 순간에 하나의 I/O 작업만 대기 중임을 의미합니다.
--rw=randrw: 테스트 유형은 랜덤 읽기/쓰기입니다.
--rwmixread=50: 읽기/쓰기 혼합 비율, 여기서는 50%로 설정되어 읽기 작업과 쓰기 작업이 각각 50%를 차지합니다.
--bs=4k: 블록 크기가 4KB로 설정됩니다.
--direct=1: 캐시를 우회하여 직접 I/O를 사용합니다.
--size=1G: 각 작업 테스트 파일의 크기입니다.
--numjobs=4: 동시에 실행 중인 작업 수입니다.
--runtime=60: 테스트 런타임, 여기서 60초로 설정합니다.
--그룹_보고: 모든 작업의 결과를 그룹으로 보고합니다.
qos 제한 없이, 저는 fio를 사용하여 rbdImage 스토리지가 있는 VM에서 무작위 읽기/쓰기 테스트를 수행합니다.
rbd perf image iostat --pool libvirt-pool
image.png
scan.img의 이 이미지 테스트 iops에 대해 이미지 qos iops 제한을 100으로 설정합니다.
rbd -p libvirt-pool config image set scan.img rbd_qos_iops_limit 100
scan.img가 있는 VM에서 무작위 읽기/쓰기 테스트를 다시 수행합니다.
fio --name=randrw_test --ioengine=libaio --iodepth=1 --rw=randrw --rwmixread=50 --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 --group_reporting
IOPS 속도 제한 후 결과 보기
rbd perf image iostat --pool libvirt-pool
아이옵스 읽기 및 쓰기가 100을 넘지 않는 효과가 분명하다는 것을 알 수 있습니다.
이미지 활성화 이 이미지를 100KiB/s로 제한 스캔.img bps 테스트
rbd -p libvirt-pool config image set scan.img rbd_qos_iops_limit 0
rbd -p libvirt-pool config image set scan.img rbd_qos_bps_limit 100000
scan.img가 있는 VM에서 다시 무작위 쓰기 테스트 수행
fio --name=randrw_test --ioengine=libaio --iodepth=1 --rw=randwrite --rwmixread=50 --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 --group_reporting
초당 속도 제한 후 결과 보기
rbd perf image iostat --pool libvirt-pool
효과는 매우 분명하며 쓰기 처리량은 100KiB/s를 넘지 않습니다. 후자는 각 테스트에서 읽기 및 쓰기 iops와 bps를 분리하여 기대치를 충족하는 것으로 나타났습니다.
모든 이미지에 대한 스토리지 풀 iops 테스트 풀 qos iops 제한 사용
rbd -p libvirt-pool config image set scan.img rbd_qos_bps_limit 0
rbd config pool set libvirt-pool rbd_qos_iops_limit 200
scan.img가 있는 VM에서 무작위 읽기/쓰기 테스트를 다시 수행합니다.
fio --name=randrw_test --ioengine=libaio --iodepth=1 --rw=randrw --rwmixread=50 --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 --group_reporting
풀 수준에서 아이옵스 제한에 큰 영향을 미치지 않는다는 것을 알았습니다.
풀 쿼리 속도 제한 사용 스토리지 풀의 모든 이미지에 대해 속도 제한을 테스트합니다.
rbd config pool set libvirt-pool rbd_qos_iops_limit 0
rbd config pool set libvirt-pool rbd_qos_bps_limit 1000000
scan.img가 있는 VM에서 다시 무작위 쓰기 테스트 수행
fio --name=randrw_test --ioengine=libaio --iodepth=1 --rw=randwrite --rwmixread=50 --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 --group_reporting
나중에 풀 수준에서 읽기와 쓰기에 대한 iops와 bps가 별도로 수행되며, 이 제한도 효과적이지 않다는 것을 알 수 있습니다.
블록 디바이스에서 전송 속도 제한에 대한 qemu 테스트하기
다음 명령으로 현재 가상 머신의 qos를 확인할 수 있으며, 여기에서 스캔 가상 머신의 vdb 디스크, 즉 방금 테스트한 디스크의 qos를 확인할 수 있으며, 0은 속도 제한이 없음을 의미합니다.
virsh blkdeviotune scan vdb
스캔 VM의 경우 vdb에서 5MiB/s로 속도 제한
virsh blkdeviotune scan vdb --total-bytes-sec 5000000 --live
bps 속도 제한 후 결과를 확인하면 실제로 iops는 5MiB/s를 넘지 않습니다.
블록 장치에서 IOPS 속도 제한을 위한 QEMU 테스트하기
스캔 VM에 대한 DB의 IOPS 제한
virsh blkdeviotune scan vdb --total-bytes-sec 0 --live
virsh blkdeviotune scan vdb --total-iops-sec 1000 --live
스캔 가상 머신에서 무작위 읽기/쓰기 테스트 수행
fio --name=Test --ioengine=libaio --iodepth=64 --rw=randrw --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 --group_reporting
아이옵스 제한 후 결과를 확인하면 실제로 아이옵스가 0010을 초과하지 않습니다.
QOS를 제거하고 다시 테스트
scan.img가 있는 VM에서 무작위 읽기/쓰기 테스트를 다시 수행합니다.
fio --name=Test --ioengine=libaio --iodepth=64 --rw=randrw --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 --group_reporting
image.png
테스트 결론
ceph rbd qos를 사용하려면 여전히 IMAGE 수준에서 bps 및 iops 속도 제한을 수행하는 것이 좋으며 POOL 수준에서의 속도 제한은 그다지 효과적이지 않습니다. 물론 블록 디바이스에서 VM 디스크 io 제한을 수행하기 위해 qemu를 사용할 수도 있습니다. 로컬 하드 디스크도 속도 제한을 할 수 있는 반면, ceph rbd의 qos 개체는 ceph 클러스터의 rbdImage에 불과하다는 이점이 있습니다.
깃허브:
블로그**:**
사랑 생활, 사랑 운영 및 유지 관리





