20190314-ストレージってなんだっけ? ~ AWSのストレージサービスを添えて ~

published here: https://wiki.infra-workshop.tech/5c8a685fc129810042faa929 ストレージとは何だったかをおさらいしつつ。

ストレージの種類

  • (B)ブロックストレージ
  • (F)ファイルストレージ
  • (O)オブジェクトストレージ

前置き

  • AWSのストレージサービスになぞりつつ学んでいきましょう。
  • 主に、クライアントからのアクセスが違います。

ブロックストレージ

1番難しい

ストレージのプロトコル

  • 必ず何かしらのプロトコルを使う

    • FC(Fibre Channel)
    • FCoE(FC over Ethernet)
    • iSCSI (port 3260)
    • DAS(Direct Access Storage)
  • 何かしらのケーブルを使う

    • FC, SATA, Ethernet, ...
  • 「ストレージの中ではどのように管理されているか」

    • ブロックとして管理されている
    • メモリアドレスのような「番地」を持っている
      • 固定長で切り分けられている
      • 番地ごとにアクセスする
        • xx番地に書き込みたい
          • サイズが大きければ、xx~yy番地までを使う
        • xx番地を読み込みたい
    • どのプロトコルを使っても、このアクセス方法は変わらない
    • 皆さんのPC、スマホはブロックストレージ
      • 番地とかは考えることはない
        • フォルダ分けされている、フォルダを作る、ファイルを作る...
          • ここにはそのような概念は出てこない
          • 裏で良しなにやっている
          • ls -i を使うと、ブロックの番地=inodeを確認することができる
    • ブロックストレージにアクセスするには、「ファイルシステム」を使用する必要がある
      • ファイルシステムが、inode等、「どこにあるのか」といった情報を扱ってくれる
        • stat コマンドで詳細が確認可能
        • 例: 空ファイル(0byte)の場合: Block 0 → 書き込み後 → Block: 8
        • Linuxでは、主に4KBで管理されていることが多い
        • 512 Byte sector or 4KB sectorに分かれる
      • ブロックサイズ内で容量が増えても使用ブロック数は変わらない
      • ブロック, セクターは覚えてほしい
        • ブロックサイズを小さくする→きめ細かく容量を使えるのでディスクの容量効率を上げることができる、遅くなる
        • ブロックサイズを大きくする→ディスクの容量効率は下がる、アドレスの解決数が減るので早くなる

ファイルストレージ

  • 主に2種類
    • NFS
      • unix系でつかわれる
    • SMB(CIFS)
      • Windows系で使われる
  • ファイルストレージの場合: ファイルやフォルダにアクセスできる
    • バックエンドではファイルシステムが必ず構成されているので、ブロックの扱いなどはそちらで処理している
  • アクセス単位がファイル、フォルダなので「ファイルストレージ」と言われる
    • 普通に皆が使うネットワークストレージ

ここまでが一般的なストレージ(わかりやすい)


オブジェクトストレージ

  • 従来のOS、システム

    • マウント操作→ファイル生成、...
  • HTTP

  • REST API

    • オブジェクトストレージはマウントが不得意
      • WebDAVもあるけど、基本は不得意
  • アクセスはファイル単位

  • 実装がファイルストレージと異なる

    • オブジェクトストレージの世界では、データを格納した段階でメタデータが生成される
    • データ+メタデータの対で格納
  • メタデータの正体・・・

    • オブジェクトストレージではファイルシステムが登場しない
      • ファイルシステム「どこに、どのアドレスに居るかわかるよ」
        • 階層管理ができる、inodeが出てくる→ファイルシステムでのメタデータ
        • 上限がある(inode数等)
    • オブジェクトストレージでは、ユニークなID(主にファイル名)をメタデータに記載
      • メタデータにはアクセス権限や冗長化、その他諸々が含まれている
      • 「データとメタデータ」のセットが「オブジェクト」

AWSでの実践

実践: ブロックストレージ

  • AWSでは、ブロックストレージがすぐには出てこない
    • Elastic Block Store
    • EC2にくっついてくる
    • SSD
    • EC2に入って確認
      • sudo -i
      • lsblk
        • 3本刺したので、xvda,b,cが存在
      • mkfs.* /dev/xvd*
      • mkdir /mnt/xvd*
      • mount /dev/xvd* /mnt/xvd*
      • ls -lhai
        • .. と ひとつ上 のブロックが同じであることが分かる

実践: ファイルストレージ

  • EFS(Elastic File System)
    • アベイラビリティゾーン、ファイルシステム、マウント手順等でてくる
    • mount -t nfs -o ... はめんどい
    • nfs-utils
    • 利用上の注意: セキュリティグループで保護されている(オンプレでのマイクロセグメンテーション) *
  • FSx
    • 是非試してね!!

実践: オブジェクトストレージ

  • S3(Simple Storage Service)
    • 振り返り:ファイルシステムは存在しない
    • オブジェクトストレージでは、namespace(名前空間)を作成する必要あり
      • S3では"バケット"
      • バケットを作ることで、ファイルを格納する領域ができる
        • デフォルト非公開なので注意
    • Google Driveなどの普通にアップロードできちゃう
    • アップロード後
      • キー・・・データを一意に特定
    • S3では物理的に3箇所以上コピーしてくれる(アベイラビリティーゾーンが3以上)
    • おなじデータが
    • ネットワークをまたいでコピーする=ビット反転したりするかもしれない->チェックサムしないといけない
    • データ不整合の確認
      • checksumではハッシュアルゴリズムを使う
        • 1方向性
        • 重複困難性(衝突困難性)
      • md5, shaなど
      • デモ: md5sum file
    • S3の中でも価格/アクセス頻度などで色々プランがあるので興味がある人は見てねっ

QA

Q. ブロックサイズを自動で... Q. ファイルストレージの場合は...

  • ブロックサイズは、ファイルシステムを作成する->パーティションごとに指定ができる
  • ファイルシステムは、固定長

Q. オブジェクトストレージ内にあるオブジェクト...

  • フォルダという概念がそもそもない
  • けど、S3では作れる
  • 実際はフォルダはない。prefixと呼ばれる機能。
  • フラットに存在しているが、インターフェースとしてそう見せている

Q. ファイルシステムを作ってくれるのは誰...

  • OSで作れる。作るのは自分で作る。
  • ファイルシステムのsuperblockの中でフォルダ構成等の特殊なメタデータを管理している
  • ファイルストレージでは管理者がファイルシステムを作っている
  • e.g. EFSの場合はAWSが作ってくれている!!

EFSの準備ができたのでデモ

  • 8.0E(エクサバイト)のストレージが見える

Q. オブジェクトストレージについてもう1度...

  • 分散ストレージと一緒に使われることが多い
  • ストレージ
  • 2、3年前のスライドか資料か何かでデータアクセス部の情報があった
    • 当時で毎秒50TBのデータが行き来していたらしい

Q. ユニファイドストレージ...

  • 1個の製品だけどブロックストレージもファイルストレージもサポートしている
    • iSCSIとNFSのように

Q.WindowsでもMacでも、ファイルを右クリックしたらいろいろな情報がでてきますが...

  • アクセス日時、変更日時、...
  • まさにファイルシステムで管理しているメタ情報

ファイルシステムはストレージ自体にメタデータ...

  • ファイルシステムにsuperblockがある
  • ファイルシステムを作った段階で、管理用の領域を一部用意完了している

オブジェクトストレージ内にあるオブジェクトが...

  • 先ほどと同じ内容で、prefixにつく内容。
  • キーに ****/filename のように記載される