이번 편에서는 RADOS Gateway를 이용한 Amazon S3 및 OpenStack Swift API 사용법이 되겠다.

Ceph에 스토리지 접근을 위한 몇 가지 API를 내장하고 있는데 현재 많이 쓰이는 Amazon S3와 오픈스택의 Swift API를 내장하고 있다. 다만 Swift API의 경우 현재로서는 버전 1.0만 지원하고 있으며, 글쓴이의 경험으로는 Swift는 아무리 애를 써도 SSL로는 작동을 못시키겠더라. 또한, Swift를 지원하는 FTP 클라이언트, 예를 들어 Cyberduck 같은 유명 FTP 클라이언트를 이용한 Swift 접속 역시 아무리 애를 써도 제대로 작동되지 않는다. 그렇다면 대체 어떤 식으로 작동을 했느냐 하면… Swift client가 설치된 리눅스 컴퓨터에서 터미널 열고 명령어를 치는 것으로 동작을 확인할 수 있었다. 동작은 제대로 잘 됐지만 리눅스 터미널에서의 swift 명령어 사용을 제외한 나머지는 하나도 되는 게 없었다.

Amazon S3의 경우는 위에서 언급한 맥/윈도우용으로 절대적이라고 할 수 있을만큼 유명한 Cyberduck에서 테스트를 실시해봤으며, 리눅스에서는 DragonDisk라는 멀티플랫폼 FTP Client를 사용해서 테스트를 실시했다. 모두 이상없이 잘 진행됐었다.

Ceph에서는 RADOS (글쓴이가 사는 곳에서는 “레이도스” 라고 읽는다)라는 Ceph 클러스터의 기초가 되는 개념의 오브젝트 스토어 모델이 Ceph의 핵심을 이루고 있으며 게이트웨이, 다시말하자면 결국 RESTful API를 통해서 스토리지에 접근할 수 있는 몇가지 방법을 제시하고 있다. API의 종류로는, 위에 언급한 Amazon S3, Swift v1.0, Block device, CephFS, Object Store, 그리고 Admin용 API가 제공되고 있다.

설치를 시작해보자. API의 제공형태는 REST이므로 당연하게도 웹서버가 필요하다. 여기에 FastCGI 모듈이 필요하다. Apache2-HTTPS 관련 설명은 제외토록 한다. 이 매뉴얼 보면서 따라하시는 분들이라면 다들 기본 장착하셨을거라고 생각한다.

sudo apt-get install apache2 libapache2-mod-fastcgi

설치가 끝나면 ReWrite 모듈과 FastCGI 모듈을 켜준다.

sudo a2enmod rewrite
sudo a2enmod fastcgi
sudo a2enmod ssl

공식문서에는 아파치 서버를 툭하면 재시작해주는데, 우리는 한 번에 설정해서 끝내도록 해보자. 어느정도 기본적인 설정이 됐으면 RADOS Gateway와, 필요한 분에 한해서 SSL 인증서를 생성/설치한다.

sudo apt-get install radosgw
sudo mkdir /etc/apache2/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2049 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

이번에는 ceph.conf 파일에도 몇가지 설정의 추가가 필요하다. 일단, 아래와 같이 입력한다.

[client.radosgw.gateway]
host = ceph
keyring = /etc/ceph/keyring.radosgw.gateway
rgw socket path = /tmp/radosgw.sock
log file = /var/log/ceph/radosgw.log
rgw dns name = ceph

참고로, host 네임은 FQDN이 아니라 반드시 머신의 hostname을 적어줘야한다. 그외 공식문서에 의하면 자기네들이 수정해서 배포하는 FastCGI를 사용하지 않을거라면 반드시 다음의 라인을 추가하라고 한다.

rgw print continue = false

설정이 다된 ceph.conf 파일을 OSD 노드들에도 똑같이 전송해준다.

데이터용 디렉토리를 생성한다.

sudo mkdir -p /var/lib/ceph/radosgw/ceph-radosgw.gateway

이제는 아파치의 버츄얼 호스트를 수정할 시간이 왔다. 여기서 본 매뉴얼을 보시는 분들에 따라 다양한 형태의 세팅이 나오기 때문에 자세한 설명은 생략하겠다. 본 매뉴얼은 80번 포트에서 Swift, 443번 포트에서 Amazon S3의 API를 제공하는 경우로 설정을 한다.

FastCGI 설정을 해야하는데, 당연히 http/https 모두 돌아가야한다. /etc/apache2/ports.conf 파일을 열어서 다음 라인 2줄을 삭제하거나 주석처리한다.

NameVirtualHost *:80
Listen 80 

그런 다음 아래의 라인을 삽입한다.

FastCgiExternalServer /var/www/s3gw.fcgi -socket /tmp/radosgw.sock

/var/www/s3gw.fcgi 작성은 밑에서 따로 설명한다. 이제 버츄얼 호스트 파일을 작성해야하는데, 기존의 설정파일은 그냥 보존하는 의미에서 새로운 파일들을 작성한다.

sudo touch /etc/apache2/sites-available/{rgw,rgw-ssl}

rgw부터 작성해보자. 파일이름에서 유추할 수 있듯, http에서 작동될 Swift v1.0 API다. 일단 꼭 들어가야하는 라인을 붙여드리고, 그 밑에 글쓴이의 실제 서버에서 작동 중인 파일을 첨부해드린다.

파일 맨 상단에 아래의 두 줄을 넣어준다. 위에 ports.conf에서 삭제했으니, 다시 넣어주는 것일 뿐이다.

NameVirtualHost *:80
Listen 80 

아래에 들어가야할 부분은 다음과 같다.

RewriteEngine On
RewriteRule ^/([a-zA-Z0-9-_.]*)([/]?.*) /s3gw.fcgi?page=$1¶ms=$2&%{QUERY_STRING} E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] 


    
        Options +ExecCGI
        AllowOverride All
        Order allow,deny
        allow from all
        AuthBasicAuthoritative Off
    

아래의 두 줄을 끝나기 전 아무데나 삽입해준다.

AllowEncodedSlashes On
ServerSignature Off 

rgw-ssl 파일은 사실 위의 파일과 크게 다를 건 없다. 단지 첫 줄에 내지는 이 들어가있는지, 그리고 SSL 인증서 관련 부분만 확인하면 된다.

이제 CGI 파일을 작성하자. /var/www/s3gw.fcgi 파일을 생성해서 다음의 두 줄을 넣고 저장한다.

#!/bin/sh
exec /usr/bin/radosgw -c /etc/ceph/ceph.conf -n client.radosgw.gateway

위 파일에 쓰기 권한을 준다.

sudo chmod +x /var/www/s3gw.fcgi 

기본으로 설정되어있는 버츄얼 호스트를 내리고, 새로 작성한 위의 두 파일을 올리자.

sudo a2dissite default
sudo a2ensite rgw
sudo a2ensite rgw-ssl 

Ceph키를 생성해줘야하는데 그냥 아래의 다섯 줄을 그냥 치면 된다.

sudo ceph-authtool --create-keyring /etc/ceph/keyring.radosgw.gateway
sudo chmod +r /etc/ceph/keyring.radosgw.gateway
sudo ceph-authtool /etc/ceph/keyring.radosgw.gateway -n client.radosgw.gateway --gen-key
sudo ceph-authtool -n client.radosgw.gateway --cap osd 'allow rwx' --cap mon 'allow r' /etc/ceph/keyring.radosgw.gateway
sudo ceph -k /etc/ceph/ceph.keyring auth add client.radosgw.gateway -i /etc/ceph/keyring.radosgw.gateway

설치 및 설정이 모두 끝났다. 아파치와 Ceph를 재시작해주고 새로운 서비스 데몬인 radosgw를 시작해주면 된다.

sudo service ceph restart
sudo service apache2 restart
sudo /etc/init.d/radosgw start

참고로, 위의 Ceph 재시작 명령어에서 -a가 붙지않은 이유는 모든 서비스를 재시작할 필요가 없기 때문이고, 따라서 빠르게 재시작이 가능하다.
이로서 설치는 끝났다. CGI 스크립트가 제대로 작동되는지를 보려면, 웹브라우저를 열고 접속해보면 된다.

다음 편에서는 API를 이용하는 방법을 알아본다.

다음 편에서…