RHEL환경에서 VDO 사용하기
VDO 소개
- VDO; Virtual Data Optimizer 기술은 스토리지의 활용을 증가시키기 위해 데이터 중복제거, 압축 기능을 제공하는 스토리지 기술
- 활용 목적에 따른 아키텍쳐
- VM호스트 기반의 아키텍쳐
블록 디바이스 상단에 VDO 디스크 생성 후 하이퍼바이져를 통해 VM image 저장 - NFS 활용한 VDO 아키텍쳐
VDO디스크 생성 후 파일시스템 생성. NFS나 samba로 export 수행 -
VDO기반의 LVM구성
VDO디스크 생성 후 LV생성 후 파일시스템 생성. 필요시 NFS / samba로 export 수행 - 암호화 적용시 VDO구성
암호화 적용시 VDO하단에 암호화 알고리즘이 적용되어야 하기 때문에 중복제거의 큰 효과는 없음
- VM호스트 기반의 아키텍쳐
- 스토리지 스택별 VDO 구성
- VDO 아래 stack에 배치할 component
- Software RAID / DM Multi path
- VDO 상단 stack
- LVM cache / snapshot / thin provisioning
- unsupport stack
- VDO 상단에 다른 볼륨 구성, LVM 상단에 구성되는 VDO,
- VDO 아래 stack에 배치할 component
- 장점
- 공간활용도 증가
- VM호스트 머신으로 운영시 물리/논리의 용량 비율은 약 1:10 비율로 활용 가능
(1TB디스크로 중복제거와 압축 기능을 화용해 10TB까지 사용 가능) - Ceph기반의 경우 1:3 비율로 용량 활용 가능
- VM호스트 머신으로 운영시 물리/논리의 용량 비율은 약 1:10 비율로 활용 가능
- 공간활용도 증가
- 단점
- 암호화 / 중복제거 적용시 I/O 성능 저하
시스템 요구사항
- 메모리
- VDO모듈 (실제로 점유하는 메모리 용량은 i + ii + iii )
- 38MB의 고정 메모리 할당 + 블록 맵 크기 150MB 이상 필요
- logical size 1TB당 1.6MB 할당
- Physical size 1TB 당 268MB 할당
- UDS Size
- 기본 250MB 필요
-
인덱스 유형별 메모리
인덱스 유형 중복제거용 용량 비 고 Dense 1GB메모리당 당 1TB디스크 일반적으로 4TB 물리디스크에 1GB 인덱스 구성도 충분 Sparse 1GB메모리당 당 10TB디스크 권장 모드, 일반적으로 40TB 물리디스크에 1GB 인덱스 구성도 가능
- VDO모듈 (실제로 점유하는 메모리 용량은 i + ii + iii )
- 스토리지
- physical size는 최대 256TB 까지 구성 가능
- VDO 메타데이터와 UDS 인덱스 구성용 스토리지 구성
- 메타 데이터는 스토리지 4GB당 1MB를 저장하고, slabe당 1MB씩 추가로 저장
- 일반적으로 UDS 인덱스 구성시 dense는 1GB 메모리가 17GB스토리지를 사용, sparse는 170GB 스토리지를 사용
컴포넌트 리스트
- kvdo : VDO를 사용하기 위한 커널 모듈
- uds : VDO기반에서 인덱싱 후 중복데이터를 분석하는 커널 모듈, 새로운 데이터 저장시 이전에 저장된 데이터와 동일한지 검색 후 동일한 데이터를 두번 저장하지 않도록 참조 구성
- cli : 스토리지 구성 및 관리 수행
스토리지 용량 관리
- physical size : VDO를 사용하기 위한 블록장치, 메타데이터 크기를 뺀 값만큼의 용량을 사용
- logical size : VDO볼륨으로 셍성된 크기, 일반적으로는 physical size보다 크게 설정하면 되나, 기본값은 1:1 비율로 생성, logical 최대 사이즈는 4PB까지 사용가능
-
slab size : VDO볼륨에서 여러개 slab으로 분할 관리. 기본 slab크기는 2GB씩 최대 8192개의 Slab이 생성될 수 있음
physical size별 권장 slab 크기Physical Size Slab Size 10 ~ 99GB 1GB 100GB ~ 1TB 2GB 2 ~ 256TB 32GB slab사이즈는 vdo 생성시 --vdoSlabSize={{ size }} 옵션으로 생성 가능
VDO 구축
- VDO 모듈 설치
$ yum install vdo kmod-kvdo $ lsmod | grep vdo kvdo 577536 0 uds 253952 1 kvdo dm_mod 151552 12 kvdo,dm_thin_pool,dm_bufio
- VDO 볼륨 생성
$ vdo create --name= {{ VDO 이름 }} --device={{ 디스크 경로 }} --vdoLogicalSize= {{ logical siz }}
- 파일시스템 생성
#xfs로 생성시
$ mkfs.xfs -K /dev/mapper/{{ VDO 이름 }}
#ext4로 생성시# mkfs.ext4 -E nodiscard /dev/mapper/{{ VDO 이름 }}
- /etc/fstab에 파일시스템 마운트
# xfs로 마운트시
$ /dev/mapper/{{ VDO 이름 }} {{ 마운트 경로 }} xfs defaults,x-systemd.device-timeout=0,x-systemd.requires=vdo.service 0 0
#ext4로 마운트시$ /dev/mapper/{{ VDO 이름 }} {{ 마운트 경로 }} ext4 defaults,x-systemd.device-timeout=0,x-systemd.requires=vdo.service 0 0
VDO 운영
- VDO 볼륨 관리
$ vdo start --name= {{ VDO 이름 }} or vdo start --all $ vdo stop --name= {{ VDO 이름 }} or vdo stop --all
- VDO 볼륨 활성화
#볼륨 활성화
$ vdo active --name {{ VDO 이름 }} or vdo active --all
\\#볼륨 비활성화$ vdo deactivate --name {{ VDO 이름 }} or vdo deactive ~-~-all
기본적으로 OS부팅시 VDO볼륨 활성화 수행 ( vdo create 시 ~-~-activate=disabled 옵션을 추가하면 자동 활성화 안함) - vdo볼륨 제거
$> vdo remove --name {{ VDO 이름 }} or vdo remove --all
- VDO에서 사용하지 않는 블록 삭제
$ systemctl enable --now fstrim.timer
- VDO 사용현황 확인
$ vdostats ~-~-human-readable \\Device 1K-blocks Used Available Use% Space saving% /dev/mapper/node1osd1 926.5G 21.0G 905.5G 2% 73% /dev/mapper/node1osd2 926.5G 28.2G 898.3G 3% 64%
- vdo 볼륨 크기 증가
# vdo growLogical ~-~-name=~{~{ VDO 이름 }} ~-~-vdoLogicalSize= ~{~{ 변경할 크기 }}
reference