CephFS 통파티션 생성과 마운트, client 별 디렉토리 생성과 마운트

리눅스/Ceph|2016. 8. 2. 11:45
반응형

(ceph node 에서)



데이타 풀을 생성합니다.


$ ceph osd pool create cephfs_data 64 64

pool 'cephfs_data' created



메타데이타 풀을 생성합니다.


$ ceph osd pool create cephfs_metadata 64 64

pool 'cephfs_metadata' created



생성된 두개의 메타데이타 풀, 데이타 풀을 하나의 cephfs 로 만듭니다.


$ ceph fs new cephfs cephfs_metadata cephfs_data

new fs with metadata pool 2 and data pool 1



[상태 보기]


$ ceph fs ls

name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]


$ ceph mds stat

e5: 1/1/1 up {1:0=ceph=up:active}




(ceph-client 에서)


1-1) 커널 드라이버로 마운트 하기


OS 커널 버전이 높아서 ceph 마운트 드라이버를 지원하는 경우입니다.


# mkdir /mnt/mycephfs


# mount -t ceph 192.168.10.2:6789:/ /mnt/mycephfs -o name=admin,secret=AQA7CKBXBXP+CBAAuWxqtY5ZBFqoZGRviS++xg==


여기서 secret 은 ceph node 의 /etc/ceph/ceph.client.admin.keyring 에 있는 key 입니다.

별도의 client 계정과 key 를 생성하여 사용하는것이 좋습니다. (문서 하단부에 예제 있음)


그리고 명령 history 에 key 값이 남기 때문에, secret 옵션을 secretfile 로 바꾸고 key 가 들어있는

파일의 경로를 적어주는것이 좋다고 공식 document 에 적혀 있습니다. (실제로 잘 안됨..)

secretfile=/etc/ceph/admin.secret



# df -h

Filesystem            Size  Used Avail Use% Mounted on

udev                  982M     0  982M   0% /dev

tmpfs                 201M  3.3M  197M   2% /run

/dev/sda1             7.8G  2.0G  5.5G  27% /

tmpfs                1001M     0 1001M   0% /dev/shm

tmpfs                 5.0M     0  5.0M   0% /run/lock

tmpfs                1001M     0 1001M   0% /sys/fs/cgroup

tmpfs                 100K     0  100K   0% /run/lxcfs/controllers

tmpfs                 201M     0  201M   0% /run/user/0

192.168.10.2:6789:/   10G   68M   10G   1% /mnt/mycephfs



1-2) 커널 드라이버를 이용한 디렉토리별 마운트


커널 드라이버를 이용한 mount 는 fs 안에 디렉토리로 구분하여, 마운트가 가능합니다.


(ceph-client 에서)


스토리지 디스크 안에 디렉토리나 파일을 미리 만들어 봅시다.


# mkdir /mnt/mycephfs


# mount -t ceph 192.168.10.2:6789:/ /mnt/mycephfs -o name=admin,secret=AQA7CKBXBXP+CBAAuWxqtY5ZBFqoZGRviS++xg==


# mkdir -p /mnt/mycephfs/client01


# cd /mnt/mycephfs/client01/


# touch file1 file2


# mkdir dir1 dir2


# pwd

/mnt/mycephfs/client01


# ll

합계 4

drwxr-xr-x 1 root root    0  8월  2 12:54 ./

drwxr-xr-x 3 root root 4096  8월  2 11:52 ../

drwxr-xr-x 1 root root    0  8월  2 12:54 dir1/

drwxr-xr-x 1 root root    0  8월  2 12:54 dir2/

-rw-r--r-- 1 root root    0  8월  2 12:54 file1

-rw-r--r-- 1 root root    0  8월  2 12:54 file2


umount 후, 이번에는 생성했던 디렉토리로 마운트 해봅니다.


# umount /mnt/mycephfs


# mount -t ceph 192.168.10.2:6789:/client01 /mnt/mycephfs -o name=admin,secret=AQA7CKBXBXP+CBAAuWxqtY5ZBFqoZGRviS++xg==


# df -h

Filesystem                            Size  Used Avail Use% Mounted on

udev                                  982M     0  982M   0% /dev

tmpfs                                 201M  3.3M  197M   2% /run

/dev/sda1                             7.8G  2.0G  5.5G  27% /

tmpfs                                1001M     0 1001M   0% /dev/shm

tmpfs                                 5.0M     0  5.0M   0% /run/lock

tmpfs                                1001M     0 1001M   0% /sys/fs/cgroup

tmpfs                                 100K     0  100K   0% /run/lxcfs/controllers

tmpfs                                 201M     0  201M   0% /run/user/0

192.168.10.2:6789:/client01   10G   68M   10G   1% /mnt/mycephfs


디렉토리를 조회 해보면 client01 디렉토리 안에 있던 하위디렉토리, 파일이 보여집니다.


# ll /mnt/mycephfs

합계 4

drwxr-xr-x 1 root root    0  8월  2 12:54 ./

drwxr-xr-x 3 root root 4096  8월  2 11:52 ../

drwxr-xr-x 1 root root    0  8월  2 12:54 dir1/

drwxr-xr-x 1 root root    0  8월  2 12:54 dir2/

-rw-r--r-- 1 root root    0  8월  2 12:54 file1

-rw-r--r-- 1 root root    0  8월  2 12:54 file2


# mount |grep ceph
192.168.10.2:6789:/client01 on /mnt/mycephfs type ceph (rw,relatime,name=admin,secret=<hidden>,acl)

mount 는 ceph node, ceph-client 에서 동시에 할 수 있기 때문에 (디스크 공유)
실제 서비스를 할 경우 ceph node 에서 마운트를 해 놓고, ceph-client 가 mount 할 하위디렉토리를
실시간으로 생성, 제공하면 됩니다.


2-1) ceph fuse 로 마운트 하기


OS 커널 버전이 낮아서 ceph 드라이버가 없는경우 ceph 마운트를 하기위한 드라이버를 별도로 설치합니다.


(ceph-client 에서)


# apt-get install ceph-fuse


# mkdir -p /etc/ceph


# scp root@ceph:/etc/ceph/ceph.conf /etc/ceph/


# scp root@ceph:/etc/ceph/ceph.client.admin.keyring /etc/ceph/


# mkdir /mnt/mycephfs


# ceph-fuse -m ceph:6789 /mnt/mycephfs


# df -h

Filesystem      Size  Used Avail Use% Mounted on

udev            982M     0  982M   0% /dev

tmpfs           201M  3.3M  197M   2% /run

/dev/sda1       7.8G  2.0G  5.5G  27% /

tmpfs          1001M     0 1001M   0% /dev/shm

tmpfs           5.0M     0  5.0M   0% /run/lock

tmpfs          1001M     0 1001M   0% /sys/fs/cgroup

tmpfs           100K     0  100K   0% /run/lxcfs/controllers

tmpfs           201M     0  201M   0% /run/user/0

ceph-fuse        10G   68M   10G   1% /mnt/mycephfs



2-2) ceph fuse 를 이용한 디렉토리별 마운트


테스트를 위한 디렉토리 생성 방식은 1-2) 와 동일하므로, 여기서는 ceph-fuse 를 이용한 마운트 명령만 기술합니다.


# ceph-fuse -m 192.168.10.2:6789 -r /client01 /mnt/mycephfs

// 위와 같이 실행시 기본 admin 키로 접속하게 됩니다. 계정 및 key 를 생성했다면 해당 키파일을 /etc/ceph에 넣어놓고

   --id 옵션을 사용해야 합니다. (하단 Quota 설정 참고)


# df -h

Filesystem      Size  Used Avail Use% Mounted on

udev            982M     0  982M   0% /dev

tmpfs           201M  3.3M  197M   2% /run

/dev/sda1       7.8G  2.0G  5.5G  27% /

tmpfs          1001M     0 1001M   0% /dev/shm

tmpfs           5.0M     0  5.0M   0% /run/lock

tmpfs          1001M     0 1001M   0% /sys/fs/cgroup

tmpfs           100K     0  100K   0% /run/lxcfs/controllers

tmpfs           201M     0  201M   0% /run/user/0

ceph-fuse        10G   68M   10G   1% /mnt/mycephfs


# ll /mnt/mycephfs/

합계 6

drwxr-xr-x 1 root root    0  8월  2 12:54 ./

drwxr-xr-x 3 root root 4096  8월  2 11:52 ../

drwxr-xr-x 1 root root    0  8월  2 12:54 dir1/

drwxr-xr-x 1 root root    0  8월  2 12:54 dir2/

-rw-r--r-- 1 root root    0  8월  2 12:54 file1

-rw-r--r-- 1 root root    0  8월  2 12:54 file2




[CephFS Quota 설정]


하나의 큰 Ceph 스토리지에 다수의 디렉토리를 만들어 client 에게 하나씩 제공한다 하더라도

디렉토리 용량 제한이 없으면, Ceph 스토리지 용량을 최대한으로 사용한다거나 특정 client 가 다른 client 들에게 피해를 입히게 되는 경우가 발생합니다.


여기서는 생성했던 디렉토리 마다 용량 제한을 두는 방법을 기술합니다.

방법은 매우 간단합니다.



(ceph node 에서)


# apt-get install attr


위 예제에서 생성했던 디렉토리의 용량을 100M 로 제한하는 명령입니다.


# setfattr -n ceph.quota.max_bytes -v 102400000 /mnt/mycephfs/ceph-hosting-001/


용량 제한 상태를 보려면 아래와 같은 명령을 이용하면 됩니다.


# getfattr -n ceph.quota.max_bytes /mnt/mycephfs/ceph-hosting-001/ (잘 안됨..)


용량 제한을 해제하려면 0 값으로 다시 제한하면 해제됩니다.


# setfattr -n ceph.quota.max_bytes -v 0 /mnt/mycephfs/ceph-hosting-001/



(ceph-client 에서)


# ceph-fuse -m 192.168.10.2:6789 -r /ceph-hosting-001 /mnt/mycephfs --client-quota


위와 같은 옵션이 있어야 ceph node 에서 설정한 용량이 적용됩니다. (옵션 미사용시 무제한 용량 사용가능)


quota 는 ceph-fuse 를 이용할때만 적용 가능합니다. (kernel 은 미지원)




[실 서비스에 필요한 추가작업]


1) 디렉토리명


타 사용자가 디렉토리명을 유추해서 마운트 할 수 있기 때문에 'openssl rand -hex 16' 등의 명령으로 나온 랜덤 문자열로 사용하는것이 좋습니다.


$ openssl rand -hex 16

940715df28d5b2a871955d61c81ede09



2) 개인 계정, key 생성


admin key를 주면 client 의 권한이 상승하므로 아래와 같은 명령으로 별도 계정을 부여하는것이 좋습니다.


(ceph node 에서)

$ ceph-authtool ceph.client.sysdocu.keyring --create-keyring --name client.sysdocu --gen-key --cap mds 'allow' --cap mon 'allow rwx' --cap osd 'allow rwx'

// ceph.client.sysdocu.keyring : 계정 정보를 출력한 파일 (아래 명령으로 서버에 인식 시킨 후, 삭제해도 됨)

// sysdocu : 사용자명

// --set-uid 458 형식의 옵션으로 사용자 번호를 매기면, 추후 계정 생성 순서를 알 수 있게 됩니다. (생략 가능)

// [참고] 사용중인 계정 정보 (사용자명, key, 권한) 출력 : $ ceph auth list


$ ceph auth import --in-file ceph.client.sysdocu.keyring

// 생성된 사용자와 키 파일을 서버에 인식시키는 절차입니다. 명령 이후에 파일을 삭제해도 됩니다.


(ceph-client 에서)

# mount -t ceph 192.168.10.2:6789:/ceph-hosting-001 /mnt/mycephfs -o name=sysdocu,secret=AQCaXKFXBqXvARAAwIaXY5t5a7haDw7z15bF9Q==



3) client 의 mount 방법


quota 적용을 위해 client 에서 ceph-fuse 의 --client-quota 옵션을 사용해야 하는데, 사용자가 umount 후 해당 옵션을 제거, 다시 mount 하면 quota 적용받지 않고 용량 최대치를 사용할 수 있게 됩니다.

그래서 사용자가 마운트해야하는 디렉토리명을 알지 못하도록 디렉토리 명은 반드시 난수로 생성하고,

mount 명령이 든 스크립트 파일을 만들어 binary 로 변환, /etc/rc.local 에 넣어 사용하도록 해야 합니다.

더 추가하자면, 스크립트 실행시 서버 IP 를 추출하여 해당 서버에서 실행한게 맞는지 비교후 mount 를 하도록 하면 좋습니다.


# ceph-fuse -m 192.168.10.2:6789 -r /ceph-hosting-001 /mnt/mycephfs --id sysdocu --client-quota


(--id 옵션) 계정 ID만 정의하고 접속시도하면, /etc/ceph/ 아래에서 해당 키를 찾아 (/etc/ceph/ceph.client.sysdocu.keyring)

접속하게 되므로 keyring 파일은 반드시 /etc/ceph/ 위치에 놓아야 합니다.


# df -h

Filesystem      Size  Used Avail Use% Mounted on

udev            982M     0  982M   0% /dev

tmpfs           201M  3.3M  197M   2% /run

/dev/sda1       7.8G  1.9G  5.5G  26% /

tmpfs          1001M     0 1001M   0% /dev/shm

tmpfs           5.0M     0  5.0M   0% /run/lock

tmpfs          1001M     0 1001M   0% /sys/fs/cgroup

tmpfs           100K     0  100K   0% /run/lxcfs/controllers

tmpfs           201M     0  201M   0% /run/user/0

ceph-fuse        10G  268M  9.8G   3% /mnt/mycephfs    // 디렉토리명 보이지 않음



-----------

추가로 해봐야 할것들..

-----------


- 디렉토리 마운트시 df 로 할당된 용량이 보이지 않고 스토리지 전체 용량으로 표시되는것 확인

   > 기본 사용량이 있음.. 파일은 안보임 (10G   72M   10G)


반응형

댓글()