LabHub

오브젝트 스토리지와 S3 · SeaweedFS — 작은 파일이 많을 때의 선택 · 실습

SeaweedFS 기동하고 파일 저장·조회하기

LabHub 에서 이어서 보기

목표

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.csvhttp://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.txtfiles=500 dat_files=<n> 을 적고 n 은 10 이하여야 한다.
8. /root/sw/arch.md## 마스터, ## 볼륨 서버, ## 파일러 세 제목을 넣고 각 절을 25자 이상 쓴다. 마스터 절에는 메타데이터를 갖지 않는다는 취지가 들어가야 한다.

참고

단계 8개

  1. 마스터 띄우기
  2. 볼륨 서버 띄우고 마스터에 등록하기
  3. 파일 ID 발급받기
  4. 발급받은 ID 로 파일 올리기
  5. 조회해서 내려받고 내용 확인하기
  6. 파일러 띄우고 경로로 다루기
  7. 소파일 500개 넣고 볼륨 파일 수 확인하기
  8. 세 데몬의 역할 정리하기