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
사용자를 추가합니다. mon
과 osd
에 rbd
프로파일(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/rbd
를 umount /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