TT Lab
はじめる
学ぶ 学習パス コース

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

SeaweedFSを起動しファイルを保存・照会する

TT Labで続きを見る

目標

SeaweedFSのマスター、ボリュームサーバー、ファイラーを自分で立ち上げ、低レベルのAPIでファイルを保存・参照しながら、小さなファイルが大量にあるワークロードに、この構造がなぜ有利なのかを確認します。

なぜ重要なのか

4KBのファイル100万個は、データとしては4GBですが、ファイルシステムにとっては100万個のメタデータエントリです。inodeが枯渇し、一覧の取得が何分もかかり、バックアップツールがファイル1つ1つをstatするのに何日も使います。SeaweedFSは、FacebookのHaystackのアプローチに倣って、小さなファイルを大きなボリュームファイルの中に続けて書き、オフセットだけを記憶します。ファイル1,000個がボリュームファイル1つに入れば、inodeは1つで、読み取りはシーク1回です。このラボで特に重要なのは、ステップ3から5です。マスターに位置を尋ね、ボリュームサーバーに直接書き、また位置を尋ねて読むこの流れが、SeaweedFSのすべてです。ファイラーとS3ゲートウェイは、その上の利便性のための層にすぎず、この2つのステップを理解すると、なぜマスターがボトルネックにならないかが見えてきます。

ステップ

  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진문자열は、数字、カンマ、16進文字列の形式を指し、その形式である必要があります。
  4. /opt/fixtures/s3/readme.txtを、そのfidでボリュームサーバーにアップロードしてください。応答のsizeが0より大きい必要があります。
  5. /dir/lookup?volumeId=<볼륨ID>(山括弧の部分にはボリュームの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に、## 마스터、## 볼륨 서버、## 파일러の3つの見出し(順に、マスター、ボリュームサーバー、ファイラー)を入れ、各セクションを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진문자열は、数字、カンマ、16進文字列の形式を指し、その形式である必要があります。

マスターに書き込み位置を尋ねると、ファイルの識別子とサーバーのアドレスを、一緒に返してくれます。

発行されたIDでファイルをアップロードする

/opt/fixtures/s3/readme.txtを、そのfidでボリュームサーバーにアップロードしてください。応答のsizeが0より大きい必要があります。

マスターではなく、ボリュームサーバーにアップロードします。マスターは、位置を教えるだけです。

参照してダウンロードし、内容を確認する

/dir/lookup?volumeId=<볼륨ID>(山括弧の部分にはボリュームのIDを入れます)で位置を探して、ファイルを/root/sw/got.txtに受け取ってください。元のファイルと内容が同じである必要があります。

ボリュームIDで位置を尋ね、そのサーバーから受け取ります。元のファイルと同じである必要があります。

ファイラーを立ち上げ、パスで扱う

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を作成してください。内容が同じである必要があります。

ファイラーは、パスベースのアクセスを提供します。HTTPのPUTとGETで扱えます。

小さなファイルを500個入れ、ボリュームファイルの数を確認する

/root/sw/many.shで、4KiBのファイル500個を、ファイラーの/lab/small/の下に入れてください。/root/sw/volfiles.txtにfiles=500 dat_files=<n>を書き、nは10以下である必要があります。

ファイル500個が、ボリュームファイルいくつに入っているかを、数えてみてください。これが、このストレージの存在理由です。

3つのデーモンの役割を整理する

/root/sw/arch.mdに、## 마스터、## 볼륨 서버、## 파일러の3つの見出し(順に、マスター、ボリュームサーバー、ファイラー)を入れ、各セクションを25文字以上で書いてください。マスターのセクションには、メタデータを持たないという趣旨が入っている必要があります。

何がメタデータを持ち、何がデータを持つかが、要点です。指定された見出しを、正確に書いてください。