여기서부터 시작되는 설치매뉴얼은 특별한 언급이 없는한 Ceph, OSD-0 그리고 OSD-1 노드 모두 똑같이 실시하는 것으로 한다.  Ceph 노드에서 먼저 실시하고, 이후 OSD-0과 OSD-1 노드에 적용하는 것을 추천한다.

1.  먼저 Ceph로 사용할 컴퓨터 혹은 가상머신 (이하 Ceph라고 함)과 스토리지 용으로 사용할 가상머신 (이하 OSD라고 함)에 우분투 12.04 LTS를 설치한다.  설치 과정 중에 나오는 몇몇 설정은 반드시 아래의 조건을 따른다.

Ceph 노드의 호스트네임은 반드시 ceph로 한다.
첫번째 OSD 노드의 호스트네임은 반드시 osd-0,
그리고 두번째 OSD 노드의 호스트네임은 반드시 osd-1,
마찬가지로 세번째 OSD 노드의 호스트네임은 반드시 osd-2로 한다.

위의 사항이 꼭 "반드시" 지켜야하는 건 아니지만, 본 매뉴얼을 그대로 따라하기 위한 규칙 정도로 생각해주시면 되겠다.  꼭 알고있어야할 점은, Ceph는 hostname을 기준으로 작동한다는 점이다.  계정명은 크게 상관없으니 편한대로 정한다. 

OSD의 경우 우분투가 설치될 첫번째 하드디스크만 포맷하고, 나머지 2개는 추후 설명을 위해 일단 놔둔다. 

2.  sudo -i를 이용해 root로 변경 후 패스워드를 설정한다.
  a. Ceph 노드에서 root의 ssh 키를 만들어줘야한다.  ssh-keygen -t rsa
  b. Ceph 노드에서 ssh-copy-id ceph, ssh-copy-id osd-0 그리고 ssh-copy-id osd-1 명령어로 비밀번호 입력없는 접속을 위한 키를 전송해준다.  Ceph가 OSD 노드간 통신을 위해 SSH를 이용한다.
  c. 또한, 반드시 root의 ssh 접속을 허용해야한다.  /etc/ssh/sshd_config에서 root의 접속이 활성화되어있는지 확인한다.

3.  /etc/hosts 파일을 열어서 ceph, osd-0, 그리고 osd-1 서버 각각의 IP 주소와 호스트명을 똑같이 입력해준다.

4.  sudo apt-get update && sudo apt-get dist-upgrade를 실시하고 재부팅 한다.

5.  이제 Ceph의 저장소를 추가할 차례다.  Ceph가 이미 리눅스 커널에 포함되어있고 우분투/데비안 저장소에도 있긴 하지만, 버전이 워낙 낮은 관계로 (0.41), Ceph의 공식 매뉴얼대로 따라하면 제대로 되지않는다는 문제가 있다.  따라서,  Ceph의 저장소에서 직접 받아서 설치한다.
wget -q -O- 'https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc' | sudo apt-key add -
echo deb http://ceph.com/debian-bobtail/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
sudo apt-get update && sudo apt-get install ceph

6.  Ceph 패키지의 용량이 대략 36메가 가량 되는데, 우리는 이것을 OSD 서버들에도 똑같이 해야하기 때문에 apt-get clean을 하지말고 ceph에서 받아놓은 패키지를 osd-0/1의 /var/cache/apt/archives에 보낸다.

7.  Ceph의 버전을 확인해본다.  Ceph의 패키지 저장소가 제대로 추가되지 않았으면 0.41이 나올 것이고, 제대로 추가됐었다면 2013년 5월 8일 기준, 0.56.6이 표시될 것이다.
$ ceph -v
ceph version 0.56.6 (95a0bda7f007a33b0dc7adf4b330778fa1e5d70c)

8.  Ceph는 불친절하게도 설치시에 설정파일을 제공해주지 않는다.  직접 작성해야하는데, 그나마 다행스럽게 Ceph 문서에서 그대로 갖다붙이면 된다.  크게 어려운 부분은 없다.  일단 전체를 붙이고, 개별적으로 설명한다.  파일의 위치와 이름은 /etc/ceph/ceph.conf 이며, 권한은 644로 설정한다.

[global]
auth cluster required = cephx
auth service required = cephx
auth client required = cephx

[osd]
osd journal size = 1000
filestore xattr use omap = true

[mon.a]
host = {hostname}
mon addr = {ip-address}:6789

[osd.0]
host = {hostname}

[osd.1]
host = {hostname}
#devs = {path-to-device}

[mds.a]
host = {hostname}

[global] 섹션은 따로 건드려줄 건 없다.  ceph와 osd간의 인증방식에 대한 부분인데 어차피 cephx 말고는 다른 옵션이 none 밖에 없기도 하거니와, 이 부분은 none은 절대로 권장하지 않는다고 한다.

[osd] 섹션은 osd 스토리지의 저널 사이즈를 지정하거나 위치 등을 지정할 수 있는데, 사실 공식문서에도 전혀 설명이 없다.  따라서 공식문서에서 제공하는 옵션을 그대로 사용하기로 한다.  다만, filestore xattr use omap = true 라인은 다음편에서 설명할 osd 하드디스크를 위해 눈여겨보는 정도만 한다.

[mon.a] 섹션은 Ceph의 스토리지 클러스터를 모니터링하는 호스트를 지정하는 부분이다.  host = {hostname}에서 중괄호친 부분을 ceph라고 바꾼다.  host = ceph  만약 ceph 노드의 호스트네임을 ceph로 설정하지 않았다면 이 부분에서 따로 지정한 호스트네임을 넣는다.  하지만, Ceph의 작동은 호스트네임이 지대한 영향을 미치기 때문에 본 매뉴얼에서는 되도록 ceph로 지정할 것을 권하는 바이다.  참고로, Ceph에서는 공식적으로 3대 이상의 모니터용 호스트를 둘 것을 권고한다.  두번째 모니터라면 [mon.b]가 되며, 세번째 모니터는 [mon.c]가 된다.  네이밍 센스가 참 어처구니 없다.

[osd.0] 섹션과 [osd.1] 섹션은 예상하시는대로 osd가 될 노드의 저장장치를 지정하는 부분이다.  본 매뉴얼의 예제에서는 osd-0과 osd-1에 각각 2대의 OSD용 하드디스크가 있으니, 결국 우리가 쓸 총 osd의 갯수는 4개가 되겠다.  따라서, 아래와 같이 적으면 되겠다.

[osd.0]
host = osd-0

[osd.1] 
host = osd-0

[osd.2]
host = osd-1

[osd.3]
host = osd-1 

위에서 얘기했지만, 네이밍 센스 참 구리다.  당연한 말이지만 host 뒷부분에 나오는건 OSD 노드 각각의 호스트네임이다.

[mds.a] 섹션은 메타데이터 서버를 지정하는 곳이다.  역시 마찬가지로 본 매뉴얼의 예제에서는 ceph로 한다.


따라서 본 매뉴얼에서는, 모니터와 메타데이터로 ceph 서버에 전부 몰아넣어서 사용하기로 하고, 데이터 저장용도로는 osd-0과 osd-1에 장착된 2개의 추가 하드디스크를 사용하게 되는 것이다.

대충 그림

Ceph 공식매뉴얼에 의하면, #devs = {path-to-device} 부분에서 osd로 쓸 디바이스의 장치명을 입력해도 되게끔 주석처리를 해놨지만, 해도 되고 안해도 된다.  안해도 제대로 작동한다.  넣고싶으신 분은 /dev/sdb1 등의 형태로 넣으시면 된다.


다 됐으면, 방금 작성한 우리의 첫 설정파일을 나머지 OSD 노드들에도 똑같이 복사해줘야한다.  위치와 권한은 당연히 똑같다.  Ceph 노드에서 루트 권한으로 scp를 이용해서 보내자.  위치는 /etc/ceph/ceph.conf에, scp로 보내면 권한은 기본값으로 644를 주게된다.

 

다음 편으로...

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,