Ceph 사용을 위해 CentOS 6.7 에서 RBD 사용하기

리눅스/Ceph|2016. 8. 10. 16:17
반응형

# yum -y update


# yum -y install http://ceph.com/rpm-firefly/el6/noarch/ceph-release-1-0.el6.noarch.rpm http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm


# yum -y install yum-plugin-priorities


# sed -i -e "s/enabled=1/enabled=1\npriority=1/g" /etc/yum.repos.d/ceph.repo


# yum -y install ceph-common



이제 rbd 명령을 사용해야 하지만 CentOS 6.7 에는 커널 2.6.32 이 설치되므로, rbd 를 사용할 수 없습니다.

  (RBD는 커널 2.6.34 이상부터 사용 가능)


# uname -a

Linux ceph-client 2.6.32-642.3.1.el6.x86_64 #1 SMP Tue Jul 12 18:30:56 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux



그래서 yum 을 통해 커널을 높이도록 합니다. (마지막, 안정적인, 주 커널)


# rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org


# rpm -Uvh http://elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm


# yum --enablerepo=elrepo-kernel install kernel-ml



새로운 커널을 기본 부팅 커널로 설정합니다.


# vi /etc/grub.conf

Default 옵션값을 Default=0 으로 변경


# reboot



부팅이 완료 되면 커널 버전을 확인해 봅니다.


# uname -a

Linux ceph-client 4.7.0-1.el6.elrepo.x86_64 #1 SMP Sun Jul 24 19:49:26 EDT 2016 x86_64 x86_64 x86_64 GNU/Linux



이제 rbd 명령을 사용할 준비가 되었으므로 아래와 같이 마운트를 진행합니다.


# rbd --mon_host 192.168.56.11 --conf /dev/null --keyring /dev/null --name client.sysdocu --key AQAJRKRXJ3UxEBAAFxLI1hMRop6AVLa3wr6ruQ== --pool sysdocu-pool map vda


# mkdir /sysdocu_test


# mount /dev/rbd0 /sysdocu_test


# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda2       7.8G  3.5G  4.0G  47% /

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

/dev/rbd0       298M  207M   92M  70% /sysdocu_test



반응형

댓글()

Ceph 백업 (rbd export and import) 스냅샷 이미지를 파일로 추출, 복원

리눅스/Ceph|2016. 8. 9. 15:21
반응형

스냅샷과는 달리 눈에 보이는 image 파일로 추출하여 별도로 백업해둘 수 있습니다.

알고 계셔야 할것은 image 파일은 스냅샷 파일을 이용해서 만든다는것 입니다.



1. 백업 (export)


# cd /backup


(형식) rbd export {pool-name}/{image-name}@{snapshot-name} {image-file-name)

# rbd export sysdocu-pool/vda@sysdocu-pool-snap-2016-08-09 test.img

Exporting image: 100% complete...done.


# ll

합계 225288

drwxr-xr-x  2 root root      4096  8월  9 15:11 ./

drwxr-xr-x 24 root root      4096  8월  8 13:41 ../

-rw-r--r--  1 root root 314572800  8월  9 15:11 test.img



2. 복원 (import)


확인을 위해 기존 image (volume) 을 삭제하고, 백업했던 test.img 파일로 복원해 봅니다.


(ceph-client 에서)


# umount /mnt/mycephfs    // 사용중인 장치를 언마운트 합니다.


# rbd unmap /dev/rbd0    // 장치를 해제 합니다.



(ceph node 에서)


# rbd -p sysdocu-pool list    // sysdocu-pool 내에서 사용중인 이미지 확인

vda


(형식) rbd --pool {pool-name} snap purge {image-name}

# rbd --pool sysdocu-pool snap purge vda    // 스냅샷이 존재하면 image 삭제가 되지 않으므로 스냅샷 우선 일괄 삭제

Removing all snapshots: 100% complete...done.


(형식) rbd rm {image-name} -p {pool-name}

# rbd rm vda -p sysdocu-pool    // 기존 image (volume) 삭제

Removing image: 100% complete...done.


# rbd -p sysdocu-pool list    // 이미지 삭제 확인



이제 백업되었던 파일에서 이미지를 복원해봅니다.


# cd /backup


(형식) # rbd import --image-format 2 {image-file-name} {pool-name}/{image-name} --image-feature layering

# rbd import --image-format 2 test.img sysdocu-pool/vda --image-feature layering


# rbd -p sysdocu-pool list    // 이미지 복원 확인

vda

// 혹시 복원이 안된다거나 복원 후 다시 삭제가 되지 않는다면 pool 보다 image 사이즈가 큰지 생각해봐야합니다.

// (pool 삭제, 재생성으로 해결 가능)



(ceph-client 에서)


# rbd --mon_host 192.168.56.11 --conf /dev/null --keyring /dev/null --name client.sysdocu --key AQAJRKRXJ3UxEBAAFxLI1hMRop6AVLa3wr5ruQ== --pool sysdocu-pool map vda


# mount /dev/rbd0 /mnt/mycephfs/


# df -h

Filesystem      Size  Used Avail Use% Mounted on

udev            982M     0  982M   0% /dev

tmpfs           201M  5.8M  195M   3% /run

/dev/sda1       7.8G  2.3G  5.1G  32% /

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

/dev/rbd0       298M  207M   92M  70% /mnt/mycephfs



반응형

댓글()

Ceph 백업 (스냅샷 생성, 확인, 복구, 삭제)

리눅스/Ceph|2016. 8. 8. 15:44
반응형

백업은 당연한 말이지만 ceph node 관리 서버에서 하는것이 좋습니다.

아래 예제는 특정 pool (sysdocu-pool) 내의 특정 이미지 (vda) 를 백업하고 복원하는 방법을 보여줍니다.



1. 스냅샷 생성


(형식) rbd --pool {pool-name} snap create --snap {snap-name} {image-name}


# rbd --pool sysdocu-pool snap create --snap sysdocu-pool-snap-2016-08-08 vda



2. 스냅샷 확인


sysdocu-pool 내의 vda 이미지로 저장된 모든 스냅샷 리스트를 보여줍니다.


(형식) rbd --pool {pool-name} snap ls {image-name}


# rbd --pool sysdocu-pool snap ls vda

SNAPID NAME                     SIZE 

     4 sysdocu-pool-snap-2016-08-08 300 MB 



3. 스냅샷 롤백 (백업본을 복원)


순서를 반드시 지켜야만 저장된 스냅샷을 올바르게 불러올 수 있습니다. (umount 후, 롤백하고 mount 해야 함)


(ceph-client 에서)


# umount /mnt/mycephfs



(ceph node 에서)


(형식) rbd --pool {pool-name} snap rollback --snap {snap-name} {image-name}


# rbd --pool sysdocu-pool snap rollback --snap sysdocu-pool-snap-2016-08-08 vda

Rolling back to snapshot: 100% complete...done.



(ceph-client 에서)


# mount /dev/rbd0 /mnt/mycephfs



4. 스냅샷 삭제


(형식) rbd --pool {pool-name} snap rm --snap {snap-name} {image-name}


# rbd --pool sysdocu-pool snap rm --snap sysdocu-pool-snap-2016-08-08 vda



* 특정 이미지 스냅샷 모두 삭제


(형식) rbd --pool {pool-name} snap purge {image-name}


# rbd --pool sysdocu-pool snap purge vda

Removing all snapshots: 100% complete...done.


반응형

댓글()

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)


반응형

댓글()

Ceph 가상 계정 생성후 pool 할당 해주기

리눅스/Ceph|2016. 8. 2. 09:15
반응형

(ceph node 에서)

 

# su - cephuser

 

$ cd ~/ceph

 

$ ceph-authtool ceph.client.sysdocu.keyring --create-keyring --name client.sysdocu --gen-key --set-uid 458 --cap mon 'allow profile simple-rados-client' --cap osd 'allow rwx pool=sysdocu-pool'

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

// sysdocu : 사용자명

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

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

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

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

 

$ ceph auth get client.sysdocu

// 시스템에 잘 들어갔는지 정보 출력해 봅니다.

 

ceph osd pool create sysdocu-pool 128 128

// (의미) ceph osd pool create {pool-name} {pg-num} {pgp-num}

// 설명 계속...

기본 pg_num 을 정하는 기준은 아래를 권장합니다.

 

osd 가 5개 미만일 경우 pg_num 128,

5~10 개는 pg_num 512,

10~50 개는 pg_num 4096 이 적절 합니다.

50개 이상은 pgcalc 계산을 참조하여 설정하면 됩니다.

 

현재 테스트 문서에서는 osd 가 2개 이므로 pg_num 128 로 설정하여 진행합니다.

 

ceph osd pool set-quota sysdocu-pool max_bytes 100M

// 참고 : 용량 1G 를 줄 경우 $((1024 * 1024 * 1024)) 이렇게 계산식으로 정확하게 입력이 가능합니다.

 

$ rados put --pool sysdocu-pool GROUP /etc/group

// 왜 있는지 모름... 테스트 할때는 없어도 됐음. 추후 삭제 예정..

 

생성된 사용자 keyring 파일과 ceph 설정 파일을 client 서버로 복사합니다.

// 잠깐!

아래 두 개의 파일을 client 에게 전송시 client 가 rbd pool 및 image 를 생성하거나 용량을 늘려 사용이 가능하므로

client 에게 마운트 권한만 부여하려면 아래 두 줄을 생략하도록 합니다. (아래 계속 설명)

 

$ scp ceph.client.sysdocu.keyring root@ceph-client:/etc/ceph/

 

$ scp ceph.conf root@ceph-client:/etc/ceph/

 

 

pool 내에 image 생성하기

 

$ rbd --pool sysdocu-pool create --size 100M vda --image-feature layering

 

$ rbd --pool sysdocu-pool info vda

 

 

 

(ceph-client 에서)

 

# cd /etc/ceph/

 

# rbd --name client.sysdocu --keyring ceph.client.sysdocu.keyring --pool sysdocu-pool map vda

// 보안상 두 개의 파일을 가져오지 않았다면, 아래 '참고' 부분 맨 마지막 명령줄을 사용하면 됩니다.

// 사용자 계정 및 key 확인 명령 : (ceph node 에서) $ 

ceph auth list

 

mkfs -t xfs -f /dev/rbd0

 

# mkdir /data

 

# mount /dev/rbd0 /data

 

# 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.4G  28% /
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
/dev/rbd0        94M  5.0M   89M   6% /data

 

 

* 참고

실 서비스에서는 client 가 admin keyring 파일이나 다른 client keyring 파일을 가지고 있으면, (id 와 key를 안다면)

rbd 명령을 통해 pool 을 생성한다던지, pool 사이즈를 마음대로 늘릴 수 있게 됩니다.

이를 방지하려면 ceph node 에서 ceph-client 에 전송했던 keyring 파일은 삭제를 하고, rbd 명령으로 마운트할때 아래와 같이 옵션으로 key 를 사용하도록 합니다. 그리고 명령줄은 쉘스크립트로 만들어 암호화(바이러니) 시키면 됩니다.

 

예) rbd --name client.sysdocu --key CRXJ3UxEBAAFxLI1hMRop6AVLa3wr6ruQ== --pool sysdocu-pool info vda

 

한 client 서버에 ceph.conf 까지 보관하지 않으려면 아래 옵션을 추가 하면 됩니다.

 

예) rbd --mon_host 192.168.10.2 --name client.sysdocu --key CRXJ3UxEBAAFxLI1hMRop6AVLa3wr6ruQ== --pool sysdocu-pool info vda

 

여기에 한가지 팁을 붙이자면, mapping 할때 화면에 conf 파일 및 keyring 파일이 없다는 로그가 출력되므로, 아래와 같은 옵션을 주어 출력이 되지 않도록 할 수 있습니다.

 

예) rbd --mon_host 192.168.10.2 --conf /dev/null --keyring /dev/null --name client.sysdocu --key CRXJ3UxEBAAFxLI1hMRop6AVLa3wr6ruQ== --pool sysdocu-pool info vda

 

 

[원문] http://dachary.org/?p=2930

[수정] sysdocu

 

반응형

댓글()

Ceph Document URL

리눅스/Ceph|2016. 7. 26. 16:27
반응형

http://ceph-doc.readthedocs.io/en/latest/

반응형

댓글()

[Ceph 에러] rbd: sysfs write failed rbd: map failed: (6) No such device or address

리눅스/Ceph|2016. 7. 19. 12:51
반응형

# rbd create client01/vm_disk01 --size 4096


# rbd list client01

vm_disk01


# rbd info client01/vm_disk01

rbd image 'vm_disk01':

size 4096 MB in 1024 objects

order 22 (4096 kB objects)

block_name_prefix: rbd_data.10282ae8944a

format: 2

features: layering, exclusive-lock, object-map, fast-diff, deep-flatten

flags: 


root@ceph:~# rbd map client01/vm_disk01

rbd: sysfs write failed

rbd: map failed: (6) No such device or address


root@ceph:~# rbd create client01/vm_disk02 --size 2G --image-feature layering


root@ceph:~# rbd info client01/vm_disk02

rbd image 'vm_disk02':

size 2048 MB in 512 objects

order 22 (4096 kB objects)

block_name_prefix: rbd_data.10322ae8944a

format: 2

features: layering

flags: 


root@ceph:~# rbd map client01/vm_disk02

/dev/rbd0


반응형

댓글()

Ceph pool 생성, client 마운트, 볼륨 크기 조절, pool 삭제, 이름변경, 복제, image 삭제

리눅스/Ceph|2016. 7. 19. 11:53
반응형

1. 볼륨 스토리지 나누기


(ceph node 에서)

(root 계정으로 진행)


호스팅사에서 서비스 구성시 위와 같이 통파티션을 제공해 줄 수는 없으므로, 블록단위로 용량을 쪼개서

각 Client Server 들에게 제공할 필요가 있습니다.


블록을 생성하고 용량을 지정하는 방법은 아래와 같습니다.


(현재 생성된  pool 확인)

# ceph osd lspools

0 rbd,

(쉽게보기)

# ceph osd lspools |sed -e 's/,/\n/g'


# ceph osd pool create client01 128 128

(의미) ceph osd pool create {pool-name} {pg-num} {pgp-num}


기본 pg_num 을 정하는 기준은 아래를 권장합니다.


osd 가 5개 미만일 경우 pg_num 128,

5~10 개는 pg_num 512,

10~50 개는 pg_num 4096 이 적절 합니다.

50개 이상은 pgcalc 계산을 참조하여 설정하면 됩니다.


현재 테스트 문서에서는 osd 가 2개 이므로 pg_num 128 로 설정하여 진행합니다.


# ceph osd pool set-quota client01 max_bytes 4G    // pool 용량 제한

# rbd create client01/vm_disk01 --size 4G --image-feature layering    // volume 을 1개만 생성한다면 최대용량 설정

# ceph osd pool get-quota client01    // 용량 제한 확인


* 참고

-------------------------------------

풀 안에 볼륨 확인

# rbd list client01


볼륨 정보 보기

# rbd info client01/vm_disk01

-------------------------------------


아래 박스 안의 명령은 ceph-node 에서 해도 되고, ceph-client 에서 해도 됩니다.

ceph-client 에서 할 경우 ceph-node 에서 아래와 같은 명령이 선수행 되어야 합니다.


* ceph-node 에서 수행시

   - 장점 : 관리자가 용량을 정해줄수 있음

   - 단점 : client 에게 서비스 하기 위해 nfs, samba, iscsi 같은 데몬이 추가로 필요함

* ceph-client 에서 수행시

   - 장점 : client 에서 직접 스토리지 용량 일정양을 mount 해서 이용이 가능함

   - 단점 : client 가 용량 증설, 다른 client 의 pool 을 mount 할 수 있음


(ceph-node)

# su - cephuser

$ cd ceph

$ ssh-copy-id cephuser@ceph-client

$ ceph-deploy install ceph-client

$ ceph-deploy admin ceph-client


(ceph-client)


로컬 맵 생성

# rbd map client01/vm_disk01    // client 서버를 리부팅 했다면 이 명령을 수행해야 이용할 준비가 되고,


로컬 맵 확인 (맵 생성 후 확인가능)

# rbd showmapped

id pool     image     snap device    

0  client01 vm_disk01 -    /dev/rbd0


파일시스템 생성 및 마운트

# mkfs -t xfs -f /dev/rbd0

# mkdir /data

# mount /dev/rbd0 /data    // client 서버를 리부팅 했다면 map 수행후 mount 를 해야 합니다.


여기까지하면 df -h 명령으로 ceph node 에 4G 파티션이 디렉토리로 마운트된것이 확인됩니다.

/dev/rbd0       4.0G   33M  4.0G   1% /data




2. 볼륨 크기 조절


1) 증가


(기존 4G에서 8G로 늘리기) ★사용하던 데이타는 그대로 보존됩니다.


(ceph node 에서)

$ ceph osd pool set-quota client01 max_bytes 8G    // 본 명령을 생략하면 늘어난 용량이 꽉찰 경우 '용량 제한' 메세지 없이 콘솔이 먹통 됩니다.

$ rbd resize client01/vm_disk01 --size 8G    // 실제 사용가능한 용량을 늘려주는 부분


(ceph-client 에서)

# xfs_growfs /data


df -h 명령으로 증가된것 확인

/dev/rbd0        8G   34M   8G   1% /data



/etc/fstab 파일을 설정하여 부팅시 자동 마운트되게 합니다.

/dev/rbd0 /data xfs defaults,noatime,netdev 0 0


고객이 마운트하여 사용할수 있게 umount /data 다시 실행..

(이부분은 ceph node 에서 마운트 해놓는건지, umount 상태로 놔두는지 확인해봐야함)


2) 축소


볼륨 크기 축소 (기존 8G에서 4G로 축소) 시에, 반드시 --allow-shrink 옵션을 주어야 합니다.


# rbd resize client01/vm_disk01 --size 4G --allow-shrink

# xfs_growfs /data


5G 데이타 사용중 볼륨을 8G 에서 4G 로 줄일 경우, 데이타는 손실없이 존재하며 더 이상 쓰기가 되지 않습니다.

실 데이타 삭제시 최대 한도도 같이 4G 까지 줄어듭니다. (좀 더 확인 필요)



3. pool 삭제


pool 삭제시 그 안에 생성한 여러 volume들은 함께 삭제가 됩니다.


# ceph osd pool delete {pool-name} {pool-name} --yes-i-really-really-mean-it


이와 같이 실수로 삭제하는것을 방지하기 위하여 pool 이름을 두 번 씁니다.

또한 명령을 인지하고 있다는 옵션(문장)도 적어줘야 합니다.


[이미지만 삭제하려는 경우]

# rbd rm {pool-name}/{image-name}

스냅샷이 존재해서 삭제가 되지 않는 이미지는 아래처럼 스냅샷을 모두 제거 후 삭제시도를 합니다.

# rbd --pool {pool-name} snap purge {image-name}



4. pool 이름 변경


# ceph osd pool rename {current-pool-name} {new-pool-name}



5. pool 복제


# rados cppool {current-pool-name} {new-pool-name}



반응형

댓글()

Ceph osd node 추가 및 제거

리눅스/Ceph|2016. 7. 19. 11:46
반응형

디스크 용량이 부족하여 osd 를 추가로 연결하고자 할때 아래와 같은 명령을 통해 사용이 가능합니다.



(추가 전)


$ ceph -s |grep osdmap

     sdmap e66: 2 osds: 2 up, 2 in; 32 remapped pgs


$ ceph osd tree

ID WEIGHT  TYPE NAME     UP/DOWN REWEIGHT PRIMARY-AFFINITY 

-1 0.00980 root default                                    

-2 0.00980     host ceph                                   

 0 0.00490         osd.0      up  1.00000          1.00000 

 1 0.00490         osd.1      up  1.00000          1.00000 




1. 추가


(ceph node 에서)


# vi /etc/hosts

192.168.56.15    osd-3    // 추가하려는 osd 의 호스트 추가


# su - cephuser


$ cd ceph


$ ssh-copy-id cephuser@osd-3    // osd-3 에 cephuser 계정이 있다는 전제하에 진행합니다.


$ ceph-deploy install osd-3


$ ceph-deploy admin osd-3


$ ceph-deploy disk zap osd-3:sdb


$ ceph-deploy osd prepare osd-3:sdb


$ ceph-deploy osd activate osd-3:sdb1



(추가 후)

$ ceph -s |grep osdmap

     osdmap e71: 3 osds: 3 up, 3 in; 74 remapped pgs


$ ceph osd tree
ID WEIGHT  TYPE NAME     UP/DOWN REWEIGHT PRIMARY-AFFINITY 
-1 0.01469 root default                                    
-2 0.01469     host ceph                                   
 0 0.00490         osd.0      up  1.00000          1.00000 
 1 0.00490         osd.1      up  1.00000          1.00000 
 2 0.00490         osd.2      up  1.00000          1.00000 



2. 제거


순서를 반드시 지켜야 정상적으로 제거할 수 있습니다.


$ ceph osd out osd.2    // REWEIGHT 값을 0 으로 변경

marked out osd.2. 


$ ceph osd down osd.2    // UP/DOWN 값을 down 으로 변경
marked down osd.2.


$ ceph osd tree

ID WEIGHT  TYPE NAME     UP/DOWN REWEIGHT PRIMARY-AFFINITY 

-1 0.00980 root default                                    

-2 0.00980     host ceph                                   

 0 0.00490         osd.0      up  1.00000          1.00000 

 1 0.00490         osd.1      up  1.00000          1.00000 

 2       0 osd.2            down        0          1.00000


$ ceph osd rm osd.2    // osd.2 서버를 사용 리스트에서 제외

removed osd.2


$ ceph osd tree

ID WEIGHT  TYPE NAME     UP/DOWN REWEIGHT PRIMARY-AFFINITY 

-1 0.00980 root default                                    

-2 0.00980     host ceph                                   

 0 0.00490         osd.0      up  1.00000          1.00000 

 1 0.00490         osd.1      up  1.00000          1.00000 

// 이 자리에 있던 osd.2 가 사라진 것을 볼 수 있습니다.

혹시라도 ceph osd tree 명령으로 출력되는 결과에 'DNE’ 상태로 표시된다면 (DNE = do not exists)
아래와 같은 명령으로 깔끔히 지워줄 수 있습니다.

$ ceph osd crush remove osd.2

removed item id 2 name 'osd.2' from crush map



반응형

댓글()

Ceph 10.2.0 설치 on Ubuntu (jewel 버전)

리눅스/Ceph|2016. 7. 19. 11:31
반응형

구축 환경


- Ceph node : 1대 (VM / RAM 2G / OS HDD 10G)

- OSD node : 2대 (VM / RAM 2G / OS HDD 10G, 데이타 저장용 10G)

   > 데이타 저장용 HDD는 스토리지의 경우 RAID로 묶어 사용해야 합니다. 절대로 LVM으로 묶으면 안됩니다.

- OS 는 모두 Ubuntu 16.04 LTS (64bit / Server) 버전으로 설치하였습니다.

- Ceph 의 버전은 10.2.0 (jewel) 입니다.

- Openstack과 연동 되는 부분은 제외하였으며, Ceph 스토리지를 구축하는 방법만 기술하였습니다.




1. OS 설치


(모든 node 동일)


1) 파티션


    - 자동 파티션으로 설치

    - LVM 사용안함 (중요)


2) 호스트 이름


    ceph node의 호스트네임은 ceph로 합니다. (정해진 규칙은 아님)

    첫번째 osd node의 호스트네임은 osd-1,

    두번째 OSD node의 호스트네임은 osd-2 으로 합니다.


3) 패키지 설치


    기본 선택된 'standard system utilities' 외에 'OpenSSH server' 를 추가하고 설치를 진행합니다.




2. OS 환경 설정


(모든 node 동일)


1) root의 ssh 원격접속 허용


# sudo passwd root    // sudo su - 전 후 상관없이 패스워드 설정 반드시 해주어야 원격접속이 가능함 / passwd 아니고 passwd root

> 현재 사용자 및 root 패스워드 입력


# sudo su -


# vi /etc/ssh/sshd_config

기존 : PermitRootLogin prohibit-password

변경 : PermitRootLogin yes


그리고 ssh 데몬을 재시작하여 설정값을 적용해줍니다.


# /etc/init.d/ssh restart


2) 네트워크  설정


테스트 VM을 서로 묶기 위해서 서버마다 두 개의 네트워크를 설정 설정합니다.


# vi /etc/network/interfaces


eth0 (dhcp)

eth1 (static)

- ceph node의 경우 : 192.168.56.11

- osd-1 node의 경우 : 192.168.56.12

- osd-2 node의 경우 : 192.168.56.13


(ceph node 예)

--------------------------

source /etc/network/interfaces.d/*


auto lo

iface lo inet loopback


auto eth0

iface eth0 inet dhcp


auto eth1

iface eth1 inet static

address 192.168.56.11

netmask 255.255.255.0

gateway 192.168.56.1


dns-nameservers 164.124.101.2

--------------------------


네트워크 설정 값 적용을 위해 networking 을 재시작 합니다.


# /etc/init.d/networking restart


재시작중 failed 메세지가 보여도 ssh 접속과, 외부로 ping 8.8.8.8 이 되면 문제 없다고 봐도 됩니다.

앞으로 수월한 작업을 위해 VM콘솔창이 아닌 ssh client 프로그램으로 ssh 접속하여 작업을 진행하도록 합니다.


* 참고

VM 환경 서버는 추후 리부팅 작업을 할때 networking 이 되지 않는 경우가 발생하면

/etc/init.d/networking restart 를 해주어 해결이 가능합니다.


3) hosts 설정


# vi /etc/hosts

--------------------------

192.168.56.11 ceph

192.168.56.12 osd-1

192.168.56.13 osd-2

--------------------------


4) OS 패키지 업데이트


# apt-get update

# apt-get -y dist-upgrade


* 참고

업데이트가 되지 않을 경우 확인사항

- /etc/init.d/networking 재시작 해보기

- rm -rf /var/lib/apt/lists/* 이후 다시 해보기


5) ceph 설치


# apt-get -y install ceph-common ceph-deploy ceph-mds


버전 확인

# ceph -v

ceph version 10.2.0 (3a9fba20ec743699b69bd0181dd6c54dc01c64b9)


6) 방화벽 설정


ceph node : TCP 6789 Open

osd-1, osd-2 node : TCP 6800:7100 Open


7) ceph 계정 생성


# useradd -d /home/cephuser -m cephuser

# passwd cephuser

# echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser

# chmod 0440 /etc/sudoers.d/cephuser


8) 인증키 생성 및 복사


(ceph node)

인증키 생성은 ceph 마스터 서버에서만 합니다.

앞으로의 작업은 cephuser 로 계정을 전환하여 진행합니다.


사용자 전환

# su - cephuser


키 생성

$ ssh-keygen


각 노드로 ssh key 전송

$ ssh-copy-id cephuser@osd-1

$ ssh-copy-id cephuser@osd-2




3. 설정


(ceph node 에서만 실행)


1) 기본 설정


ceph 관리 서버에서만 진행합니다.


$ mkdir ceph

$ cd ceph

$ ceph-deploy new ceph    // ceph 호스트 서버를 모니터 서버로 활용하겠다는 뜻

$ vi ceph.conf


마지막줄에 추가

osd pool default size = 2    // raid 5 의 형태. osd 서버가 두개 깨지면 문제가 됌. 값을 3으로 주면 3개 깨질때 문제가 됌.

[client]

rbd_cache = false    // 마스터에서 동일 image 를 map, mount 하고 해제할때 캐시를 저장하지 않음으로써

                                  추후 해당 image 를 map, mount 했을때 그동안 client 가 변경한 데이타가 보이게 됩니다.

                                  아직 현 버전에서는 journaling 외에 실제 사용량을 확일할 방법이 없으므로 이렇게 봐야합니다.

                                   (주의 : 마스터에서 client 이미지를 마운트하고 보게되면 그 안에 데이타를 쓰지 말것.

                                             쓰게되는경우 별도의 이미지로 분리되어 client 데이타가 변경되어도 못 봄)

                                  나중에 추가했다면, 아래 '설정 파일 배포' 처럼 --overwrite-conf 옵션과 함께 ceph 및 각 osd 로 

                                  배포하도록 합니다.


각 osd 노드에 ceph 설치

$ ceph-deploy install ceph osd-1 osd-2


모니터링 및 공유키 초기 설정

$ ceph-deploy mon create-initial    // 실행시 모니터 서버의 포트가 열리고, (tcp 6789)


위와 같이 실행하면 모니터 노드 (ceph node) 에서 netstat -nltp 했을때 :6789 포트 열린것이 확인됩니다.

그리고 아래와 같은 파일이 생성됩니다.


ceph.bootstrap-mds.keyring

ceph.bootstrap-osd.keyring

ceph.bootstrap-rgw.keyring

ceph.client.admin.keyring


그리고 최신버전에서는 아래 두 줄 추가해주세요. (어디에 사용되는지 나중에 알아볼것)


$ ceph-deploy mon create ceph

$ ceph-deploy gatherkeys ceph


2) 스토리지 클러스터 설정


선택 디스크 파티션 삭제, xfs 포맷 (데이타가 삭제되니 주의하세요.)

$ ceph-deploy disk zap osd-1:sdb osd-2:sdb    // 호스트:장치명

$ ceph-deploy osd prepare osd-1:sdb osd-2:sdb       // 호스트:장치명

$ ceph-deploy osd activate osd-1:sdb1 osd-2:sdb1    // 호스트:파티션명    // 실행시 osd 서버의 포트가 열림


설정 파일 배포

$ ceph-deploy admin ceph osd-1 osd-2

$ sudo chmod 644 /etc/ceph/ceph.client.admin.keyring


3) 상태 확인


모니터 노드(ceph node)에서 상태 확인이 가능합니다.


$ ceph health

결과는 HEALTH_OK 라고 떠야합니다.

만약 Warning이 뜨면 몇 분정도 기다렸다가 다시 명령어를 내려보거나 그래도 안되면 서비스 데몬을 재시작 해봅니다.

Warning 메세지는 디스크 남은양이 적을 때에도 뜰 수 있으므로, /etc/ceph/ceph.log 파일을 확인하여 어떤 문제인지 확실히 알아봐야 합니다.


$ ceph pg stat

v22: 64 pgs: 64 active+clean; 0 bytes data, 68864 kB used, 10150 MB / 10217 MB avail


$ ceph osd tree

ID WEIGHT  TYPE NAME      UP/DOWN REWEIGHT PRIMARY-AFFINITY 

-1 0.00980 root default                                     

-2 0.00490     host osd-1                                   

 0 0.00490         osd.0       up  1.00000          1.00000 

-3 0.00490     host osd-2                                   

 1 0.00490         osd.1       up  1.00000          1.00000


* 참고

로그 파일 : /var/log/ceph/ceph.log


ceph node 를 메타데이타서버로 지정합니다.

(디렉토리를 다수 생성하여 사용자에게 하나씩 마운트 할 수 있게 할때 필수. 그 외 없어도 됨)


$ ceph-deploy mds create ceph    // 실행을 해야 client 에서 mount 가 가능해지며, 포트가 열립니다. (tcp 6800)




4. 삭제


설정을 하지 않은 최초의 상태로 돌아가는 방법 입니다. (초기화)


처음부터 다시 구성을 하려면 아래와 같이 명령을 내립니다.


(ceph node 에서만)


1) 패키지 삭제


$ ceph-deploy purge ceph osd-1 osd-2


2) 설정 정보 삭제


$ ceph-deploy purgedata ceph osd-1 osd-2

$ ceph-deploy forgetkeys

$ rm -f ~/.cephdeploy.conf

$ rm -f ~/ceph/*


3) 각 osd 데이타 삭제


(osd-1)

# rm -rf /var/lib/ceph/osd/ceph-1/*

(osd-2)

# rm -rf /var/lib/ceph/osd/ceph-2/*


4) 데몬 강제 종료


모니터 노드 데몬을 강제 종료합니다.

# ps -ef |grep ceph  (pid값 확인후)

# kill -9 [pid]



반응형

댓글()