CephFS 통파티션 생성과 마운트, client 별 디렉토리 생성과 마운트
(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
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)
'리눅스 > Ceph' 카테고리의 다른 글
Ceph 백업 (rbd export and import) 스냅샷 이미지를 파일로 추출, 복원 (0) | 2016.08.09 |
---|---|
Ceph 백업 (스냅샷 생성, 확인, 복구, 삭제) (0) | 2016.08.08 |
Ceph 가상 계정 생성후 pool 할당 해주기 (0) | 2016.08.02 |
Ceph Document URL (0) | 2016.07.26 |
[Ceph 에러] rbd: sysfs write failed rbd: map failed: (6) No such device or address (0) | 2016.07.19 |