ssd와 HDD가 모두 존재할 때, HDD의 성능을 향상 시켜보려고 합니다.
File의 inode 정보는 data에 저장됩니다.
먼저, Ceph의 FileSystem(이하 fs)에는 metadata와 data가 존재합니다.
metadata는 당연히 ssd에 넣으셨겠죠.
하지만 문제는 data입니다.
저는 당연히 inode 같은 메타 정보는 ceph FS의 metadata에 저장되는 줄 알았습니다.
하지만 CEPH 공식 문서의 CREATE A CEPH FILE SYSTEM 게시물에 다음과 같은 내용이 있습니다.
The data pool used to create the file system is the “default” data pool and the location for storing all inode backtrace information, which is used for hard link management and disaster recovery. For this reason, all CephFS inodes have at least one object in the default data pool. If erasure-coded pools are planned for file system data, it is best to configure the default as a replicated pool to improve small-object write and read performance when updating backtraces. Separately, another erasure-coded data pool can be added (see also Erasure code) that can be used on an entire hierarchy of directories and files (see also File layouts).
요약해보자면 erasure code는 성능이 좋지는 않은데, 이 구성을 default data pool로 설정시 inode가 default pool에 저장 된다고 합니다.
erasure 코드와 상관 없이, HDD기반의 cephfs의 성능을 향상 시키기 위해서는 cephfs-metadata pool
과 cephfs-default-data pool
을 ssd로 하고, 실제로 사용할 DATA Pool
을 따로 만들어주면 됩니다.
구성하기
크게 보면 metadata와 inode를 위한 ssd cephfs를 생성하고,
이 FS에 HDD 풀을 추가합니다.
마지막으로 HDD 풀을 기본 DATA 풀처럼 사용하도록 설정합니다.
cephfs-metadata 풀 생성
~ ► sudo ceph osd pool create cephfs-meta
~ ► sudo ceph osd pool set cephfs-meta crush_rule replicated_ssd;
# replicated_ssd는 device class가 ssd인 장치만을 사용하도록 설정 된 crush_rule입니다.
~ ► sudo ceph osd pool set cephfs-meta compression_algorithm lz4
# IO 속도를 위해 lz4 압축을 사용합니다.
cephfs-default-data (inode 저장용) 풀 생성
~ ► sudo ceph osd pool create cephfs-inode
~ ► sudo ceph osd pool set cephfs-inode crush_rule replicated_ssd;
# replicated_ssd는 device class가 ssd인 장치만을 사용하도록 설정 된 crush_rule입니다.
~ ► sudo ceph osd pool set cephfs-inode compression_algorithm lz4
# IO 속도를 위해 lz4 압축을 사용합니다.
cephfs-data 풀 생성
~ ► sudo ceph osd pool create cephfs-data
~ ► sudo ceph osd pool set cephfs-data crush_rule replicated_hdd;
# replicated_ssd는 device class가 ssd인 장치만을 사용하도록 설정 된 crush_rule입니다.
~ ► sudo ceph osd pool set cephfs-data compression_algorithm zstd
# 압축률을 위해 lz4 압축을 사용합니다.
cephfs 생성
~ ► sudo ceph fs new cephfs-test cephfs-meta cephfs-inode
cephfs에 data 풀 추가
# cephfs 상태 확인
~ ► ceph fs status
-> cephfs-test - 8 clients
===================
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
0 active pve3-2 Reqs: 0 /s 1183k 1142k 177k 1227
POOL TYPE USED AVAIL
cephfs-meta metadata 0 1242G
cephfs-inode data 0 1245G
~ ► ceph fs add_data_pool cephfs-test cephfs-inode
~ ► ceph fs status
cephfs-test - 8 clients
===================
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
0 active pve3-2 Reqs: 0 /s 1183k 1142k 177k 1227
POOL TYPE USED AVAIL
cephfs-meta metadata 0 1242G
cephfs-data data 0 1245G
cephfs-inode data 0 7723G
cephfs의 데이터가 data로 삽입되도록 설정
가장 중요한 단계이면서 약간 복잡할 수 있습니다.
참고한 자료는 다음 ceph 공식 자료를 활용하였습니다.
ADDING A DATA POOL TO THE FILE SYSTEM
먼저 ceph fs를 마운트 되어있다고 가정합니다.
마운트 한 위치로 이동하여 setfattr을 이용하여 attribute를 적용합니다.
cd /mnt/cephfs-test
setfattr -n ceph.dir.layout.pool -v cephfs-inode ./
setfattr -n ceph.dir.layout.pool -v cephfs-inode ./*
마무리
다른 머신에서도 이 cephfs를 마운트하여 파일을 쓰면
inode pool에 파일이 써지는 것을 볼수 있습니다.
답글 남기기