이두잉의 AWS 세상

AWS S3FS 파일 시스템

2015.12.08 17:00 - leedoing leedoing

안녕하십니까? 이두잉입니다.

금일은 s3fs를 이용해서 S3를 EC2 인스턴스에 mount 한 뒤 S3를 NAS와 같이 사용해보도록 하겠습니다.


1. Overview

s3fs는 fuse를 이용한 S3 파일시스템입니다. (오픈소스)

NAS를 대용하기 위해 사용할 수 있지만 성능이 상당히 안 나옵니다. 

S3의 파일 디렉터리 구조 및 내용을 확인할 수 있기 때문에 뷰잉 혹은 rsync 용도로 사용하는게 적당할 듯 합니다.

(참고 - 최대 파일 사이즈 64GB / Windows 지원 불가 / Linux Kernel 2.6.18-164 이상)


s3fs의 위 문제를 개선한 3rd party solution인 SoftNas filesystem이 있으나, 이 역시 EBS보다 훨씬 느립니다. 가격도 꽤 비쌉니다.

또한, S3에서 Meta-Data 형태로 파일을 보관하고 있어 꼭 인스턴스를 거쳐야 정상적인 컨텐츠를 확인할 수 있습니다.


2. Getting Started

IAM 부분은 생략하고 진행하도록 하겠습니다. 보안을 위해서 S3 Full 권한만 주어서 생성하세요.

Linux에서 Ubuntu 버전의 패키지가 다릅니다. 패키지 설치 이후 방법은 동일합니다.

일단 실습 전 yum -y update를 해주시기 바랍니다.

1-1. Ubuntu에 S3FS 설치

- 패키지 설치

1
2
3
4
5
6
apt-get install build-essential
apt-get install libfuse-dev
apt-get install fuse-utils
apt-get install libcurl4-openssl-dev
apt-get install libxml2-dev
apt-get install mime-support
cs

 

 

1-2. Fedora/CentOS/AmazonLinux에 S3FS 설치

-패키지 설치

1
2
3
4
5
6
7
8
9
yum install gcc
yum install libstdc++-devel
yum install gcc-c++
yum install fuse
yum install fuse-devel
yum install curl-devel
yum install libxml2-devel
yum install openssl-devel
yum install mailcap
cs

 

-s3fs 릴리즈 버전 다운로드 컴파일 설치

1
2
3
4
5
6
tar xvzfs3fs-1.74.tar.gz
cd s3fs-1.74/
./configure --prefix=/usr
make
make install (as root)
cs

-s3fs Subversion Repository 다운로드 컴파일 설치

1
2
3
4
5
6
cd s3fs/
autoreconf--install (or ./autogen.sh)
./configure --prefix=/usr
make
make install (as root)
cs

-S3 Full 권한을 주고 생성한 Access과 Secret Key를 /etc/passwd-s3fs 에 등록합니다.

1
echo "AccessKey:SecretKey"| tee /etc/passwd-s3fs
cs

-등록한 파일에 퍼미션 640 퍼미션을 줍니다.

1
chmod 640 /etc/psswd-s3fs
cs

-S3를 mount 할 디렉토리를 생성합니다.

1
mkdir /mnt
cs

-S3를 mount 해봅시다.

1
/usr/bin/s3fs "버킷이름" /"마운트디렉토리"
cs

 

-확인, S3가 mount 되어 기존 Disk와 같이 사용 가능합니다.



 

-심화

-s3fs는 많은 옵션들이 있습니다. (s3fs -h)

-NFS처럼 S3를 사용할 경우 어떤 인스턴스에서 저장된 파일인지 확인할 필요가 있습니다.

먼저, id ec2-user를 통해 해당 인스턴스의 id를 확인합니다.

1
2
#id ec2-user 
uid=500(ec2-user) gid =500(ec2-user) groups=500(ec2-user), 10(wheel)
cs

그리고 해당 id들을 mount 할 때 등록합니다.

1
s3fs leedoing /mnt -o rw, allow_other, use_cache=/mnt uid=500, gid=500
cs

그 뒤에 cp 명령어를 통해 S3로 업로드를 하면 해당 정보들이 파일의 Metadata로 등록됩니다.



-또한 use_cache 옵션은 한 번 read 됐던 데이터를 EC2에서 캐싱하여 두 번째 read 시에는 좀 더 빠른 성능을 확인할 수 있습니다만, 그로 인해 인스턴스의 성능 저하가 발생될 수 있습니다. 또한 S3의 파일이 갱신되도 이전 파일을 캐싱할 수 있으니 주의하시기 바랍니다.

1
/usr/bin/s3fs "버킷이름" "/마운트디렉토리" -o use_cache="/마운트디렉토리"
cs




3. Result

EC2 인스턴스에 S3FS를 사용하여 S3를 Mount해서 NAS(NFS..)와 같이 사용해봤습니다.

다만, 기존 EBS보다 write가 수십배 이상 느립니다.

S3 API 호출보다 write가 저용량 이미지 파일 기준 3배 이상 느리며, 고용량 파일의 경우 멀티파트 업로드를 지원하지 않아 수백배 느립니다.

주로 저용량 파일을 rsync 용으로 스케쥴링해서 사용한다면 NFS 구축에 대한 비용을 절감하실 수 있습니다.

Window OS 이용해서 s3 mount할 경우 3rd party solution(Cloudberry, TntDrive 등)을 이용하면 됩니다.

해당 서비스들을 이용할 경우 네트워크 드라이브로 연결됩니다.

그 중 하나인 Cloudberry사의 Drive 솔루션을 사용해서 테스트 했을 경우 1GB 압축 파일 업로드 시 약 2분 정도 시간이 소요 됐습니다.

window aws cli의 경우 약 4분 / AWS Webconsole 상에서는 약 20분 정도 걸린 것에 비해 뛰어난 성능을 확인했습니다.

해당 솔루션들을 이용해서 FileServer 대용으로 사용하면 좋을 듯 합니다.

감사합니다.


'Storage&CDN > S3' 카테고리의 다른 글

AWS S3FS vs EBS Performance  (2) 2016.01.27
AWS S3 Region 간 데이터 복제  (0) 2016.01.12
AWS S3 Upload Tool 3rd party solution(CloudBerryExplorer)  (0) 2015.12.08
AWS S3FS 파일 시스템  (0) 2015.12.08
AWS S3 I/O 성능  (0) 2015.11.23
AWS S3 Client Tool 및 CLI 정리  (0) 2015.11.23