본문 바로가기

06. Cloud/AWS

s3fs를 이용한 Ubuntu 14.04 AWS S3 Linux mount와 Performance

 기존의 System을 AWS에 옮기는데 가장 큰 장애물중에 하나는 S3입니다. 기존의 System은 Disk상의 File System을 사용하였기 때문에 AWS에 올렸을 경우에는 매우 난감한 상황이 생깁니다. 일단, EBS(Elastic Block Storage)의 가격은 매우 비싸고, Instance를 Termination 시켰을 때 다 날라가기 때문에 System이 Reactive하지 못하게 설계가 되는 한계가 생깁니다. 그래서 결국은 AWS S3를 사용해야 하는데, 기본적으로 Library를 사용해서 고쳐야 하는 단점이 있습니다. 그래서 보통 Service에서 많이 받게 되는 유혹이 s3fs를 이용하여 AWS를 nfs로 mount 하여 사용 하는 것입니다. 

 이 방식은 매우 유용한데, 일단 Disk File system과 똑같이 사용을 할 수 있습니다. 기존의 System을 전혀 고치지 않고도 사용을 할 수 있죠.(물론 Latency 때문에 그렇진 않지만.. 아래에서 다루도록 하겠습니다.) Coding 할때도 마치 File을 Mount된 Disk에 저장을 하는 방식처럼 되어 있어서 다른것을 따로 공부할 필요없이 짤 수 있습니다. 일단 이렇게 유용한 s3fs를 Ubuntu에 설치하는 방법을 알아봅시다.

환경 : Ubuntu 14.04 LTS

일단 s3fs의 릴리즈 버전을 github에서 다운 받아 봅시다. 아래의 URL에서 다운 받을 수 있습니다.

https://github.com/s3fs-fuse/s3fs-fuse/tags


$ sudo apt-get install automake autotools-dev g++ git libcurl4-gnutls-dev libfuse-dev libssl-dev libxml2-dev make pkg-config

// 관련 Dependency를 다운 받습니다.

$ wget https://github.com/s3fs-fuse/s3fs-fuse/archive/v1.79.tar.gz

// 일단 최신 Release버전을 다운받아 봅시다.

$ tar xvzf ./v1.79.tar.gz

// 다운받을것을 압축을 풉니다.

cd ./s3fs-fuse-1.79/

$ ./autogen.sh

$ ./configure --prefix=/usr

$ make

$ sudo make install

// 컴파일 후 설치

$ sudo vi /etc/passwd-s3fs

// 다음 파일에 AWS의 Credential keyid와 secrete key를 'keyid:secretekey' 형식으로 적어 넣습니다.


Credential key는 다음과 같이 얻을 수 있습니다.

오른쪽 상단의 이름을 눌러 Security Credentials로 들어갑니다.


그 후, Create New Access Key를 통하여 CSV 파일을 다운 받을 수 있습니다. 그 파일 안에 keyID와 secrete Key가 들어있습니다. 


$ sudo chmod 640 /etc/passwd-s3fs

// 그 후 그 secrete Key를 s3fs가 읽을 수 있게 해줍니다.

$ s3fs {Mount 할 Bucket} {Mount할 Directory} -o allow_other

// 다른 사용자도 사용 할 수 있게 한 후, s3fs를 Mount 합니다.


이러한 과정을 거치면 s3fs가 원하는 Directory에 Mount됩니다.


s3fs의 성능적 Issue

사실 s3fs를 Service 환경에서 쓰라고 한다면, 글쌔...? 라고 생각을 합니다. s3fs는 nfs로 마치 filesystem에 mount가 되는 것은 매우 편리해 보이지만, 아직 여러모로 문제가 있습니다. 예를 들어 연속적으로 폴더에 넣으려고 할 경우 가끔씩 뻑이나는 경우로 생겼습니다. 또한 Architecture의 문제로 인하여 기존의 Library를 사용하여 upload 하는 것 보다 느릴 수 있습니다.

이렇게 필요없는 복사를 한번 더하게 됨으로서 s3fs의 성능은 낮아잘 수 밖에 없습니다. 사실 빠를리가 없긴합니다. 그렇다면 s3fs의 기능중 Cache folder를 지정할 수 있는 방법이 있는데, tmp folder를 Ramdisk로 사용하면 안될까? 라는 의문이 생길 수 있습니다. 그러나, 그것 또한 쉽지가 않습니다. Ramdisk도 여전히 불안합니다. 

다음은 제가 측정한 측정값들입니다. 다만 round time을 측정하였으며, 정확하지 않을 수 있습니다. 참고하시고 사용하시길 바랍니다.

50개의 file을 지우는 동작

보통 File System에서 작동s3fs에서 작동s3+ramdisk에서 작동aws Commandline Tool에서 작동
real0.004real1.572real1.495real0.875
user0.001user0user0.001user0.378
sys0.003sys0.003sys0.002sys0.027


ls -al을 할 경우의 round time(AWS의 Commandline Tool의 경우 비슷한 일을 하는 Command를 씀.)

보통 File System에서 작동s3fs에서 작동s3+ramdisk에서 작동aws Commandline Tool에서 작동
real0.001real0.384real0.382real0.565
user0user0user0.001user0.161
sys0.001sys0.001sys0sys0.018


50개의 file을 옮기는 작업

보통 File System에서 작동s3fs에서 작동s3+ramdisk에서 작동aws Commandline Tool에서 작동
real0.001real0.661real0.315real0.36
user0user0user0user0.185
sys0.001sys0.001sys0.005sys0.03


'06. Cloud > AWS' 카테고리의 다른 글

Scala로 AWS Lambda 사용하기  (0) 2016.10.02
AWS(Amazon Web Service) Instance 생성 & Putty로 접속  (0) 2014.11.12
AWS Android SSH 접속  (0) 2014.11.12