YAPC Asia 2010 30days Albumの裏側 後日談
-
Upload
kensuke-nagae -
Category
Technology
-
view
3.700 -
download
4
description
Transcript of YAPC Asia 2010 30days Albumの裏側 後日談
30days Album の裏側 後日談
YAPC::Asia Tokyo 20102010/10/15
はじめに CM をご覧ください
自己紹介
• 金子 健介• 所属
o 株式会社 paperboy&co.oホスティング事業本部 30days Album
チームoプログラマ
• ハンドルネーム等o刺身☆ブーメランo id:a666666o@kyanny
30days Album とは
• http://30d.jp/• 写真共有・保存サービス• 2008 年 4 月〜• 期間限定オンラインアルバム• 容量無制限オンラインフォトストレージ
本日のアジェンダ
• 30days Album の裏側• MogileFS の運用ノウハウ・苦労話• 自作サーバの紹介• Perlbal の運用ノウハウ・苦労話
30days Album の裏側 (1)
• 表側は Ruby on Rails• 裏側はいろいろ
oPerlbaloMogileFSoGearmanoTheSchwartzoCatalyst
実はけっこう Perl を多用してます
30days Album の裏側 (2)
• 過去のプレゼンテーションo関西オープンソース 2008
http://www.slideshare.net/mizzy/2008-30days-album-presentation
oYAPC::Asia Tokyo 2009 http://www.slideshare.net/hiboma/yapc-asia-2009-perl
30days Album の裏側 (3)
30days Album の裏側 (4)
• 疎結合を意識したシステム構成o各コンポーネント間は HTTP API でやり
取りoAPI は Catalyst 製ウェブアプリケーショ
ンoREST を意識したシンプルな実装 (GET,
PUT)
30days Album の裏側 (5)
• メリットo負荷分散o開発能率アップ
得意な人に任せられるoメンテナンスのしやすさ
他のコンポーネントへの影響が少ないo他のサービスからの利用
ログピ http://logpi.jp/ブクログのパブー http://p.booklog.jp/
30days Album の裏側 (6)
• デメリットoシステム構成の複雑化
一台のサーバが複数の役割を持つと把握しづらい
oサーバ台数の増加oレイヤーが増えることによるオーバー
ヘッドの増加o他サービスへの影響範囲の増大
例 : 障害、メンテナンス
30days Album の裏側
終わり
NEXT: MogileFS の運用ノウハウ・苦労話
MogileFS の運用ノウハウ・苦労話
• MogileFS の障害対応の話• MogileFS のリバランスについて
MogileFS の障害対応の話 (1)
• ストレージサーバでディスク障害が発生した
• LVM で構築していたデータ領域は修復不可能
• どのように対応したか• MogileFS のストレージプールから切り離
し• サーバを再構築• ストレージプールに復帰
MogileFS の障害対応の話 (2)
• 障害発生前• 複数のサーバに分散して保存されている
MogileFS の障害対応の話 (3)
• 障害発生時• 障害発生サーバ上のデータはアクセス不
能• 他のサーバ上のデータにはアクセス可能
MogileFS の障害対応の話 (4)
• 障害対応中• ストレージプールから切り離す
MogileFS の障害対応の話 (5)
• 切り離しの手順odevice を dead にする
$ mogadm device mark mogfs5 dev5 dead
MogileFS の障害対応の話 (6)
• 障害対応中• コピーがあるのでサービスには影響なし• 他のホストにも自動的にコピーされる
MogileFS の障害対応の話 (7)
• コピーされていることを確認するには• X-REPROXY-URL ヘッダをみる
• dead にした device の URL が外れる
• 別の device の URL が追加される• file_on テーブルのレコード数を数える
SELECT COUNT(*) FROM file_on WHERE devid = 5;
• 他の device へコピーされるたびに減る
MogileFS の障害対応の話 (8)
• 障害復旧後• 復旧したサーバをストレージプールへ復
帰• 障害対応中のサービス停止なし
MogileFS の障害対応の話 (9)
• 復帰の手順odevice を alive にする
$ mogadm device mark mogfs5 dev5 alive
MogileFS の障害対応の話 (10)
• その他にやったことoPerlbal を再起動する
X-REPROXY-CACHE-FOR をクリアdead な device の URL をキャッシュしてるため
Perlbal は X-REPROXY-URL が 200 を返さないと次の URL をとりにいくため、必須ではない
MogileFS の障害対応の話
終わり
NEXT: MogileFS のリバランスについて
MogileFS のリバランスについて (1)
• リバランスとはoストレージノード間でデータを平準化す
る機能oバックグランドで走るo任意のタイミングで開始・終了できるohttp://code.google.com/p/mogilefs/wiki/
Rebalance
$ mogadm settings set enable_rebalance 1
MogileFS のリバランスについて (2)
• リバランスの動作例 (1)• 分散して保存されている
MogileFS のリバランスについて (3)
• リバランスの動作例 (2)• 使用量が少ない device へファイルを移
動
MogileFS のリバランスについて (4)
• リバランスの動作例 (3)• ストレージの使用量が平準化される
MogileFS のリバランスについて (5)
• どういうときに使うか• 新しいストレージノードを追加したとき• 残容量が少なくなったとき• class を変更したとき
• ファイルのコピー数を制御する仕組み• ファイルの重要度によってコピー数を
かえられる• あとで変更することができる
MogileFS リバランスについて (6)
• 注意点oMySQL の負荷
MogileFS のバージョンアップで改善したSELECT クエリが減った
MogileFS のリバランスについて (7)
• 注意点(続き)oネットワーク帯域をかなり使うoストレージノードのディスク I/O も激し
いoサーバリソースのモニタリングは必須
Munin を使ってますoサービスへのアクセスが多い夜間はオフ
に
MogileFS リバランスについて
終わり
NEXT: 自作サーバの紹介
自作サーバの紹介
• 自作サーバをつくりましたoMP-100
通称マッパ「マサキパワー」の略馬崎 ( まさき ) さん作なので
oストレージサーバmogstored
o2010 年 4 月 〜 (1号機 )o2010 年 9 月 〜 (2号機 )
※写真は制作中のものです
自作サーバのスペック
• CPUo Inete Celeron E3000番台
• RAMoDDR2 メモリ 2GB(1GBx2)
• HDD oデータ領域 2TB HDD x 8oシステム領域 Intel 製 40GB SSD x 1
• マザーボードo Intel 製 microATX マザー
• ポートマルチプライヤ
自作サーバの特徴
• HDD の固定に L字金具を使用• リモート管理可能なマザーボードを採用
• Intel AMT• ポートマルチプライヤーで HDD を 8 本搭載
• 値段の関係で多ポート RAIDカードは見送った
自作サーバこぼれ話 (1)
• パーツ選定の基準o値段 > 信頼性oMogileFS で冗長化できているためパーツ単体の信頼性は高くなくてもよい今のところハードウェアに起因する障害は無し
• 設計のノウハウがなく苦労したo自作サーバカンファレンスで仕入れたネタ
がベースoCerevo さんとはてなさんを参考にさせて頂きました
自作サーバこぼれ話 (2)
• MP-100 の 100 って?o制作当時、馬崎さんの体重が 100kg だっ
たo現在は省エネ化して 75kgoちなみに Max 値は 125kg
自作サーバの今後
• 次の目標oHDD 12 本搭載
HDD マウンタの作成が課題oストレージ以外の用途も検討
ジョブサーバなど
自作サーバの紹介
終わり
NEXT: Perlbal の運用ノウハウ・苦労話
Perlbal の運用ノウハウ・苦労話
• 2010/10 〜 動画アップロードに対応• http://30d.jugem.jp/?eid=115
• Perlbal と動画配信にまつわる苦労話o FLV の疑似ストリーミングの話o Perlbal と Range ヘッダの話
FLV の疑似ストリーミングの話 (1)
• FLV の疑似ストリーミングo例 : YouTube, ニコニコ動画oシーク可能であること
• 一般的な仕組みo動画プレイヤーが ?start=**** のようなクエ
リストリングつきでリクエストを送る**** の部分はバイト数FLV ファイルに埋め込まれたメタデータ
oサーバ側で **** の部分に応じたデータを返すFLV ヘッダを付与する必要あり
FLV の疑似ストリーミングの話 (2)
• 一般的なソリューションo lighttpd の mod_flv_streaming が有名ohttp://blog.lighttpd.net/articles/2006/03/09/
flv-streaming-with-lighttpdApache や nginx にも同様のモジュールがある
o30days Album は Perlbal を使っている
FLV の疑似ストリーミングの話 (3)
• どうやって解決したかoPerlbal プラグインを書いた
Reproxy リクエストに Range ヘッダを追加
レスポンスヘッダを調整レスポンスボディに FLV ヘッダを追加
oフックポイントを追加するために本体にも手を入れたhttp://github.com/mizzy/Perlbal/commit/cb6e4b2e4fe769701d36e27220edcc4b5dce6524
FLV の疑似ストリーミングの話
終わり
NEXT: Perlbal と Range ヘッダの話
Perlbal と Range ヘッダの話 (1)
• Range ヘッダつきリクエストを送ると Perlbal がエラーを返す• 原因は X-REPROXY-EXPECTED-SIZE
ヘッダ• データが不完全でないかチェックする仕組みoPerlbal と MogileFS の間のストレージ
API で付与している
Perlbal と Range ヘッダの話 (2)
• Perlbal はどう振る舞うか• ストレージ API へ GET• ストレージ API が X-REPROXY-URL と
X-REPROXY-EXPECTED-SIZE を返すo X-REPROXY-URL ヘッダで返された
URL を GETo Content-Length と X-REPROXY-
EXPECTED-SIZE を比較o 数値が一致しなければ次の X-REPROXY-
URL をとりにいく
Perlbal と Range ヘッダの話 (3)
• 問題点oContent-Length と X-REPROXY-
EXPECTED-SIZE が常に異なってしまうoストレージ API が Range ヘッダを考慮していなかったため
oPerlbal は次の X-REPROXY-URL をとりにいく
o全ての URL に対して Reproxy 失敗とみなして 503 を返してしまう
Perlbal と Range ヘッダの話 (4)
• どうやって解決したかoRange ヘッダがある場合は適切な X-
REPROXY-EXPECTED-SIZE ヘッダを返すようにした
o複数のレンジセットが指定されている場合は X-REPROXY-EXPECTED-SIZE ヘッダを返さないようにした例 : Range: bytes=0-100,200-300参考 : 部分的 GET とレンジ単位
Perlbal と Range ヘッダの話 (4)
終わり
NEXT: まとめ
まとめ
• MogileFS の運用ノウハウ・苦労話oリバランスの概要説明o障害対応の事例紹介
• 自作サーバの紹介• Perlbal の運用ノウハウ・苦労話
o動画配信にまつわる諸問題の事例紹介oPerlbal プラグインや本体の拡張で対応し
た
宣伝
• 30days Album PRO プランのクーポンありますoお手元のノベルティグッズをご覧くださ
い
30days Album の裏側 後日談
ご静聴ありがとうございました
ご質問はございますか?