CephFS 볼륨 만들기
Ceph 클러스터의 스토리지를 다른 컴퓨터에서 사용하려면, 제일 먼저 볼륨이란 것을 만들어야 합니다. 여기서는 Ceph File System(CephFS) 방식의 볼륨을 하나 만들어 보겠습니다.
CephFS와 관련된 명령은 예제 처럼 ceph fs
명령을 사용합니다. 볼륨(volume
)을 만들(create
)고, 이 볼륨의 이름은 cephfs
로 하겠습니다.
[root@OpenHCI-01 ~]# ceph fs volume create cephfs
잘 만들어지면, 아무 내용 없이 그냥 프롬프트가 표시됩니다. ceph fs ls
명령을 이용하면 CephFS 목록을 볼 수 있습니다.
[root@OpenHCI-01 ~]# ceph fs ls name: cephfs, metadata pool: cephfs.cephfs.meta, data pools: [cephfs.cephfs.data ] [root@OpenHCI-01 ~]#
name: cephfs
가 조회되고 있습니다. 잘 만들어졌습니다.
클라이언트 준비
참고: 클라이언트는 실습환경에서 Management 노드를 이용합니다. Rocky Linux 9.4의 Standard 패키지 환경을 기준으로 합니다.
Ceph 패키지가 설치되어서 CephFS를 마운트할 수 있는지 확인합니다. 이 경우는 설치되지 않았습니다.
[root@mgmt ~]# stat /sbin/mount.ceph stat: cannot statx '/sbin/mount.ceph': No such file or directory
cephadm
을 설치하고, 실행 권한을 줍니다.
[root@mgmt ~]# curl --silent --remote-name --location https://download.ceph.com/rpm-reef/el9/noarch/cephadm [root@mgmt ~]# chmod +x cephadm
cephadm
명령을 이용해서 reef
릴리즈 저장소를 추가합니다.
[root@mgmt ~]# ./cephadm add-repo --release reef Writing repo to /etc/yum.repos.d/ceph.repo... Enabling EPEL... Completed adding repo. [root@mgmt ~]#
CephFS를 마운트 할 때는 1)커널 드라이버를 이용한 방식, 2) FUSE를 이용한 방식 2가지가 있습니다. 여기서는 커널 드라이버 방식을 사용하겠습니다.cephadm install
명령으로 ceph-common
패키지를 설치합니다. 인터넷 연결이 느려서인지 몇십초 정도 걸렸습니다.
[root@mgmt ~]# ./cephadm install ceph-common Installing packages ['ceph-common']... [root@mgmt ~]#
CephFS를 마운트해서 사용할 클라이언트에 /etc/ceph 디렉토리를 만들고, Ceph 클러스터 노드(mon 노드 중 하나)에서 ceph config generate-minimal-conf
명령으로 ceph.conf
파일을 생성합니다.
[root@mgmt ~]# mkdir -p -m 755 /etc/ceph [root@mgmt ~]# ssh student@openhci-01.098.co.kr "sudo ceph config generate-minimal-conf" | sudo tee /etc/ceph/ceph.conf # minimal ceph.conf for 17593d3e-4e4d-11ef-90ca-005056b09910 [global] fsid = 17593d3e-4e4d-11ef-90ca-005056b09910 mon_host = [v2:172.16.2.11:3300/0,v1:172.16.2.11:6789/0] [v2:172.16.2.12:3300/0,v1:172.16.2.12:6789/0] [v2:172.16.2.13:3300/0,v1:172.16.2.13:6789/0] [root@mgmt ~]#
클라이언트 사용자 만들기
CephFS를 마운트해서 사용하려면 적절한 권한을 가진 클라이언트 사용자가 있어야 합니다.
아래 명령어로 cephfs
의 /share1
디렉토리에 대해서 읽기/쓰기(rw
) 권한을 가진 클라이언트용(client.
) 사용자(user1
)를 만듭니다.
[root@OpenHCI-01 ~]# ceph fs authorize cephfs client.user1 /share1 rw [client.user1] key = AQCJO6pmABfuIBAAFGRnABkJwBnSHeiITuMLFQ== [root@OpenHCI-01 ~]#
클라이언트 사용자 인증에 사용할 키(key
) 값이 잘 생성됐습니다.
클라이언트 사용자의 키 값은 ceph auth get
명령을 이용해서 조회해 볼 수 있습니다. 여러가지 내용이 있지만 키 값이 조회된다는 것만 알고 넘어가겠습니다.
[root@OpenHCI-01 ~]# ceph auth get client.user1 [client.user1] key = AQCJO6pmABfuIBAAFGRnABkJwBnSHeiITuMLFQ== caps mds = "allow rw fsname=cephfs" caps mon = "allow r fsname=cephfs" caps osd = "allow rw tag cephfs data=cephfs" [root@OpenHCI-01 ~]#
이제 이 키 값을 클라이언트에서 인증용으로 사용할 수 있게 가져가야 합니다.
우선 클라이언트 user1(client.user1
)의 인증 정보를 조회해서(ceph auth get
)으로 지정한 파일(-o ceph.client.user1.keyring
)로 내보냅니다.
[root@OpenHCI-01 ~]# ceph auth get client.user1 -o ceph.client.user1.keyring [root@OpenHCI-01 ~]# cat ceph.client.user1.keyring [client.user1] key = AQBaEapm5X9iJRAAmC0vYi+ycVDmzcmsWO/orw== caps mds = "allow rw fsname=cephfs" caps mon = "allow r fsname=cephfs" caps osd = "allow rw tag cephfs data=cephfs" [root@OpenHCI-01 ~]#
[root@OpenHCI-01 ~]# ceph auth get-key client.user1 AQCJO6pmABfuIBAAFGRnABkJwBnSHeiITuMLFQ==[root@OpenHCI-01 ~]# [root@OpenHCI-01 ~]# ceph auth get-key client.user1 > ceph.client.user1.key [root@OpenHCI-01 ~]#
저장된 키링 파일을 클라이언트(172.16.1.2
)에 복사합니다.
[root@OpenHCI-01 ~]# scp ./ceph.client.user1.keyring root@172.16.1.2:/etc/ceph/ceph.client.user1.keyring root@172.16.1.2's password: ceph.client.user1.keyring 100% 195 312.0KB/s 00:00 [root@OpenHCI-01 ~]#
클라이언트에서 키링 파일의 파일 권한을 644로 설정합니다.
[root@mgmt ~]# chmod 644 /etc/ceph/ceph.client.user1.keyring
클라이언트에 마운트
마운트 포인트로 사용할 디렉토리를 만들(mkdir -p
)어야 합니다. 이름은 cephfs
로 하겠습니다.
mkdir -p /mnt/cephfs
이제 mount -t ceph
명령으로 Ceph 클러스터에 있는 CephFS 볼륨 중에 cephfs(fs=cephfs
)를 user1 사용자 인증 정보(name=user1
)를 사용해서/mnt/cephfs
디렉토리에 마운트해 보겠습니다.
[root@mgmt ~]# mount -t ceph :/ /mnt/cephfs -o name=user1,fs=cephfs [root@mgmt ~]# df Filesystem 1K-blocks Used Available Use% Mounted on devtmpfs 4096 0 4096 0% /dev tmpfs 8057128 0 8057128 0% /dev/shm tmpfs 3222852 31156 3191696 1% /run /dev/mapper/rl-root 73334784 6885028 66449756 10% / /dev/sda2 983040 379404 603636 39% /boot /dev/mapper/rl-home 126324736 1666356 124658380 2% /home /dev/sda1 613160 7200 605960 2% /boot/efi tmpfs 1611424 112 1611312 1% /run/user/1000 tmpfs 1611424 36 1611388 1% /run/user/1001 172.16.2.11:6789,172.16.2.12:6789,172.16.2.13:6789:/ 199172096 0 199172096 0% /mnt/cephfs
잘 붙었습니다!!!
정말 잘 동작하는지 파일을 만들어 보겠습니다.
[root@mgmt ~]# echo 'Hello Ceph!' > /mnt/cephfs/hello.txt [root@mgmt ~]# ls -l /mnt/cephfs total 1 -rw-r--r--. 1 root root 12 Aug 1 11:58 hello.txt [root@mgmt ~]# cat /mnt/cephfs/hello.txt Hello Ceph!
인터넷 검색하다보면 mount 할 때 :/
앞에 Ceph 클러스터 노드들 주소 정보도 줄줄이 넣어주고, 사용자 키 값도 넣어주고 하는 형태의 예가 많이 나옵니다.
현재는 특별히 지정하지 않아도 /etc/ceph 디렉토리에 있는 ceph.conf와 같은 디렉토리에 있는 사용자 키링 파일에서 정보를 자동으로 가져옵니다. 그래서 간단하게 입력해서 사용할 수 있습니다.
참고 : Ceph 버전에 따라서 차이는 있을 수 있습니다.
fstab 수정
이제 /etc/fstab 파일에 마운트 정보를 추가해서, 리부팅해도 자동으로 마운트되게 해보겠습니다. fstab 파일에 다음과 같은 내용을 추가해줍니다.
:/ /mnt/cephfs ceph name=user1,_netdev,defaults 0 2
해석해보면 다음과 같습니다.
:/
: 마운트할 대상은 Ceph 클러스터 볼륨의/
디렉토리/mnt/cephfs
마운트 위치ceph
: 파일 시스템 종류name=user1
: Ceph 클러스터 연결시 사용할 인증 정보_netdev
: 네트워크 장치이므로, 네트워크 연결 후에 마운트defaults
: 파일 시스템 속성 설정. defaults는 rw, nouser, auto, exec, suid가 적용0
: dump 명령으로 덤프되지 않는 파일시스템2
: 루트 파일시스템이 아닌 파일시스템
실습 환경에서 편집한 예는 다음과 같습니다.
[root@mgmt ~]# vi /etc/fstab # # /etc/fstab # Created by anaconda on Sat May 18 05:28:37 2024 # # Accessible filesystems, by reference, are maintained under '/dev/disk/'. # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info. # # After editing this file, run 'systemctl daemon-reload' to update systemd # units generated from this file. # /dev/mapper/rl-root / xfs defaults 0 0 UUID=c68461f4-5e2a-456d-8067-d1a00af11045 /boot xfs defaults 0 0 UUID=C81A-7A21 /boot/efi vfat umask=0077,shortname=winnt 0 2 /dev/mapper/rl-home /home xfs defaults 0 0 /dev/mapper/rl-swap none swap defaults 0 0 :/ /mnt/cephfs ceph name=user1,_netdev,defaults 0 2
변경 값을 적용하기 위해서 시스템 데몬들을 다시 로드(systemctl daemon-reload
)하고, 기존에 마운트된 파일 시스템을 때어내고(umount /mnt/cephfs
), 다시 /mnt/cephfs를 마운트(mount /mnt/cephfs) 해보겠습니다.
[root@mgmt ~]# systemctl daemon-reload [root@mgmt ~]# umount /mnt/cephfs [root@mgmt ~]# df Filesystem 1K-blocks Used Available Use% Mounted on devtmpfs 4096 0 4096 0% /dev tmpfs 8057128 0 8057128 0% /dev/shm tmpfs 3222852 31160 3191692 1% /run /dev/mapper/rl-root 73334784 6885016 66449768 10% / /dev/sda2 983040 379404 603636 39% /boot /dev/mapper/rl-home 126324736 1666352 124658384 2% /home /dev/sda1 613160 7200 605960 2% /boot/efi tmpfs 1611424 108 1611316 1% /run/user/1000 tmpfs 1611424 36 1611388 1% /run/user/1001 [root@mgmt ~]# mount /mnt/cephfs [root@mgmt ~]# df Filesystem 1K-blocks Used Available Use% Mounted on devtmpfs 4096 0 4096 0% /dev tmpfs 8057128 0 8057128 0% /dev/shm tmpfs 3222852 31160 3191692 1% /run /dev/mapper/rl-root 73334784 6885028 66449756 10% / /dev/sda2 983040 379404 603636 39% /boot /dev/mapper/rl-home 126324736 1666352 124658384 2% /home /dev/sda1 613160 7200 605960 2% /boot/efi tmpfs 1611424 108 1611316 1% /run/user/1000 tmpfs 1611424 36 1611388 1% /run/user/1001 172.16.2.11:6789,172.16.2.12:6789,172.16.2.13:6789:/ 199172096 0 199172096 0% /mnt/cephfs
Ceph Dashboard와 CephFS
Ceph Dashboard에서 CephFS와 관련된 정보는 “File Systems” 메뉴에서 볼 수 있습니다.
Ceph Dashboard 웹 페이지에 접속해서 File Systems > cephfs 항목을 확장(> 눌러서 V로)하면 그림과 같은 볼륨 정보도 볼 수 있습니다.
“클라이언트들” 탭을 누르면 그림과 같은 클라이언트 연결 정보도 볼 수 있습니다.
Ceph File System 소개
Ceph File Sytem(줄여서 CephFS)은 Ceph의 분산형 객체 저장소인 RADOS를 기반으로 구축된 POSIX 호환 파일 시스템입니다. CephFS는 공유 홈 디렉터리, HPC 스크래치 공간, 분산 워크플로 공유 스토리지와 같은 전통적인 사용 사례를 포함해 다양한 애플리케이션을 위한 최첨단, 다용도, 고가용성, 고성능 파일 저장소를 제공하기 위해 노력하고 있습니다.
CephFS는 새로운 아키텍처 선택을 통해 이러한 목표를 달성합니다. 특히 파일 메타데이터는 파일 데이터와 분리된 RADOS 풀에 저장되며, 더 높은 처리량의 워크로드를 지원하도록 확장 가능한 메타데이터 서버 클러스터, 즉 MDS를 통해 제공됩니다. 파일 시스템의 클라이언트는 파일 데이터 블록을 읽고 쓰기 위해 RADOS에 직접 액세스할 수 있습니다. 따라서 기본 RADOS 개체 저장소의 크기에 따라 워크로드를 선형적으로 확장할 수 있습니다. 클라이언트를 위해 데이터 I/O를 중개하는 게이트웨이나 브로커가 없습니다.
데이터에 대한 액세스는 클라이언트와 MDS가 공동으로 관리하는 분산 메타데이터 캐시 상태에 대한 권한 역할을 하는 MDS 클러스터를 통해 조정됩니다. 메타데이터에 대한 변경은 각 MDS에서 일련의 효율적인 쓰기 작업을 통해 RADOS의 저널에 집계되며, 메타데이터 상태는 MDS에 로컬로 저장되지 않습니다. 이 모델을 사용하면 POSIX 파일 시스템의 컨텍스트 내에서 클라이언트 간에 일관되고 신속한 협업이 가능합니다.
CephFS는 새로운 설계와 파일 시스템 연구에 대한 기여로 수많은 학술 논문의 주제입니다. Ceph에서 가장 오래된 스토리지 인터페이스이며 한때 RADOS의 주요 사용 사례였습니다. 지금은 다른 두 개의 스토리지 인터페이스와 결합되어 최신 통합 스토리지 시스템을 구성합니다: RBD(Ceph Block Device)와 RGW(Ceph Object Storage Gateway)입니다.