世界を動かす技術を、日本語で。

フレームワークラップトップとディスクでのS3における10TBのセルフホスティング

概要

  • S3ストレージの自宅ホスティング体験談
  • FrameworkラップトップとJBODの活用
  • ZFSとgarage S3による運用安定性
  • メンテナンスやアップグレードの成功
  • ZFSとUSB接続の注意点

S3自宅ホスティングの始まり

  • 大容量ストレージ を安価に求め、 自宅でS3互換ストレージ を構築
  • AppGoblinのSDKで 上位10万アプリのトラッキング 用データ保存ニーズ
  • 中古Frameworkラップトップ をサーバー用途に採用
    • 画面なし、古いモデルでサーバーに最適
  • JBOD(Just a Bunch Of Disks) を追加購入し容量拡張
  • OSは ZFS + garage S3 構成で運用

運用と安定性

  • 数ヶ月間、 意識せずに安定稼働
  • 約10TBの使用実績
  • 長期間放置後の再起動 でも問題なく復旧
  • garage S3の バージョンアップ もトラブルなし
  • garage v1からv2への メジャーアップグレードも円滑

ZFSとUSB接続の課題

  • ZFSの利用方法が非標準 (JBODとラップトップをUSB接続)
  • garage S3の メタデータもJBOD/ZFS上に配置 していた
    • 高負荷時にZFSの問題が発生
  • メタデータをラップトップ本体へ移動 し、ZFS関連の不具合を解消

まとめと所感

  • 自作S3ストレージの運用成功体験
  • garage S3とZFSの 組み合わせによる高い信頼性
  • USB接続時は ZFS運用に注意が必要
  • 適切な構成変更で 安定運用を実現

Hackerたちの意見

静かに成功したセルフホスティングをシェアしたかったんだ。

「何かを動かすコンピュータを持っている」って今は「セルフホスティング」って呼ばれてるのが変な感じ。まるで今は全てのコンピュータが誰かのものだって前提があるみたいで、自分のを使ってるって明言しないといけないみたい。

このJBODはSSDで構成されてるの?その量のHDDだと結構うるさいかもね。

自分もS3に興味があって、Garageがどんなことを提供してくれるのか、Minioみたいな成熟した代替品と比べてすごく気になってる。聞いたところによると、小さい(数キロバイト)ファイルには結構合ってるみたい?

Minioが最近、コミュニティ版から機能を削除し始めたよ。 https://news.ycombinator.com/item?id=44136108

Minioが管理UIの99%をこっそり削除して、ユーザーを有料プランに誘導しようとした時は本当にがっかりした。新しいMinioのイメージを取得した後、ある日突然消えたんだ。オンラインでその変更の証拠は、混乱したユーザーたちのGitHubの議論だけだった。

これについてはしばらく考えてたんだ。MinIO、Garage、Cephを比較中。最近の動きから考えると、MinIOはあまり賢い選択じゃないかもね、他のコメントでも指摘されてたし。Garageはまあまあだけど、最近はGitの活動があまり見られないから、これも放置されるんじゃないかって心配してる。で、Cephが残るんだけど、学習曲線は高いかもしれないけど、オブジェクト、ブロック、ファイルの柔軟性が一番あるからね。近いうちに9つのOSDでシングルノードをセットアップしてみるつもりだけど、もし誰かアドバイスがあれば教えてほしいな。

すごいね!フレームワークのマザーボードを交換して、NASのバックアップに変えようとしてるところなんだ。あなたのZFSの設定についてもう少し教えてもらえる?スナップショットを送る場所が欲しいだけなんだけど、USB接続の速度や、うっかり抜いてデータを失うことが心配でさ。

Garageについての以前の議論: https://news.ycombinator.com/item?id=41013004

Garage、大好き!ほんとに使いやすいよね。古いOdroid HC2でGarageを動かしてるんだけど、主にk8s Veleroのバックアップ用で、設定したらあとは放置でOK。

古いDell T30に2x10TBのSeagate ExosをZFS RAID1モード(ミラー)で使う方がいいかな。これ、毎日ちょっとドキドキするだろうな…毎日バックアップしててもね。Dell T30も不安はあるけど、ディスクを他のデバイスに繋げられるし、簡単に抜けるケーブルで配線する必要もないからね ;) でも、Garageは良さそうだね :-) 投稿ありがとう。

ZFSを結構前から使ってるんだけど、ある時気づいたんだ。データの量によっては、数時間の損失は許容できるって。だからミラーの代わりに、2つの別々の1ディスクプールを作って、数時間ごとにプライマリプールの自動スナップショットを取って、それを他のプールにzfs send/recvしてる。これでディスクの柔軟性が増すし、例えば一つはSSD、もう一つはHDDにしてもいいし、読み取り速度と稼働時間のトレードオフはあるけどね。必要に応じて、もう一つのディスクは外付けにして、数日ごとに接続することもできるよ。もっと大事なデータ用にミラーのRAIDプールも持ってるけど、ZFSに関する記事はほとんどRAIDのことばかりで、上で説明したようなハードウェアの負担が少ない設定についてはあまり触れられてないんだよね。

もしマザーボードだけで画面がないなら、OPはCoolerMasterの専用ケースに入れられるよね。リンクはこちら:https://www.coolermaster.com/en-global/products/framework/

これ、めっちゃクールだね。もっと強調したかったのは、ノートパソコンがすごく調子いいってこと。ファンの音も熱も全然感じないから、動いてるかどうかわからないよ。ノートパソコンは、負荷が少ない時に電力をうまく使うから、こういうのには向いてるのかもね。

これがFrameworkマーケットプレイスのケースへのリンクだよ: https://frame.work/ca/en/products/cooler-master-mainboard-ca... 俺はアップグレードの時に、元のマザーボードをこれに入れたんだけど、めっちゃ良かった。しばらくの間、モニターの裏にVESAマウントしてデスクトップPCとして使ってた。今はHTPCとして使ってる。

それか10インチのミニラックもいいね!! https://deskpi.com/products/deskpi-rackmate-t0-plus-rackmoun...

技術的な面についてもっと詳しく知りたいな。具体的にどうやって同じことをするかとか、どのコマンドを使うかじゃなくて、ZFSプールがどう設定されてるのかとか、Garageが自動で設定するのかどうか。ミラーはあるの?それともディスクからディスクに同期する個別のプールだけなの?USBディスクが2つあって、安いNASを作りたいんだけど、ZFSミラーを作るか、2つの独立したプールを作って片方をバックアップ用に使うか、あるいはSnapRAIDを使って、持ってる古いHDDを最大限に活用するかでいつも迷ってるんだ。

私の理解では、Garageは特にこだわりがなくて、ZFSなしでも簡単に動作するみたい。UbuntuにZFSをインストールして、その後Garageをインストールしたんだ。ZFSの設定はシンプルにして、RAID5/raidz1にしたよ。専門家じゃないけど、プールが33%近く満杯になってきたから、また考え始めてる。ここで別のスレッドで見たコメントが面白かったんだ、magicalhippoが言ってた:「ZFSを結構前から使ってて、ある時気づいたんだ。データの量によっては、数時間の損失は許容できるって。だからミラーの代わりに、2つの別々の1ディスクプールを作って、数時間ごとにプライマリプールの自動スナップショットを取って、それを他のプールにzfs send/recvしてる。」これ、私の使い方にぴったり合ってて興味を引かれた。最初はRAID5がHDが故障した時に良いと思ってたけど、別の場所に同じ設定を複製するつもりだったから、全体のコスト(約1,000ドル)が高すぎてまだ実行できてないんだ。

ガレージって初めて聞いたけど、結構面白そうだね。仕事ではs3をよく使ってるけど、ホムラボのバックアップにはずっとborgをborgbaseで使ってた。今、ローカルノードとAWS Glacierを組み合わせて、大きなメディアライブラリの安価な冗長性を持たせられるか考えてる。たぶん、ほとんどの読み込みはローカルノードから自動的に行われると思う。TFAはガレージの実際の使用体験についてあまり触れてないから、セルフホスティングで使ってる人の意見をもっと聞きたいな。編集: GlacierはストレージをEC2コンピュートにファイルシステムとしてマウントしなきゃいけないから、使えないことに気づいた。だから、メディアライブラリのバックアップには、直接Glacierに定期的なborg/resticバックアップをスケジュールする方がいいかも。

ガレージ自体に特に関わる必要はなかったな。S3 API関連のことはBoto3 / awscli / s3cmd / rcloneを使ってて、すごくうまくいってる。ガレージは設定するのに数コマンド打つだけで、APIキーを設定してからは4ヶ月間そのまま動かしてた。そういう意味では、すごく気に入ってる。

別の選択肢はZeroFS[1]だよ。直接S3にデータを保存するだけ。 [1] https://github.com/Barre/ZeroFS

それでもAWS S3にペアリングして、短い時間の後にデータをGlacierに移動するアグレッシブなライフサイクルポリシーを持たせることができるよ。前の仕事でこの設定をしてた。X日後に標準ティアからGlacierに切り替わる感じ。君の場合、Xは1にできるかも。

ガレージが言及されてるのを見るのは嬉しいね。S3互換のセルフホスティングの選択肢で迷ってたけど、結局SeaweedFSを選んだ。ガレージに比べて手動設定が少なくて済むみたい。