RBD 이미지 만들고 Linux에 마운트

Ceph는 RADOS Block Device(RDB)라고 하는 블럭 디바이스 형식도 지원합니다.

작업을 시작하기 전에, ceph health 명령으로 Ceph 클러스터의 상태를 확인합니다.

[root@OpenHCI-01 ~]# ceph health
HEALTH_OK
[root@OpenHCI-01 ~]#

RBD를 만들기 위해서는 우선 디바이스 풀을 먼저 만들어 주어야 합니다. 그리고 디바이스 풀을 만들려면, 먼저 디바이스 풀에서 사용할 풀을 결정(보통은 새로 만듬)해야 합니다.

RBD용 풀 만들기

풀 이름은 중복되면 안됩니다. ceph osd pool ls 명령을 이용해서 현재 정의되어 있는 풀 목록을 확인합니다.

[root@OpenHCI-01 ~]# ceph osd pool ls
.mgr
cephfs.cephfs.meta
cephfs.cephfs.data
[root@OpenHCI-01 ~]#

ceph osd pool create 명령을 이용해서 rbd이란 이름의 풀을 만듭니다.

[root@OpenHCI-01 ~]# ceph osd pool create rbd
pool 'rbd' created
[root@OpenHCI-01 ~]#

참고 : pool은 Ceph 클러스터의 스토리지 효율/성능을 위해 다양한 옵션을 조합해서 설정합니다. 여기서는 연습이라 특별히 지정하지 않고, 기본값으로 만든 것입니다.

rbd pool init 명령을 이용해서 rbd용으로 사용할 rbd 풀을 초기화 합니다.

[root@OpenHCI-01 ~]# rbd pool init rbd
[root@OpenHCI-01 ~]#

ceph df 명령으로 스토리지와 풀 용량 및 사용량 정보를 확인합니다.

[root@OpenHCI-01 ~]# ceph df
--- RAW STORAGE ---
CLASS     SIZE    AVAIL     USED  RAW USED  %RAW USED
ssd    600 GiB  600 GiB  190 MiB   190 MiB       0.03
TOTAL  600 GiB  600 GiB  190 MiB   190 MiB       0.03

--- POOLS ---
POOL                ID  PGS   STORED  OBJECTS     USED  %USED  MAX AVAIL
.mgr                 1    1  449 KiB        2  1.3 MiB      0    190 GiB
cephfs.cephfs.meta   2   16   12 KiB       22  120 KiB      0    190 GiB
cephfs.cephfs.data   3  256     12 B        1   12 KiB      0    190 GiB
rbd                  5   32     19 B        1   12 KiB      0    190 GiB
[root@OpenHCI-01 ~]#

RBD 클라이언트 사용자 만들기

rbd 클라이언트의 접속용으로 client.user-rbd 사용자를 추가합니다. monosdrbd 프로파일(profile)을 적용하고, 인증용 키링은 ceph.client.user-rbd.keyring 파일로 저장(-o)하겠습니다.

[root@OpenHCI-01 ~]# ceph auth get-or-create client.user-rbd mon 'profile rbd' osd 'profile rbd'
[root@OpenHCI-01 ~]# 

ceph auth get 명령을 이용해서 사용자가 잘 만들어졌는지 확인합니다.

[root@OpenHCI-01 ~]# ceph auth get client.user-rbd
[client.user-rbd]
        key = AQCNLKxm7Cc/JhAAnHmllMgF8CH32wD5palHrw==
        caps mon = "profile rbd"
        caps osd = "profile rbd"
[root@OpenHCI-01 ~]#

ceph auth get 명령을 이용해서 client.user-rbd 사용자의 인증 정보를 지정한 파일(-o ceph.client.user1.keyring)로 내보냅니다.
cat 명령으로 ceph.client.user1.keyring 파일을 확인합니다.

[root@OpenHCI-01 ~]# ceph auth get client.user-rbd -o ceph.client.user-rbd.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 ~]#

ceph auth get 명령으로 client.user-rbd 사용자가 잘 만들어졌는지 확인합니다.

참고 : 프로파일과 사용자 관리와 관련해서는 따로 자세히 다루겠습니다.

scp 명령으로 저장된 키링 파일을 rbd를 사용할 클라이언트(172.16.1.2)에 복사합니다.

[root@OpenHCI-01 ~]# scp ./ceph.client.user-rbd.keyring root@172.16.1.2:/etc/ceph/ceph.client.user-rbd.keyring
root@172.16.1.2's password:
ceph.client.user1.keyring                         100%  195   312.0KB/s   00:00
[root@OpenHCI-01 ~]#

RBD 이미지 만들기

rbd create 명령을 이용해서, 크기가 1GiB(--size 1024, 메가바이트 단위)인 이미지를 rbd 풀에 example-1GiB라는 이름으로 만듭니다.

[root@OpenHCI-01 ~]# rbd create --size 1024 rbd/example-1GiB

잘 만들어졌는지 rbd ls 명령으로 확인합니다.

[root@OpenHCI-01 ~]# rbd ls
example-1GiB
[root@OpenHCI-01 ~]#

rbd info 명령을 이용하면 example-1GiB 이미지의 구체적인 정보를 볼 수 있습니다.

[root@OpenHCI-01 ~]# rbd info example-1GiB
rbd image 'example-1GiB':
        size 1 GiB in 256 objects
        order 22 (4 MiB objects)
        snapshot_count: 0
        id: 3ab6c7804eb8
        block_name_prefix: rbd_data.3ab6c7804eb8
        format: 2
        features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
        op_features:
        flags:
        create_timestamp: Fri Aug  2 11:52:24 2024
        access_timestamp: Fri Aug  2 11:52:24 2024
        modify_timestamp: Fri Aug  2 11:52:24 2024
[root@OpenHCI-01 ~]#

Linux에서 마운트

앞서 CephFS 과정에서 cephadm install 명령으로 ceph-common 패키지를 설치했습니다. 그리고 위에서 사용자 키링을 복사해온 상태입니다.
rbd --version으로 설치된 rbd를 확인하고, ls 명령으로 /etc/ceph 디렉토리에 키링 파일이 잘 있는지 확인합니다.

[root@mgmt ~]# rbd --version
ceph version 18.2.4 (e7ad5345525c7aa95470c26863873b581076945d) reef (stable)
[root@mgmt ~]# ls -l /etc/ceph/
total 20
-rw-r--r--. 1 root root  40 Aug  1 11:02 ceph.client.user1.key
-rw-r--r--. 1 root root 182 Jul 31 22:33 ceph.client.user1.keyring
-rw-r--r--. 1 root root 118 Aug  2 09:57 ceph.client.user-rbd.keyring
-rw-r--r--. 1 root root 265 Jul 31 21:09 ceph.conf
-rw-r--r--. 1 root root  92 Jul 13 00:00 rbdmap
[root@mgmt ~]# ls /etc/ceph/
ceph.client.user1.key  ceph.client.user1.keyring  ceph.client.user-rbd.keyring  ceph.conf  rbdmap
[root@mgmt ~]#

rbd map 명령으로 rbd 풀에 있는(--pool rbd), example-1GiB 이미지를, user-rbd 사용자로 매핑(연결)합니다. 실행 결과 /dev/rbd0 디바이스로 매핑됐습니다.

[root@mgmt ~]# rbd map --pool rbd example-1GiB --id user-rbd
/dev/rbd0
[root@mgmt ~]#

rbd device list 명령으로 연결된 rbd 디바이스 목록을 확인할 수 있습니다.

[root@mgmt ~]# rbd device list
id  pool  namespace  image         snap  device
0   rbd              example-1GiB  -     /dev/rbd0
[root@mgmt ~]#

parted 명령을 이용해서 /dev/rdb0 디바이스에 파티션 테이블을 만듭(mktable gpt)니다.

[root@mgmt ~]# parted /dev/rbd0 mktable gpt
Information: You may need to update /etc/fstab.

parted 명령을 이용해서 /dev/rbd0 디바이스에 디스크 0%(처음)부터, 디스크 100%(끝)까지 영역을 xfs 유형의 primary 파티션으로 만듭(mkpart)니다.

[root@mgmt ~]# parted /dev/rbd0 mkpart primary xfs 0% 100%
Information: You may need to update /etc/fstab.

/dev/rbd0p1 디바이스를 xfs 형식으로 포맷(mkfs)합니다.

[root@mgmt ~]# mkfs.xfs /dev/rbd0p1
mkfs.xfs: small data volume, ignoring data volume stripe unit 128 and stripe width 128
meta-data=/dev/rbd0p1            isize=512    agcount=4, agsize=65408 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=0
data     =                       bsize=4096   blocks=261632, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.
[root@mgmt ~]#

마운트 포인트로 이용할 /mnt/rbd 디렉토리를 만듭(mkdir -p)니다.

mkdir -p /mnt/rbd

mount 명령으로 /dev/rbd0p1 디바이스를 /mnt/rbd 디렉토리에 마운트합니다. 그리고 잘 마운트 됐는지 df 명령으로 확인해봅니다.

[root@mgmt ~]# mount /dev/rbd0p1 /mnt/rbd/
[root@mgmt ~]# df -h /mnt/rbd/
Filesystem      Size  Used Avail Use% Mounted on
/dev/rbd0p1     958M   39M  920M   5% /mnt/rbd
[root@mgmt ~]#

정말 잘 동작하는지 파일을 만들어고, 읽어 보겠습니다.

[root@mgmt ~]# echo 'Hello Ceph!' > /mnt/rbd/hello.txt
[root@mgmt ~]# ls -l /mnt/rbd
total 4
-rw-r--r--. 1 root root 12 Aug  2 13:36 hello.txt
[root@mgmt ~]# cat /mnt/rbd/hello.txt
Hello Ceph!
[root@mgmt ~]#

fstab 수정

실습을 위해 앞서 마운트한 /mnt/rbdumount /mnt/rbd 명령으로 언마운트하고, rbd device unmap /dev/rbd0 명령으로 디바이스 언매핑하고, rbd device list 명령으로 디바이스 목록을 확인합니다.

[root@mgmt ~]# umount /mnt/rbd
[root@mgmt ~]# rbd device unmap /dev/rbd0
[root@mgmt ~]# rbd device list

/etc/fstab 를 통해서 부팅시에 자동으로 마운트되게 하려면, 다음 작업을 먼저 해주어야 합니다.

rbdmap 서비스가 시스템 시작시 활성화(enable)되도록 설정합니다.

[root@mgmt ~]# systemctl enable --now rbdmap
Created symlink /etc/systemd/system/multi-user.target.wants/rbdmap.service → /usr/lib/systemd/system/rbdmap.service.
[root@mgmt ~]#

/etc/ceph/rdbmap 파일을 수정해서 아래와 같이 매핑 정보(rbd/example-1GiB id=user-rbd )를 추가해줍니다.

[root@mgmt ~]# vi /etc/ceph/rbdmap
# RbdDevice             Parameters
#poolname/imagename     id=client,keyring=/etc/ceph/ceph.client.keyring

rbd/example-1GiB    id=user-rbd

rbdmap 구성 정보를 다시 로드(reload)합니다.

[root@mgmt ~]# systemctl reload rbdmap

/etc/fstab에 다음과 같이 추가해줍니다.

/dev/rbd0p1 /mnt/rbd ext4 defaults,noatime,_netdev 0 0

fstab 예

[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
/dev/rbd0p1          /mnt/rbd                xfs     defaults,noatime,_netdev    0 0

/etc/fstab의 변경 내용을 적용하기 위해서 시스템 데몬들을 다시 로드(systemctl daemon-reload)합니다.

[root@mgmt ~]# systemctl daemon-reload

mount 명령으로 /mnt/rdb 디렉토리를 마운트해 봅니다.

[root@mgmt ~]# mount /mnt/rbd

df /mnt/rbd 명령으로 잘 마운트됐는지 확인합니다.

[root@mgmt ~]# df /mnt/rbd
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/rbd0p1       980992 39884    941108   5% /mnt/rbd

답글 남기기

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

You May Also Like