오브젝트 스토리지와 S3 · SeaweedFS — 작은 파일이 많을 때의 선택 · 실습
SeaweedFS 기동하고 파일 저장·조회하기
목표
SeaweedFS 의 마스터, 볼륨 서버, 파일러를 직접 띄우고 저수준 API 로 파일을 저장·조회하면서, 소파일 대량 워크로드에 이 구조가 왜 유리한지 확인한다.
왜 중요한가
4KB 파일 100만 개는 데이터로는 4GB 지만 파일시스템에는 100만 개의 메타데이터 엔트리입니다. inode 가 고갈되고, 목록 조회가 몇 분씩 걸리고, 백업 도구가 파일 하나하나를 stat 하느라 며칠을 씁니다. SeaweedFS 는 페이스북 Haystack 의 접근을 따라 작은 파일들을 큰 볼륨 파일 안에 이어서 쓰고 오프셋만 기억합니다. 파일 1,000개가 볼륨 파일 하나에 들어가면 inode 는 하나이고 읽기는 시크 한 번입니다. 이 실습에서 특히 중요한 것은 3~5번 스텝입니다 — 마스터에 위치를 묻고, 볼륨 서버에 직접 쓰고, 다시 위치를 물어 읽는 이 흐름이 SeaweedFS 의 전부입니다. 파일러와 S3 게이트웨이는 그 위의 편의 계층일 뿐이고, 이 두 단계를 이해하면 왜 마스터가 병목이 되지 않는지가 보입니다.
단계
1. /root/sw/master 디렉터리를 만들고 weed master 를 127.0.0.1:9333 에 띄운다. curl http://127.0.0.1:9333/cluster/status 가 JSON 을 준다.
2. /root/sw/vol1 을 만들고 weed volume 을 127.0.0.1:8180 에 띄워 마스터에 등록한다. curl http://127.0.0.1:9333/dir/status 응답에 볼륨 서버가 1개 이상 보여야 한다.
3. curl http://127.0.0.1:9333/dir/assign 결과의 fid 를 /root/sw/fid.txt 에 저장한다. 숫자,16진문자열 형식이어야 한다.
4. /opt/fixtures/s3/readme.txt 를 그 fid 로 볼륨 서버에 올린다. 응답의 size 가 0보다 커야 한다.
5. /dir/lookup?volumeId=<볼륨ID> 로 위치를 찾아 파일을 /root/sw/got.txt 로 받는다. 원본과 내용이 같아야 한다.
6. weed filer 를 127.0.0.1:8888 에 띄운다. /opt/fixtures/s3/sales.csv 를 http://127.0.0.1:8888/lab/sales.csv 로 PUT 하고 GET 으로 되받아 /root/sw/filer.csv 를 만든다. 내용이 같아야 한다.
7. /root/sw/many.sh 로 4KiB 파일 500개를 파일러의 /lab/small/ 아래에 넣는다. /root/sw/volfiles.txt 에 files=500 dat_files=<n> 을 적고 n 은 10 이하여야 한다.
8. /root/sw/arch.md 에 ## 마스터, ## 볼륨 서버, ## 파일러 세 제목을 넣고 각 절을 25자 이상 쓴다. 마스터 절에는 메타데이터를 갖지 않는다는 취지가 들어가야 한다.
참고
- 마스터:
weed master -mdir=/root/sw/master -port=9333 -ip=127.0.0.1 - 볼륨:
weed volume -dir=/root/sw/vol1 -mserver=127.0.0.1:9333 -port=8180 -ip=127.0.0.1 - 파일러:
weed filer -master=127.0.0.1:9333 -port=8888 -ip=127.0.0.1 - 볼륨 파일 세기:
ls /root/sw/vol1/*.dat | wc -l - 흔한 실수 1: 마스터에 파일을 올리려는 것 — 마스터는 위치만 알려 줍니다.
- 흔한 실수 2: 각 데몬의
-ip를 지정하지 않아 등록된 주소가 접근 불가한 것.
단계 8개
- 마스터 띄우기
- 볼륨 서버 띄우고 마스터에 등록하기
- 파일 ID 발급받기
- 발급받은 ID 로 파일 올리기
- 조회해서 내려받고 내용 확인하기
- 파일러 띄우고 경로로 다루기
- 소파일 500개 넣고 볼륨 파일 수 확인하기
- 세 데몬의 역할 정리하기