본문 바로가기
Tech/Stroage

ceph block device, file system, object storage 사용하기

by 타이호 2017. 12. 24.
반응형

이전에 Ceph을 구성을 했으니 이제 Ceph 스토리지를 사용하기 위해 아래와 같이 Object, File, Block Storage로 사용해본다.

 

1. Rados Gateway 추가하기

이전에 설치한 mon 노드에 radosgw 를 설치 한다. 그리고 설치 하기 전에 ceph.conf안에 해당 옵션을 준다. default port는 7480 이다.

ceph.conf를 아래와 같이 수정한다. 만약 처음 설치 할 때 부터 아래 처럼 포트를 바꾸기를 원한다면 최초 ceph-deploy new 할 때 이 설정을 넣어둔다.

나중에 하게 되면 기존에 배포된 ceph의 ceph.conf를 overwrite를 해야 한다.


[client]
rgw frontends = civetweb port=80

~$ceph-deploy rgw create compute01


 

2. OSD Pool 생성하기

이제 Client를 생성했으니, 실제로 Object를 생성하고, Object가 Placement Group으로 assign 되는 것을 확인한다.


#OSD POOL 생성
root@compute01:~# ceph osd pool create mytest 8
pool 'mytest' created

#OSD POOL 확인
root@compute01:~# ceph osd lspools
0 rbd,1 .rgw.root,2 default.rgw.control,3 default.rgw.data.root,4 default.rgw.gc,5 default.rgw.log,6 mytest,
위에서 보는 것 처럼 기본적으로 rbd pool이 생성된다. 그리고 새로 생성한 mytest라는 pool 역시 생성된다.

# Object를 생성하고, 데이터가 저장된 파일을 지정한다.
root@compute01:~# rados put test-object-1 curtin-install.log --pool=mytest

#Object가 해당 POOL에 생성되었는지 확인한다
root@compute01:~# rados -p mytest ls
test-object-1

#해당 Object가 어느 map에 위치하는지 확인 할 수 있다
root@compute01:~# ceph osd map mytest test-object-1
osdmap e20 pool 'mytest' (6) object 'test-object-1' -> pg 6.74dc35e2 (6.2) -> up ([0,1], p0) acting ([0,1], p0)

#Object삭제는 아래와 같이 수행한다.
rados rm test-object-1 --pool=mytest

#POOL 삭제는 아래와 같이 수행한다
ceph osd pool rm mytest


 

3. RBD (Rados Block Device) 사용하기

생성된 ceph cluster에 Block Device Pool을 하나 만들고 해당 block device를 마운트 해본다.

새로운 노드 controller02를 하나 추가 하고 여기에 ceph cluster에 생성된 block device를 마운트 한다.
새로 추가된 노드는 /etc/hosts에 추가해둔다.


#ceph client로 사용할 노드에 ceph 패키지 설치
ceph-deploy install controller02

#ceph.client.admin.keyring을 controller02에 복사한다.
ceph-deploy admin controller02
ubuntu@controller02:/etc/ceph$ ls
ceph.client.admin.keyring ceph.conf rbdmap tmpDOWCkj

#Block Device 생성 ( http://docs.ceph.com/docs/master/rados/operations/pools/#create-a-pool )
#testrbdpool 이라는 POOL을 생성 뒤에 숫자와 replicated는 옵션인데, 계산해서 넣어줘야 하지만 그냥 default로 넣어준다.
root@compute01:/etc/ceph# ceph osd pool create testrbdpool 8 8 replicated
pool 'testrbdpool' created
root@compute01:/etc/ceph# ceph osd lspools
0 rbd,1 .rgw.root,2 default.rgw.control,3 default.rgw.data.root,4 default.rgw.gc,5 default.rgw.log,6 mytest,7 testrbdpool,

#매뉴얼에 rbd pool init <pool-name> 이 명령어는 없어 진듯 그냥 rbd 를 이용하여 block device image를 생성한다(4g 사이즈로)
#생성할 때 아래 처럼 그냥 생성하니 feature 를 disable 하라고 나온다.
root@controller02:~# rbd create testrbd --size 4096 --pool testrbdpool
root@controller02:~# rbd list --pool testrbdpool
testrbd

#rbd로 이미지를 생성 했으니 이제 실제 호스트에 그 이미지를 붙여보자(block device)
root@controller02:~# rbd map --pool testrbdpool testrbd
rbd: sysfs write failed
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable".
In some cases useful info is found in syslog - try "dmesg | tail" or so.
rbd: map failed: (6) No such device or address

#그래서 다시 rbd 이미지를 생성할 때 feature를 넣어서 생성한다.
root@controller02:~# rbd create testrbd --size 4096 --pool testrbdpool --image-feature layering
root@controller02:~# rbd list --pool testrbdpool
testrbd

#생성한 rbd image를 블록 디바이스로 붙여본다.
root@controller02:~# rbd map --pool testrbdpool testrbd
/dev/rbd0

#일반 디스크처럼 이제 사용할 수 있다. 디스크를 파티셔닝 해본다
root@controller02:~# fdisk -l
Disk /dev/rbd0: 4 GiB, 4294967296 bytes, 8388608 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4194304 bytes / 4194304 bytes

root@controller02:~# mkfs.ext4 -m0 /dev/rbd0
mke2fs 1.42.13 (17-May-2015)
Discarding device blocks: done
Creating filesystem with 1048576 4k blocks and 262144 inodes
Filesystem UUID: 3fdec675-b71f-42b6-a84a-0ad7532aa7b9
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

#생성된 디바이스를 마운트 한다.
root@controller02:~# mkdir /mnt/ceph-block-device
root@controller02:~# mount /dev/rbd0 /mnt/ceph-block-device/

#마운트 하고 나면 아래와 같이 보여진다.
root@controller02:~# df -kh
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 797M 8.9M 788M 2% /run
/dev/sda1 30G 6.3G 22G 23% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
tmpfs 100K 0 100K 0% /var/lib/lxd/shmounts
tmpfs 100K 0 100K 0% /var/lib/lxd/devlxd
tmpfs 797M 0 797M 0% /run/user/1000
/dev/rbd0 3.9G 8.0M 3.8G 1% /mnt/ceph-block-device

#해당 경로로 이동해보면 이제 디스크를 쓸 수 있다.
root@controller02:~# cd /mnt/ceph-block-device/
root@controller02:/mnt/ceph-block-device# ls
lost+found


 

4. Shared File System 사용하기

#ceph admin node에서 ceph-deploy를 위한 mds를 생성한다.
ubuntu@controller01:~/cluster$ ceph-deploy mds create compute01
root@compute01:/var/log/ceph# ceph mds stat
e4:, 1 up:standby

#아래와 같이 cephfs를 위한 pool을 생성하고 filesystem을 생성한다.
ceph osd pool create cephfs_data <pg_num>
ceph osd pool create cephfs_metadata <pg_num>
ceph fs new <fs_name> cephfs_metadata cephfs_data

<예시>
root@compute01:~# ceph osd pool create cephfs_data 8
pool 'cephfs_data' created
root@compute01:~# ceph osd pool create cephfs_metadata 8
pool 'cephfs_metadata' created
root@compute01:~# ceph fs new cephfs cephfs_metadata cephfs_data
new fs with metadata pool 10 and data pool 9
root@compute01:~# ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
root@compute01:~# ceph mds stat
e7: 1/1/1 up {0=compute01=up:active}

MDS가 active 되고 난 이후에 filesystem을 마운트 할 수 있다.
ceph-deploy로 mds를 구성하지 않고 수행하면 ceph mds stat에서 아래와 같이 active가 되지 않는다
root@compute01:~# ceph mds stat
e2: 0/0/1 up
Mount CephFS
ceph filesystem을 마운트 하기 위해 위에서 생성한 client 호스트에서 마운트 한다.
root@controller02:/mnt# mkdir ceph-fs
root@controller02:/mnt# mount -t ceph 172.16.1.56:6789:/ /mnt/ceph-fs
mount: wrong fs type, bad option, bad superblock on 172.16.1.56:6789:/,
missing codepage or helper program, or other error

In some cases useful info is found in syslog - try
dmesg | tail or so.
위와 같이 cephx로 인증이 되는 경우에는 아래 옵션을 넣어준다.

root@controller02:/mnt# mount -t ceph 172.16.1.56:6789:/ /mnt/ceph-fs -o name=admin,secret=AQA1qHlZl0vLMxAAqfUeP2bEO9FfxzQCX4EQvQ==
root@controller02:/mnt# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
..............
172.16.1.56:6789:/ on /mnt/ceph-fs type ceph (rw,relatime,name=admin,secret=<hidden>,acl)

root@controller02:/mnt/ceph-fs# df -kh
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 797M 8.9M 788M 2% /run
/dev/sda1 30G 6.3G 22G 23% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
tmpfs 100K 0 100K 0% /var/lib/lxd/shmounts
tmpfs 100K 0 100K 0% /var/lib/lxd/devlxd
tmpfs 797M 0 797M 0% /run/user/1000
/dev/rbd0 3.9G 8.0M 3.8G 1% /mnt/ceph-block-device
172.16.1.56:6789:/ 70G 332M 70G 1% /mnt/ceph-fs

 

반응형