우분투 16.04 에서 MySQL 5.7.13 DATA 디렉토리 변경

리눅스/MySQL|2016. 9. 2. 12:46
반응형

MySQL 설치시 기본 DATA 디렉토리 /var/lib/mysql 을 /DATA/mysql 로 변경하려고 합니다.

/var/lib/ 디렉토리에 mysql, mysql-files, mysql-keyring 디렉토리를 /DATA/ 아래로 옮기고(복사),

설정파일 두 개만 수정하면 됩니다. 변경할 부분은 아래와 같습니다.



# vi /etc/mysql/mysql.conf.d/mysqld.cnf


(생략)


datadir         = /DATA/mysql


(생략) 



# vi /etc/apparmor.d/usr.sbin.mysqld


(생략)


# Allow data dir access

  /DATA/mysql/ r,

  /DATA/mysql/** rwk,


# Allow data files dir access

  /DATA/mysql-files/ r,

  /DATA/mysql-files/** rwk,


# Allow keyring dir access

  /DATA/mysql-keyring/ r,

  /DATA/mysql-keyring/** rwk,


(생략) 



[작성] 차동훈

반응형

댓글()

Ceph image 파일 내용 보기 (마운트)

리눅스/Ceph|2016. 9. 1. 08:24
반응형

1. 이미지 파일 속성 확인하기


본 매뉴얼에서의 테스트 파일은 test.img 이며, raw 포맷 파일입니다.

파일 속성 확인 하는 방법 은 아래와 같습니다.


# qemu-img info test.img

image: test.img

file format: raw

virtual size: 200M (209715200 bytes)

disk size: 200M    // 용량이 제대로 표시되지 않음


* 용량이 제대로 표시되지 않는 경우
이미지를 생성하면 용량이 정상적으로 출력되지만, 이미지 파일을 복사 (예: ftp 전송) 하였을 경우
용량 정보가 삭제 되는것으로 예상됩니다.

이럴 경우 아래와 같이 용량이 올바른 값으로 출력되게 할 수 있습니다. (그러나 별 의미 없음)


# qemu-img convert test.img -O raw tmp.img


# qemu-img info tmp.img

image: tmp.img

file format: raw

virtual size: 200M (209715200 bytes)

disk size: 2.6M    // 용량이 제대로 표시 되었음



2. XFS 파티션 이미지 마운트하기


# mkdir /sysdocu_test


# mount -o loop test.img /sysdocu_test


# df -h

Filesystem     Type      Size  Used Avail Use% Mounted on

devtmpfs       devtmpfs  3.9G     0  3.9G   0% /dev

tmpfs          tmpfs     3.9G   36M  3.9G   1% /dev/shm

tmpfs          tmpfs     3.9G  1.5M  3.9G   1% /run

tmpfs          tmpfs     3.9G     0  3.9G   0% /sys/fs/cgroup

/dev/sda2      ext4      110G   62G   43G  60% /

tmpfs          tmpfs     3.9G   64K  3.9G   1% /tmp

/dev/sdb1      ext4       74G  3.4G   67G   5% /2ND-DISK

tmpfs          tmpfs     799M   12K  799M   1% /run/user/42

tmpfs          tmpfs     799M   32K  799M   1% /run/user/1000

/dev/loop0     xfs       190M   88M  102M  47% /sysdocu_test


# ll /sysdocu_test

합계 70000

-rw-r--r-- 1 root root 10240000  8월 31 16:08 testfile

-rw-r--r-- 1 root root 10240000  8월 31 16:09 testfile2

-rw-r--r-- 1 root root 10240000  8월 31 16:17 testfile3

-rw-r--r-- 1 root root 10240000  8월 31 16:30 testfile4

-rw-r--r-- 1 root root 10240000  8월 31 16:41 testfile5

-rw-r--r-- 1 root root 10240000  8월 31 17:05 testfile6

-rw-r--r-- 1 root root 10240000  8월 31 17:06 testfile7



3. EXT4 파티션 이미지 마운트하기


(ext4 테스트 파일명 : 215_43_snap.img / raw 포맷)


# mkdir /sysdocu_test2

# mount -o loop 215_43_snap.img /sysdocu_test2    // -t ext4 옵션을 추가해 주어도 마찬가지
mount: wrong fs type, bad option, bad superblock on /dev/loop1,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.

# fdisk -u -l 215_43_snap.img
Disk 215_43_snap.img: 200 MiB, 209715200 bytes, 409600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xcc803d7c

Device           Boot Start    End Sectors   Size Id Type
215_43_snap.img1         63 401624  401562 196.1M 83 Linux

위에서 출력되는 sector 값과 Start 값을 곱합니다.

512 * 63 = 32256    // 결과값 32256 확인 (offset 옵션으로 사용)

* 참고
이미지안에 파티션이 1개일경우 대부분 offset 값이 32256 이나,
파티션이 여러개일 경우, 반드시 확인하고 계산해야 마운트가 가능합니다.

# mount -o loop,offset=32256 215_43_snap.img /sysdocu_test2

# df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  3.9G     0  3.9G   0% /dev
tmpfs          tmpfs     3.9G   93M  3.9G   3% /dev/shm
tmpfs          tmpfs     3.9G  1.5M  3.9G   1% /run
tmpfs          tmpfs     3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda2      ext4      110G   60G   45G  58% /
tmpfs          tmpfs     3.9G   76K  3.9G   1% /tmp
/dev/sdb1      ext4       74G  3.4G   67G   5% /2ND-DISK
tmpfs          tmpfs     799M   12K  799M   1% /run/user/42
tmpfs          tmpfs     799M   24K  799M   1% /run/user/1000
/dev/loop0     xfs       190M   98M   92M  52% /sysdocu_test
/dev/loop1     ext4      186M  146M   27M  85% /sysdocu_test2


※ loop device 를 내 마음대로 지정하고 싶은 경우

# mount -o loop=/dev/loop7,offset=32256 215_43_snap.img /sysdocu_test2

혹시 시스템에 /dev/loop7 이름의 loop device 가 없을 경우 아래와 같이 생성해주면 됩니다.

# mknod -m 660 /dev/loop7 b 7 7
(설명)
-m 660 : 권한 (permission) 설정
/dev/loop8 : 생성할 특수 파일명
b : block device                            // 고정
7 : device type(7 is loop device)    // 고정
7 : id                                            // 장치명(파일명)과 id 만 신경써서 바꿔주면 됩니다.
                                                       (장치명 loop 숫자와 동일하게 하면 깔끔)
                                                       # mknod -m 660 /dev/loop8 b 7 8
                                                       # mknod -m 660 /dev/loop9 b 7 9

# ll /dev/loop*
crw-rw---- 1 root disk 10, 237  9월  1 09:28 /dev/loop-control
brw-rw---- 1 root disk  7,   0  9월  1 09:39 /dev/loop0
brw-rw---- 1 root disk  7,   1  9월  1 11:21 /dev/loop1
brw-rw---- 1 root root  7,   7  9월  1 11:31 /dev/loop7

# mount -o loop=/dev/loop7,offset=32256 215_43_snap.img /sysdocu_test2

# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        3.9G     0  3.9G   0% /dev
tmpfs           3.9G   38M  3.9G   1% /dev/shm
tmpfs           3.9G  1.5M  3.9G   1% /run
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda2       110G   60G   45G  58% /
tmpfs           3.9G   76K  3.9G   1% /tmp
/dev/sdb1        74G  3.4G   67G   5% /2ND-DISK
tmpfs           799M   12K  799M   1% /run/user/42
tmpfs           799M   24K  799M   1% /run/user/1000
/dev/loop0      190M   98M   92M  52% /sysdocu_test
/dev/loop7      186M  146M   27M  85% /sysdocu_test2


반응형

댓글()

[Ceph 에러] [osd-1][ERROR ] RuntimeError: command returned non-zero exit status: 1

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

(테스트 환경 : CentOS 7.0 64bit - ceph 10.2.2)

ceph-deploy osd prepare osd-1:sdb 와 같이 prepare 실행시 아래와 같은 에러가 뜰 때가 있습니다.

이전에 사용했던 적이 있는 디스크일 경우 주로 나타나는데, 이때의 해결 방법입니다.



[에러]

[osd-1][ERROR ] RuntimeError: command returned non-zero exit status: 1



[해결]

(osd-1 에서)

# dd if=/dev/zero of=/dev/sdb bs=512 count=1

# reboot


(ceph node 에서)

$ ceph-deploy disk zap osd-1:sdb          // 에러날 경우 한 번 더 반복 수행

$ ceph-deploy osd prepare osd-1:sdb    // 에러날 경우, 위 명령(disk zap)을 다시 수행하고, 본 명령을 수행 (반복)


반응형

댓글()

Ceph 이미지 실 사용 용량 확인

리눅스/Ceph|2016. 8. 26. 12:37
반응형

(형식)

$ rbd diff $POOL/$IMAGE | awk '{ SUM += $2 } END { print SUM/1024/1024/1024 " GB" }'


(사용예)

$ rbd diff sysdocu-pool/vda | awk '{ SUM += $2 } END { print SUM/1024/1024/1024 " GB" }'

0.0104294 GB


SUM 결과가 byte 단위 이므로, 10억 (1024의 3승) 으로 나누어 GB 단위를 붙인 것 입니다.


반응형

댓글()

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)


반응형

댓글()