이제는 실제 Ceph와 OSD의 구성파일들이 저장되는 위치와 관련 파일들을 세팅해주는 단계이다. 역시, 간단하고 쉽고 크게 어려운 것은 없다. 이번 편부터는 터미널을 3개 띄우던지 tmux나 screen등 편하신대로 취향에 맞춰, ceph, osd-0 그리고 osd-1의 터미널을 모두 열어서 작업하는 것을 추천한다.

일단 본 매뉴얼에서는 이전 편에서 언급했듯, ceph는 MDS와 모니터만, osd-0과 osd-1에서는 osd를 사용한다고 했다. 따라서, 먼저 ceph에 모니터와 메타데이터 디렉토리를 생성해준다.

sudo mkdir -p /var/lib/ceph/mon/ceph-a
sudo mkdir -p /var/lib/ceph/mds/ceph-a 

앞서 몇번 얘기했지만 네이밍 센스가 참 어처구니 없다. 설정파일에서는 mon.a라고 해놓구서 디렉토리는 ceph-a로 작성하는건 또 뭔지. 이번에는 osd-0으로 이동해서 osd용 디렉토리를 생성해줘야하는데, osd-0과 1에 있는 2개의 osd용 하드디스크는 아직 포맷을 하지 않은 상태이다. 1편에서 일단 포맷을 하지말고 넘어가라고 설명했던 이유는 여기서 어떠한 파일시스템으로 포맷을 할건지 결정하기 위한 설명을 드리기 위함이다.

먼저 Ceph의 공식문서에 의하면, Ceph는 B-Tree FS (btrfs)나 XFS를 사용할 것을 추천한다. 그런데, btrfs는 아직 정식으로 사용하기에는 아직 불안한 감이 많기때문에 본 매뉴얼에서는 btrfs은 선택하지 않는다고 가정한다. 따라서, xfs로 포맷을 해볼 수도 있겠다. 물론 우리의 친구 ext4로 포맷해도 상관없다. 글쓴이는 둘 다 해봤다. 여기서, 둘 중 뭘로 포맷을 하느냐에 따라 해줘야할 작업이 한 가지씩 나뉜다. 일단은 먼저 osd 디렉토리부터 만들자. 아래의 디렉토리가 곧 마운팅 포인트가 된다.

osd-0에서

sudo mkdir -p /var/lib/ceph/osd/ceph-0
sudo mkdir -p /var/lib/ceph/osd/ceph-1

osd-1에서

sudo mkdir -p /var/lib/ceph/osd/ceph-2
sudo mkdir -p /var/lib/ceph/osd/ceph-3

현재 파티션 테이블이 존재하지 않을테니 파티션을 생성해주고 포맷을 한다. osd-0과 osd-1의 2개 하드디스크 모두 실시한다.
예)

sudo fdisk /dev/sdb -> n -> p -> 엔터 -> 엔터 -> 엔터 ->wq
sudo mkfs.ext4 -j /dev/sdb1

1. XFS로 포맷할 경우

/etc/ceph/ceph.conf 파일을 열어서 filestore xattr use omap = true 라인을 삭제한다. 그렇다. 해당 라인은 ext4를 위한 옵션이다. 그리고 위에 생성해준 마운팅 포인트로 마운트를 한다. 다음번 부팅시 Ceph클러스터가 제대로 작동되려면 /etc/fstab에도 당연히 추가를 시켜줘야하겠다.

osd-0에서

sudo mount /dev/sdb1 /var/lib/ceph/osd/ceph-0
sudo mount /dev/sdc1 /var/lib/ceph/osd/ceph-1 

osd-1에서

sudo mount /dev/sdb1 /var/lib/ceph/osd/ceph-2
sudo mount /dev/sdc1 /var/lib/ceph/osd/ceph-3

2. EXT4로 포맷할 경우
마운트 옵션에 반드시 user_xattr이 들어가야한다. /etc/fstab를 열어서 마운팅에 user_xattr을 넣어준다. 현재 시점에서는 마운트만 하면 되므로 옵션을 줘서 마운트를 한다.

osd-0에서

sudo mount -o user_xattr /dev/sdb1 /var/lib/ceph/osd/ceph-0
sudo mount -o user_xattr /dev/sdc1 /var/lib/ceph/osd/ceph-1 

osd-1에서

sudo mount -o user_xattr /dev/sdb1 /var/lib/ceph/osd/ceph-2
sudo mount -o user_xattr /dev/sdc1 /var/lib/ceph/osd/ceph-3

fstab 예:

UUID=e2af1baa-4ca2-434b-8bce-807a9e2e61f3 /var/lib/ceph/osd/ceph-0  ext4  user_xattr  1 2
UUID=5b055bb2-2875-4dcb-bda9-c963e966c7b9 /var/lib/ceph/osd/ceph-1  ext4  user_xattr  1 2 

다만 여기서 문제가, Ceph의 공식문서에는 Dump와 Pass값에 대한 언급이 없다는 점이다. 글쓴이는 1 2로 했다. 아무래도 1 2가 맞는 것 같다.

mount 명령어를 쳤을 때 user_xattr이 나와야 제대로 된 거다.

/dev/sdb1 on /var/lib/ceph/osd/ceph-0 type ext4 (rw,user_xattr)

다 됐으면 마지막 준비작업으로 /etc/ceph/ceph.conf 파일을 OSD 노드들에게도 똑같이 보내줘야한다. 모든 Ceph 클러스터 노드들은 반드시 같은 내용의 ceph.conf 파일을 갖고있어야한다.

sudo scp /etc/ceph/ceph.conf osd-0:/etc/ceph/
sudo scp /etc/ceph/ceph.conf osd-1:/etc/ceph/

이제서야 드디어 클러스터를 구성하라는 명령어를 내리는 단계에 왔다. 명령어는 달랑 한 줄이다. ceph 노드에서 실시한다. 앞으로는 특별한 일이 없으면 osd-0과 osd-1은 건드리지 않는다.

sudo mkcephfs -a -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.keyring

명령어를 실행하고나면 뭔가 글씨가 주르륵 올라가는데 메시지가 길기 때문에 스크롤상 생략한다. 일단 여기서 나오는 No such file or directory 메시지는 무시해도 된다. 파일이 없는건 당연하기 때문이다. 하지만 빨간 글씨로 뭔가가 나왔다거나 failed라는 메시지가 보인다면 제대로 되지않았다는 얘기다. 마운트 포인트를 확인하고 각각의 하드디스크가 각자의 마운팅 포인트에 마운트가 제대로 됐는지 확인을 하고, 모두 이상이 없으면 /var/lib/ceph/osd/ceph-?/, /var/lib/ceph/mon/ceph-a/, /var/lib/ceph/mds/ceph-a/ 디렉토리에 밑에 있는 파일과 디렉토리들은 모두 수동으로 삭제를 해줘야 위의 명령어를 다시 실행할 수 있다. 또한, OSD 노드들의 /var/lib/ceph/osd/ 디렉토리에 가서 ls 명령어를 쳐보면 알 수 없는 파일들이 조금 있는데, osd 디스크 하나당 대략 1기가바이트 정도의 용량을 차지하는 것을 볼 수 있다.

위의 명령어를 실행하고나면, OSD 2대에 각각 2대의 하드디스크 즉, 총 4개의 OSD 스토리지를 세팅하게되는데, 시간은 불과 몇초 안걸린다. 명령어를 실행하고나면 /etc/ceph 디렉토리에 ceph.keyring이라는 파일이 보일 것이며, 이것의 권한을 644로 변경해준다.

이제 Ceph의 서비스 데몬을 실행해주자.

sudo service ceph -a start

대략 아래와 같은 화면이 나온다.

=== mon.a === 
Starting Ceph mon.a on ceph...
starting mon.a rank 0 at 10.211.55.24:6789/0 mon_data /var/lib/ceph/mon/ceph-a fsid 1d703392-a1b4-4588-880e-a699207f8c8d
=== mds.a === 
Starting Ceph mds.a on ceph...
starting mds.a at :/0
=== osd.0 === 
Starting Ceph osd.0 on osd-0...
starting osd.0 at :/0 osd_data /var/lib/ceph/osd/ceph-0 /var/lib/ceph/osd/ceph-0/journal
=== osd.1 === 
Starting Ceph osd.1 on osd-0...
starting osd.1 at :/0 osd_data /var/lib/ceph/osd/ceph-1 /var/lib/ceph/osd/ceph-1/journal
=== osd.2 === 
Starting Ceph osd.2 on osd-1...
starting osd.2 at :/0 osd_data /var/lib/ceph/osd/ceph-2 /var/lib/ceph/osd/ceph-2/journal
=== osd.3 === 
Starting Ceph osd.3 on osd-1...
starting osd.3 at :/0 osd_data /var/lib/ceph/osd/ceph-3 /var/lib/ceph/osd/ceph-3/journal

상태를 체크해보자. sudo ceph health 라는 명령어를 치면 HEALTH_OK 라고 떠야한다. 만약 Warning이 뜨면 몇분정도 기다렸다가 다시 명령어를 내려보거나, 그래도 안되면 서비스 데몬을 재시작 해본다.

이제 마지막으로, 생성된 keyring을 OSD 노드에 보내주면 설치는 모두 끝이다. 위에서 keyring의 권한을 644로 변경해줬는지 꼭 확인하자.

sudo scp /etc/ceph/ceph.keyring osd-0:/etc/ceph/
sudo scp /etc/ceph/ceph.keyring osd-1:/etc/ceph/ 

다음 편은 OSD를 추가해야할 경우에 대해서 설명드리도록 한다.

다음 편에서…