YAPC Asia 2010 30days Albumの裏側 後日談

55
30days Album ののの ののの YAPC::Asia Tokyo 2010 2010/10/15

description

関西オープンソース 2008でお話しした、ペパボでは珍しくPerlをふんだんに つかっているサービス「30days Album」について、その後どうなったのか、 という話を、主にMogileFS運用上の苦労話、といった観点からお話ししたい と思います。 関西オープンソース 2008での発表資料はこちらです。 http://www.slideshare.net/mizzy/2008-30days-album-presentation http://yapcasia.org/2010/talks/63D6A01E-BC8C-11DF-8791-B9FC0F276C45

Transcript of YAPC Asia 2010 30days Albumの裏側 後日談

Page 1: YAPC Asia 2010 30days Albumの裏側 後日談

30days Album の裏側 後日談

YAPC::Asia Tokyo 20102010/10/15

Page 2: YAPC Asia 2010 30days Albumの裏側 後日談

はじめに CM をご覧ください

Page 3: YAPC Asia 2010 30days Albumの裏側 後日談

自己紹介

• 金子 健介• 所属

o 株式会社 paperboy&co.oホスティング事業本部 30days Album

チームoプログラマ

• ハンドルネーム等o刺身☆ブーメランo id:a666666o@kyanny

Page 4: YAPC Asia 2010 30days Albumの裏側 後日談

30days Album とは

• http://30d.jp/• 写真共有・保存サービス• 2008 年 4 月〜• 期間限定オンラインアルバム• 容量無制限オンラインフォトストレージ

Page 5: YAPC Asia 2010 30days Albumの裏側 後日談

 

Page 6: YAPC Asia 2010 30days Albumの裏側 後日談

本日のアジェンダ

• 30days Album の裏側• MogileFS の運用ノウハウ・苦労話• 自作サーバの紹介• Perlbal の運用ノウハウ・苦労話

Page 7: YAPC Asia 2010 30days Albumの裏側 後日談

30days Album の裏側 (1)

• 表側は Ruby on Rails• 裏側はいろいろ

oPerlbaloMogileFSoGearmanoTheSchwartzoCatalyst

実はけっこう Perl を多用してます

Page 8: YAPC Asia 2010 30days Albumの裏側 後日談

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

Page 9: YAPC Asia 2010 30days Albumの裏側 後日談

30days Album の裏側 (3)

Page 10: YAPC Asia 2010 30days Albumの裏側 後日談

30days Album の裏側 (4)

• 疎結合を意識したシステム構成o各コンポーネント間は HTTP API でやり

取りoAPI は Catalyst 製ウェブアプリケーショ

ンoREST を意識したシンプルな実装 (GET,

PUT)

Page 11: YAPC Asia 2010 30days Albumの裏側 後日談

30days Album の裏側 (5)

• メリットo負荷分散o開発能率アップ

得意な人に任せられるoメンテナンスのしやすさ

他のコンポーネントへの影響が少ないo他のサービスからの利用

ログピ http://logpi.jp/ブクログのパブー http://p.booklog.jp/

Page 12: YAPC Asia 2010 30days Albumの裏側 後日談

30days Album の裏側 (6)

• デメリットoシステム構成の複雑化

一台のサーバが複数の役割を持つと把握しづらい

oサーバ台数の増加oレイヤーが増えることによるオーバー

ヘッドの増加o他サービスへの影響範囲の増大

例 : 障害、メンテナンス

Page 13: YAPC Asia 2010 30days Albumの裏側 後日談

30days Album の裏側

終わり

NEXT: MogileFS の運用ノウハウ・苦労話

Page 14: YAPC Asia 2010 30days Albumの裏側 後日談

MogileFS の運用ノウハウ・苦労話

• MogileFS の障害対応の話• MogileFS のリバランスについて

Page 15: YAPC Asia 2010 30days Albumの裏側 後日談

MogileFS の障害対応の話 (1)

• ストレージサーバでディスク障害が発生した

• LVM で構築していたデータ領域は修復不可能

• どのように対応したか• MogileFS のストレージプールから切り離

し• サーバを再構築• ストレージプールに復帰

Page 16: YAPC Asia 2010 30days Albumの裏側 後日談

MogileFS の障害対応の話 (2)

• 障害発生前• 複数のサーバに分散して保存されている

Page 17: YAPC Asia 2010 30days Albumの裏側 後日談

MogileFS の障害対応の話 (3)

• 障害発生時• 障害発生サーバ上のデータはアクセス不

能• 他のサーバ上のデータにはアクセス可能

Page 18: YAPC Asia 2010 30days Albumの裏側 後日談

MogileFS の障害対応の話 (4)

• 障害対応中• ストレージプールから切り離す

Page 19: YAPC Asia 2010 30days Albumの裏側 後日談

MogileFS の障害対応の話 (5)

• 切り離しの手順odevice を dead にする

$ mogadm device mark mogfs5 dev5 dead

Page 20: YAPC Asia 2010 30days Albumの裏側 後日談

MogileFS の障害対応の話 (6)

• 障害対応中• コピーがあるのでサービスには影響なし• 他のホストにも自動的にコピーされる

Page 21: YAPC Asia 2010 30days Albumの裏側 後日談

MogileFS の障害対応の話 (7)

• コピーされていることを確認するには• X-REPROXY-URL ヘッダをみる

• dead にした device の URL が外れる

• 別の device の URL が追加される• file_on テーブルのレコード数を数える

SELECT COUNT(*) FROM file_on WHERE devid = 5;

• 他の device へコピーされるたびに減る

Page 22: YAPC Asia 2010 30days Albumの裏側 後日談

MogileFS の障害対応の話 (8)

• 障害復旧後• 復旧したサーバをストレージプールへ復

帰• 障害対応中のサービス停止なし

Page 23: YAPC Asia 2010 30days Albumの裏側 後日談

MogileFS の障害対応の話 (9)

• 復帰の手順odevice を alive にする

$ mogadm device mark mogfs5 dev5 alive

Page 24: YAPC Asia 2010 30days Albumの裏側 後日談

MogileFS の障害対応の話 (10)

• その他にやったことoPerlbal を再起動する

X-REPROXY-CACHE-FOR をクリアdead な device の URL をキャッシュしてるため

Perlbal は X-REPROXY-URL が 200 を返さないと次の URL をとりにいくため、必須ではない

Page 25: YAPC Asia 2010 30days Albumの裏側 後日談

MogileFS の障害対応の話

終わり

NEXT: MogileFS のリバランスについて

Page 26: YAPC Asia 2010 30days Albumの裏側 後日談

MogileFS のリバランスについて (1)

• リバランスとはoストレージノード間でデータを平準化す

る機能oバックグランドで走るo任意のタイミングで開始・終了できるohttp://code.google.com/p/mogilefs/wiki/

Rebalance

$ mogadm settings set enable_rebalance 1

Page 27: YAPC Asia 2010 30days Albumの裏側 後日談

MogileFS のリバランスについて (2)

• リバランスの動作例 (1)• 分散して保存されている

Page 28: YAPC Asia 2010 30days Albumの裏側 後日談

MogileFS のリバランスについて (3)

• リバランスの動作例 (2)• 使用量が少ない device へファイルを移

Page 29: YAPC Asia 2010 30days Albumの裏側 後日談

MogileFS のリバランスについて (4)

• リバランスの動作例 (3)• ストレージの使用量が平準化される

Page 30: YAPC Asia 2010 30days Albumの裏側 後日談

MogileFS のリバランスについて (5)

• どういうときに使うか• 新しいストレージノードを追加したとき• 残容量が少なくなったとき• class を変更したとき

• ファイルのコピー数を制御する仕組み• ファイルの重要度によってコピー数を

かえられる• あとで変更することができる

Page 31: YAPC Asia 2010 30days Albumの裏側 後日談

MogileFS リバランスについて (6)

• 注意点oMySQL の負荷

MogileFS のバージョンアップで改善したSELECT クエリが減った

Page 32: YAPC Asia 2010 30days Albumの裏側 後日談

MogileFS のリバランスについて (7)

• 注意点(続き)oネットワーク帯域をかなり使うoストレージノードのディスク I/O も激し

いoサーバリソースのモニタリングは必須

Munin を使ってますoサービスへのアクセスが多い夜間はオフ

Page 33: YAPC Asia 2010 30days Albumの裏側 後日談

MogileFS リバランスについて

終わり

NEXT: 自作サーバの紹介

Page 34: YAPC Asia 2010 30days Albumの裏側 後日談

自作サーバの紹介

• 自作サーバをつくりましたoMP-100

通称マッパ「マサキパワー」の略馬崎 ( まさき ) さん作なので

oストレージサーバmogstored

o2010 年 4 月 〜 (1号機 )o2010 年 9 月 〜 (2号機 )

Page 35: YAPC Asia 2010 30days Albumの裏側 後日談

※写真は制作中のものです

Page 36: YAPC Asia 2010 30days Albumの裏側 後日談

自作サーバのスペック

• CPUo Inete Celeron E3000番台

• RAMoDDR2 メモリ 2GB(1GBx2)

• HDD oデータ領域 2TB HDD x 8oシステム領域 Intel 製 40GB SSD x 1

• マザーボードo Intel 製 microATX マザー

• ポートマルチプライヤ

Page 37: YAPC Asia 2010 30days Albumの裏側 後日談

自作サーバの特徴

• HDD の固定に L字金具を使用• リモート管理可能なマザーボードを採用

• Intel AMT• ポートマルチプライヤーで HDD を 8 本搭載

• 値段の関係で多ポート RAIDカードは見送った

Page 38: YAPC Asia 2010 30days Albumの裏側 後日談

自作サーバこぼれ話 (1)

• パーツ選定の基準o値段 > 信頼性oMogileFS で冗長化できているためパーツ単体の信頼性は高くなくてもよい今のところハードウェアに起因する障害は無し

• 設計のノウハウがなく苦労したo自作サーバカンファレンスで仕入れたネタ

がベースoCerevo さんとはてなさんを参考にさせて頂きました

Page 39: YAPC Asia 2010 30days Albumの裏側 後日談

自作サーバこぼれ話 (2)

• MP-100 の 100 って?o制作当時、馬崎さんの体重が 100kg だっ

たo現在は省エネ化して 75kgoちなみに Max 値は 125kg

Page 40: YAPC Asia 2010 30days Albumの裏側 後日談

自作サーバの今後

• 次の目標oHDD 12 本搭載

HDD マウンタの作成が課題oストレージ以外の用途も検討

ジョブサーバなど

Page 41: YAPC Asia 2010 30days Albumの裏側 後日談

自作サーバの紹介

終わり

NEXT: Perlbal の運用ノウハウ・苦労話

Page 42: YAPC Asia 2010 30days Albumの裏側 後日談

Perlbal の運用ノウハウ・苦労話

• 2010/10 〜 動画アップロードに対応• http://30d.jugem.jp/?eid=115

• Perlbal と動画配信にまつわる苦労話o FLV の疑似ストリーミングの話o Perlbal と Range ヘッダの話

Page 43: YAPC Asia 2010 30days Albumの裏側 後日談

FLV の疑似ストリーミングの話 (1)

• FLV の疑似ストリーミングo例 : YouTube, ニコニコ動画oシーク可能であること

• 一般的な仕組みo動画プレイヤーが ?start=**** のようなクエ

リストリングつきでリクエストを送る**** の部分はバイト数FLV ファイルに埋め込まれたメタデータ

oサーバ側で **** の部分に応じたデータを返すFLV ヘッダを付与する必要あり

Page 44: YAPC Asia 2010 30days Albumの裏側 後日談

FLV の疑似ストリーミングの話 (2)

• 一般的なソリューションo lighttpd の mod_flv_streaming が有名ohttp://blog.lighttpd.net/articles/2006/03/09/

flv-streaming-with-lighttpdApache や nginx にも同様のモジュールがある

o30days Album は Perlbal を使っている

Page 45: YAPC Asia 2010 30days Albumの裏側 後日談

FLV の疑似ストリーミングの話 (3)

• どうやって解決したかoPerlbal プラグインを書いた

Reproxy リクエストに Range ヘッダを追加

レスポンスヘッダを調整レスポンスボディに FLV ヘッダを追加

oフックポイントを追加するために本体にも手を入れたhttp://github.com/mizzy/Perlbal/commit/cb6e4b2e4fe769701d36e27220edcc4b5dce6524

Page 46: YAPC Asia 2010 30days Albumの裏側 後日談

FLV の疑似ストリーミングの話

終わり

NEXT: Perlbal と Range ヘッダの話

Page 47: YAPC Asia 2010 30days Albumの裏側 後日談

Perlbal と Range ヘッダの話 (1)

• Range ヘッダつきリクエストを送ると Perlbal がエラーを返す• 原因は X-REPROXY-EXPECTED-SIZE

ヘッダ• データが不完全でないかチェックする仕組みoPerlbal と MogileFS の間のストレージ

API で付与している

Page 48: YAPC Asia 2010 30days Albumの裏側 後日談

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 をとりにいく

Page 49: YAPC Asia 2010 30days Albumの裏側 後日談

Perlbal と Range ヘッダの話 (3)

• 問題点oContent-Length と X-REPROXY-

EXPECTED-SIZE が常に異なってしまうoストレージ API が Range ヘッダを考慮していなかったため

oPerlbal は次の  X-REPROXY-URL をとりにいく

o全ての URL に対して Reproxy 失敗とみなして 503 を返してしまう

Page 50: YAPC Asia 2010 30days Albumの裏側 後日談

Perlbal と Range ヘッダの話 (4)

• どうやって解決したかoRange ヘッダがある場合は適切な X-

REPROXY-EXPECTED-SIZE ヘッダを返すようにした

o複数のレンジセットが指定されている場合は X-REPROXY-EXPECTED-SIZE ヘッダを返さないようにした例 : Range: bytes=0-100,200-300参考 :  部分的 GET とレンジ単位

Page 51: YAPC Asia 2010 30days Albumの裏側 後日談

Perlbal と Range ヘッダの話 (4)

終わり

NEXT: まとめ

Page 52: YAPC Asia 2010 30days Albumの裏側 後日談

まとめ

• MogileFS の運用ノウハウ・苦労話oリバランスの概要説明o障害対応の事例紹介

• 自作サーバの紹介• Perlbal の運用ノウハウ・苦労話

o動画配信にまつわる諸問題の事例紹介oPerlbal プラグインや本体の拡張で対応し

Page 53: YAPC Asia 2010 30days Albumの裏側 後日談

宣伝

• 30days Album PRO プランのクーポンありますoお手元のノベルティグッズをご覧くださ

Page 54: YAPC Asia 2010 30days Albumの裏側 後日談

30days Album の裏側 後日談

ご静聴ありがとうございました

Page 55: YAPC Asia 2010 30days Albumの裏側 後日談

ご質問はございますか?