가볍게 CephFS 만들고 Linux에 붙여보기

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)입니다.

참고자료

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

You May Also Like