LabHub
배우기 러닝패스 코스

オブジェクトストレージとS3

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자 이상 쓴다. 마스터 절에는 메타데이터를 갖지 않는다는 취지가 들어가야 한다.

참고

마스터 띄우기

/root/sw/master 디렉터리를 만들고 weed master 를 127.0.0.1:9333 에 띄운다. curl http://127.0.0.1:9333/cluster/status 가 JSON 을 준다.

weed 바이너리의 하위 명령으로 각 역할을 띄웁니다. 데이터 디렉터리를 미리 만들어 두세요.

볼륨 서버 띄우고 마스터에 등록하기

/root/sw/vol1 을 만들고 weed volume 을 127.0.0.1:8180 에 띄워 마스터에 등록한다. curl http://127.0.0.1:9333/dir/status 응답에 볼륨 서버가 1개 이상 보여야 한다.

볼륨 서버는 마스터 주소를 알아야 합니다. 마스터의 상태에서 볼륨 서버가 보이는지 확인하세요.

파일 ID 발급받기

curl http://127.0.0.1:9333/dir/assign 결과의 fid/root/sw/fid.txt 에 저장한다. 숫자,16진문자열 형식이어야 한다.

마스터에 쓰기 위치를 물어보면 파일 식별자와 서버 주소를 함께 줍니다.

발급받은 ID 로 파일 올리기

/opt/fixtures/s3/readme.txt 를 그 fid 로 볼륨 서버에 올린다. 응답의 size 가 0보다 커야 한다.

마스터가 아니라 볼륨 서버에 올립니다. 마스터는 위치만 알려 줄 뿐입니다.

조회해서 내려받고 내용 확인하기

/dir/lookup?volumeId=<볼륨ID> 로 위치를 찾아 파일을 /root/sw/got.txt 로 받는다. 원본과 내용이 같아야 한다.

볼륨 ID 로 위치를 묻고 그 서버에서 받습니다. 원본과 같아야 합니다.

파일러 띄우고 경로로 다루기

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 를 만든다. 내용이 같아야 한다.

파일러는 경로 기반 접근을 제공합니다. HTTP PUT 과 GET 으로 다룰 수 있습니다.

소파일 500개 넣고 볼륨 파일 수 확인하기

/root/sw/many.sh 로 4KiB 파일 500개를 파일러의 /lab/small/ 아래에 넣는다. /root/sw/volfiles.txtfiles=500 dat_files=<n> 을 적고 n 은 10 이하여야 한다.

파일 500개가 볼륨 파일 몇 개에 담기는지 세어 보세요. 이것이 이 스토리지의 존재 이유입니다.

세 데몬의 역할 정리하기

/root/sw/arch.md## 마스터, ## 볼륨 서버, ## 파일러 세 제목을 넣고 각 절을 25자 이상 쓴다. 마스터 절에는 메타데이터를 갖지 않는다는 취지가 들어가야 한다.

무엇이 메타데이터를 갖고 무엇이 데이터를 갖는지가 핵심입니다. 지정된 제목을 정확히 쓰세요.