Ceph osd 서버 교체

리눅스/Ceph|2016. 8. 18. 17:19
반응형

Ceph osd 서버를 교체하려면 서버를 물리적으로 적출하고 새 서버를 넣은 후, 새로 구성해야 합니다.



방법은  1) osd 제거  2) osd 키 제거  3) 서버 재구성  순으로 진행됩니다.



이 문서는 다른 게시글 'Ceph osd 추가 및 제거' 의 내용과 비슷합니다.

여러 문서를 동시에 찾아보기 번거로우므로 다시 적는것이므로 좀 더 간결한 애용만 기술하도록 하겠습니다.



[중요]

고장난 osd 서버의 호스트 명이 osd-1 이더라도, ceph 에서는 순번을 다르게 인식할 수 있어 확인해야 합니다.

- hostname : osd-1

- osd NAME : osd.0



(ceph node 에서)


$ 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    // 이것을 교체해 보도록 하겠습니다. (osd.0 확인)

-3 0.00490     host osd-2                                   

 1 0.00490         osd.1       up  1.00000          1.00000 


이제 서버 교체를 위해서 osd.0 서버를 물리적으로 셧다운 합니다.
그리고 아래 명령을 실행 합니다.

$ ceph osd out osd.0


$ ceph osd down osd.0


$ ceph osd rm osd.0


ceph osd crush remove osd.0    // 'ceph osd tree' 명령으로 확인시 osd 가 제대로 제거가 안되고

                                                        DNE 문자가 출력될 경우에만 실행 합니다.


$ ceph auth del osd.0    // 키 삭제하는 부분입니다. 이것을 안하면 새 osd 서버 추가시 osd.2 로 생성됩니다.


이제 새 서버를 부팅합니다.

그리고 아래 명령을 실행 합니다.

osd 추가 방법과 같으며, 이제는 'hostname' 으로 실행한다는것에 주의합니다.


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


$ ceph-deploy install osd-1


$ ceph-deploy admin osd-1


$ ceph-deploy disk zap osd-1:sdb


$ ceph-deploy osd prepare osd-1:sdb


$ ceph-deploy osd activate osd-1:sdb1


여기까지 입니다.


싱크는 자동으로 맞추어 집니다. 새로 추가한 osd-1 서버 서버에서 df -h 명령을 내려보면

osd-2 서버의 사용량 까지 디스크 사용량이 올라가는 것을 볼 수 있습니다. (자동 동기화)


반응형

댓글()

Ceph 10.2.0 설치 on CentOS 7 (jewel 버전)

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

# yum -y update


# vi /etc/yum.repos.d/ceph.repo


(centos 7 의 jewel 버전을 설치하기 위해 baseurl 부분을 아래와 같이 정해주었습니다.)


[ceph]

name=Ceph packages for $basearch
baseurl=http://download.ceph.com/rpm-jewel/el7/$basearch
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-jewel/el7/noarch
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-source]
name=Ceph source packages
baseurl=http://download.ceph.com/rpm-jewel/el7/SRPMS
enabled=0
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc



# yum -y install ceph-deploy


# ceph-deploy new ceph    // 로컬 서버 호스트명이 ceph 일 경우


# ceph-deploy install ceph



설치를 마쳤습니다.


ceph 셋팅은 다른 문서를 참고합니다.


우분투에서 jewel 버전 (10.2) 설치 : http://sysdocu.tistory.com/987



반응형

댓글()

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.


반응형

댓글()

openssl 로 random 하게 난수 생성

리눅스/OS 일반|2016. 8. 3. 11:33
반응형

# openssl rand -base64 10

MiS8xnjQXJD6Dw==


# openssl rand -base64 20

1gHZWZOoQsQJ+DqIShDGsSkAHYc=


# openssl rand -base64 30

Z05Hce+AUE9b8IODyKDUv2O9ojFvhbOKg/N0X7RE


# openssl rand -hex 16

4e34025c8408c3eded02f96b2226c94c


반응형

댓글()

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/

반응형

댓글()

DHCP 설치

리눅스/Network|2016. 7. 22. 06:40
반응형

DHCP [Dynamic Host Configuration Protocol]
 - IP 할당을 요청하는 클라이언트에게 자동으로 IP를 할당해주는 프로토콜

1. DHCP 설치 (yum install -y dhcp)

 


2. Dhcpd.conf 생성
  가. 기본설치시 /etc/dhcp.conf에 아무 내용이 없으므로 샘플 설정파일을 복사
  나. cp /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample /etc/dhcpd.conf

3. Dhcpd.conf 파일 수정
  가. vi /etc/dhcpd/conf


   1) subnet x.x.x.x netmask x.x.x.x : 내부 IP 대역 범위 지정
   2) option routers 0.0.0.0; option subnet-mask 0.0.0.0; : DHCP 서버의 IP, 서브넷마스크 설정
   3) option domain-name "도메인"; option~ 네임서버IP, 보조네임서버IP;
       : 클라이언트에게 자동으로 지정할 네임서버 설정
   4) range dynamic-bootp x.x.x.x x.x.x.x;   :  동적으로 할당할 IP 주소 범위
   5) host ns ~     :  고정 IP를 할당 할 때 사용

4. 방화벽 추가
  -A INPUT -m state --state NEW -m udp -p udp --dport 67:68 -j ACCEPT

5. 실행
  service iptables restart
  service dhcpd restart


[출처] http://gntpapa.tistory.com/entry/CentOS-2


반응형

댓글()

[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


반응형

댓글()