이번 편에서는 OSD를 추가로 설치해야할 상황에서 수동으로 추가하는 방법을 알려드린다. 기존의 OSD에 하드디스크 하나를 더 추가하는 것과 절차는 동일하다. 단지, 같은 host명을 사용하느냐 아니냐일 뿐만 다르다. 지금껏 잘 따라오신 분은 이미 눈치 채셨겠지만, 저장된 자료가 지워지는 부분에 대해서 상관만 없다면 osd 디렉토리를 전부 삭제하고 설치단계에서 진행했었던 mkcephfs 명령어를 통해 한 번에 수십 수백대의 OSD를 다시 설정할 수도 있다.

우분투를 설치하고 Ceph 패키지를 설치하는 하는 것까지는 똑같다. 물론, ceph.conf 파일을 넣어주고 /etc/hosts에 osd-2를 등록해주는 것, 새로운 osd의 root 패스워드를 설정하고, ceph로부터 root의 ssh-copy-id 명령어를 이용한 키 복사 역시 동일하게 설정하면 되겠다. 사실상, 이전편에서 mkcephfs 명령어 이전까지는 동일한 진행을 하면 된다.

새로 붙일 OSD의 이름은 osd-2로 정하고, 1편에서 정한대로 10기가의 OS 설치용 하드디스크 하나, 그리고 osd용 30기가짜리 하드디스크 2개를 생성해서 우분투 12.04 64비트를 설치하고 apt-get dist-upgrade와 Ceph 패키지 설치를 완료했다. 파티션을 생성해서 ext4로 포맷을 하고 /var/lib/ceph/osd/ceph-4/var/lib/ceph/osd/ceph-5라는 디렉토리를 생성해서 user_xattr 옵션과 함께 마운트를 시킨 상태이다. 꼭 기억해야할 사항이, /etc/hosts에 osd-2를 추가시킨뒤 root 사용자로 변경해서 ssh-copy-id osd-2를 잊지말자.

이제 추가를 해보자. Ceph 노드로 옮겨서 편의상 root로 사용자를 변경하고 아래의 명령어를 실행해보자.

# ceph osd create

그러면 아주 간단하게 딱 4 라는 글자만 찍힐 것이다. 방금 새로 설치한 OSD-2 노드는 하드디스크가 2개이므로, 위의 명령어를 한 번 더 실행한다. 역시 예상대로 5라는 숫자가 찍힐 거다. 이제 /etc/ceph/ceph.conf 파일을 열어서 새로운 osd를 추가해주자.

[osd.4]
host = osd-2

[osd.5]
host = osd-2

만약, 새로운 OSD 노드를 설치하지 않고 기존의 OSD 노드, 예를 들어 OSD-1 노드에 하드디스크 2개를 더 추가한 것이라면 host 주소만 바꿔주면 된다. 설정 자체는 아주 간단하고 쉽다고 볼 수 있겠다. 편집이 끝났으면, /etc/ceph/ceph.conf 파일을 예상대로 osd-0, osd-1, 그리고 새로 만든 osd-2 노드의 /etc/ceph/ 디렉토리에 전송하자. osd-2의 경우는 /etc/ceph/ 디렉토리에 아무것도 없을테니, /etc/ceph/ceph.keyring 파일도 같이 전송해야한다.

전송이 끝났으면, osd-2 노드에 root로 접속해서 아래의 명령어를 실행한다.

ceph-osd -i 4 --mkfs --mkkey
ceph-osd -i 5 --mkfs --mkkey 

실행하면 글자와 숫자들이 주르륵 올라가면서 error라는 글자나, failed, No such file or directory 등의 메시지가 눈에 띄일텐데 신경쓰지 않아도 된다. 2편에서 mkcephfs를 실행했을 때처럼 새로운 하드디스크에 아무 것도 없기 때문에 나오는 메시지라고 보면 되겠다.

마지막으로 아래의 명령어를 실행한다.

ceph auth add osd.4 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-4/keyring
ceph auth add osd.5 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-5/keyring 

화면에 added key for osd.4, added key for osd.5 라는 메시지가 뜰 것이다. 접속을 끊고 Ceph노드로 돌아가자. 이제 OSD 노드에서 할 일은 없다.

osd-4와 5가 제대로 붙었는지 확인을 해보자.

# ceph osd tree 
# id    weight  type name       up/down reweight
-1      4       root default
-3      4               rack unknownrack
-2      2                       host osd-0
0       1                               osd.0   up      1
1       1                               osd.1   up      1
-4      2                       host osd-1
2       1                               osd.2   up      1
3       1                               osd.3   up      1
4       0       osd.4   down    0
5       0       osd.5   down    0

새로 등록한 4와 5가 보이고, 현재는 비활성화 되어있는 것을 알 수 있다. 이 2개의 osd를 같은 pool에다 올리자.

# ceph osd crush set 4 osd.4 1.0 pool=default rack=unknownrack host=osd-2 
updated item id 4 name 'osd.4' weight 1 at location {host=osd-2,pool=default,rack=unknownrack} to crush map

# ceph osd crush set 5 osd.5 1.0 pool=default rack=unknownrack host=osd-2
updated item id 5 name 'osd.5' weight 1 at location {host=osd-2,pool=default,rack=unknownrack} to crush map

이제 다시 트리를 확인해보자.

# ceph osd tree
# id    weight  type name       up/down reweight
-1      4       root default
-3      4               rack unknownrack
-2      2                       host osd-0
0       1                               osd.0   up      1
1       1                               osd.1   up      1
-4      2                       host osd-1
2       1                               osd.2   up      1
3       1                               osd.3   up      1
-5      0                       host osd-2
4       0                               osd.4   down    0
5       0                               osd.5   down    0

ceph osd crush set 4 osd.4 pool=default rack=unknownrack host=osd-2
ceph osd crush set 5 osd.5 pool=default rack=unknownrack host=osd-2

다 좋은데 osd가 다운되어있는 것이 보인다. 이것을 활성화시키려면 osd를 그냥 재시작해주기만 하면 된다. 간단하다.

# service ceph -a start osd.4
=== osd.4 ===
Starting Ceph osd.4 on osd-2...
starting osd.4 at :/0 osd_data /var/lib/ceph/osd/ceph-4 /var/lib/ceph/osd/ceph-4/journal

# service ceph -a start osd.5
=== osd.5 ===
Starting Ceph osd.5 on osd-2...
starting osd.5 at :/0 osd_data /var/lib/ceph/osd/ceph-5 /var/lib/ceph/osd/ceph-5/journal

끝이다. 이제 다시 트리를 확인해보자.

# ceph osd tree 
# id    weight  type name       up/down reweight
-1      4       root default
-3      4               rack unknownrack
-2      2                       host osd-0
0       1                               osd.0   up      1
1       1                               osd.1   up      1
-4      2                       host osd-1
2       1                               osd.2   up      1
3       1                               osd.3   up      1
-5      2                       host osd-1
4       1                               osd.4   up      1
5       1                               osd.5   up      1

스토리지의 상태를 확인해보자.

~# ceph -s
   health HEALTH_OK
   monmap e1: 1 mons at {a=10.211.55.24:6789/0}, election epoch 1, quorum 0 a
   osdmap e23: 6 osds: 6 up, 6 in
    pgmap v150: 960 pgs: 960 active+clean; 8699 bytes data, 7064 MB used, 165 GB / 181 GB avail
   mdsmap e11: 1/1/1 up {0=a=up:replay} 

HEALTH_OK라고 나오고, 6 osds: 6 up이라고 나오면 osd 6개 모두 올라와있고 상태는 OK라는 뜻이니, 모두 이상이 없다. 이로서 OSD 추가설치는 끝났다. 다음 편에서는 이렇게 구축해놓은 스토리지 클러스터를 어떻게 사용할 수 있는지에 대해서 알아본다.

다음 편에서…