(500pt)ウェブシステム構築に置ける、ファイルストレージの選択についての質問です。


web2台、app2台、db2台の構成です。将来的にappは確実に増加します。全サーバーは Xeon E3110 3GHz/メモリ4G です。以下のファイルを共通的に管理するために、ファイルストレージの導入を検討しています。

・webサーバーに設置するhtml/css/js/httpd.conf/crt等(read)
・appサーバーで生成するキャッシュやセッション(read,write)

以下の解決策を検討中です。

(A)NAS(ReadyNAS 2100)を導入する。NASの選択肢は契約上これ以外は利用できない。
(B)NFSサーバーを上記以外に別途1台設置する。
(C)DRBDで冗長化したNFSサーバーを別途2台設置する。

そこで、以下について教えてください。一部だけの回答でも結構です。

(1)ReadyNAS2100をウェブシステムで利用することのメリットとデメリット。
(2)この6台構成での、NFSを利用することの現実性。通常はmogileFSを利用する等。
(3)一般的な場合に、このサーバー能力のNFS1台とReadyNAS2100を比較した場合の性能差。
(4)ウェブシステムであることを前提に、NFSを利用する際に注意すべきこと。
(5)ズバリ、どれが良いのか。

以上、宜しくお願いします。解決につながる回答には500ptを必ず差し上げます。

回答の条件
  • 1人10回まで
  • 13歳以上
  • 登録:2010/11/03 15:31:54
  • 終了:2010/11/10 15:35:02

回答(2件)

id:online_p No.1

online_p回答回数1153ベストアンサー獲得回数592010/11/04 00:12:20

ポイント35pt

ReadyNAS 2100はディスク4台まで増設可能というデータ量がどんどん増えていくケースのNASですよね。

http://www.netgear.jp/products/details/RNRX4450.html

扱うデータ量の大きさによって決めたらどうでしょうか。そんなに大したことないなら安価なNFSサーバーでよいと思います。このNASならむしろアプリケーションサーバーの方が向いていそうです。

id:logihot

200gbくらいです

2010/11/04 01:19:20
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402010/11/04 16:05:06

ポイント35pt

とりあえず想定している内容完全無視になるけど。

・webサーバーに設置するhtml/css/js/httpd.conf/crt等(read)

mod_proxy - Apache HTTP サーバ

Web コンテンツ系はリバースプロキシでいいと思うが。

設定ファイル系はしょっちゅう変わるものでもないし、rsync で同期させるとか。


・appサーバーで生成するキャッシュやセッション(read,write)

アプリサーバーが何か分からんけど、セッションの冗長化方法はたいてい用意されてるでしょ。

PHPセッションをDBで管理 - OracleでのAutoIncrement用テーブルを作成編 - hogehoge foobar Blog Style5

上記はPHPからRDBMSにセッションデータ保存する例。

RDBMS はこの構成なら冗長化と想定。


キャッシュを共通化する理由はよくわからないけど、memcached やその関連ツール類を

使えば大抵の要求には答えられると思う。

Repcached - KLablabWiki

mixi Engineers’ Blog » Tokyo Tyrantによる耐高負荷DBの構築


利用するアプリケーションが分からないので方法論の提示だけになってしまうけど、

検討してみてはどうだろうか?

id:logihot

ありがとうございます。webサーバー1台にして、そこにmod_proxyを導入して、コンテンツはそこに設置ということでしょうか?webサーバーの障害を考慮して出来れば、2台設置したく、また2台それぞれに同じhtmlを置きたくないと考えています。

appサーバーでは、phpを動作させます。プログラム上でいくつかのキャッシュを作成します。画像のサムネイルや、生成ファイルなどなど。セッションについては、mysqlやmemcachedで対応することも勿論可能です。

できれば、webサーバーの各種ファイルや、appサーバーで生成するファイルを2重・3重で複数台のサーバーで持ちたくないので共有したいと考えております。

2010/11/04 16:34:59
  • id:niwa-mikiho
    app サーバーに DAS を追加しては如何でしょうが?


    app サーバーや web サーバーなどが感知しないところで
    自動バックアップを行わせたいなら NAS の選択肢が一番手っ取り早いように思います。
  • id:b-wind
    >webサーバー1台にして、そこにmod_proxyを導入して、コンテンツはそこに設置ということでしょうか?
    とりあえず違う。
    http://neta.ywcafe.net/000631.html

    >2重・3重で複数台のサーバーで持ちたくないので共有したいと考えております。
    どうとでもできるだろうけど、オーバーヘッドはでかいうえに共有の主体(NASとか)が壊れたらアウトだけどいいのだろうか?


    要望していることと、具体的な手段がずれているように見えるので具体的は回答はしづらい
  • id:logihot
    全部それぞれのローカルにファイル設置したほうがいいということをいいたいのでしょうか?

    >どうとでもできるだろうけど、オーバーヘッドはでかいうえに共有の主体(NASとか)が壊れたらアウトだけどいいのだろうか?

    なので、DRBDも選択肢の1つです。

    >要望していることと、具体的な手段がずれているように見えるので具体的は回答はしづらい

    す、すみません。。
  • id:b-wind
    言いたいことは2点。
    ・NAS 無くても似たようなことはできるし、そのほうが楽じゃない?
    ・ストレージレベルでいろいろやったほうが汎用性は高いけど、性能劣化や障害時の復旧が面倒なのは避けづらい。

    まぁ、それぞれの仕組みの使い方覚える方が面倒といわれればそれまでだけど。


    >全部それぞれのローカルにファイル設置したほうがいいということをいいたいのでしょうか?
    技術的にはあってるけど、言いたいことはちょっと違うような。
    大本はどこでもいいけど、mod_proxy で静的ファイルはキャッシュしてしまえば丸々コピーが出来上がるでしょ?
    リバースプロキシとしての利用だからフロントの Web サーバーは何台あってもいいし、
    コンテンツを管理するのは大本の1台。

    >なので、DRBDも選択肢の1つです。
    DRDB もデバイスレベルで「まったく同じもの」を各ローカルに保持する技術。
    同じようなことを mod_proxy でも出来るし簡単だからどう?、というだけの話。
    Repcached も同様かな。

    ただ、DRDB だけじゃ同時使用できなくて GFSやらOCFSと組み合わせないといけないというし
    DRDB 自体の性能が許容範囲か?という注意事項はあるけどね。

    どれを選ぶかはその他要件やら技術レベルにもよるからどれがお勧めかは特定しづらいね。
  • id:logihot
    丁寧にありがとうございます。しかし、理解できない箇所があります。すみません。
    大変参考になります。

    >・NAS 無くても似たようなことはできるし、そのほうが楽じゃない?

    ごもっとも。

    >大本はどこでもいいけど、mod_proxy で静的ファイルはキャッシュしてしまえば丸々コピーが出来上がるでしょ?

    静的ファイルをweb1,web2のmod_proxy側でキャッシュするということは分かりましたが、「大本はどこでもいい」これが分かりません。

    web1(apache+mod_proxy) x app1(apache+mod_php) x db1
    web2(apache+mod_proxy) x app2(apache+mod_php) x db2

    web1とweb2はhtmlとかが必要
    app1とapp2はphpが必要

    (疑問1)大本を例えばapp1に設置したとすると、web1がapp1に振った時はhtml取得してキャッシュ可能。app2に振った時は?次にapp2でPHPファイルを読み込むためには、app1をmountする必要があるような気がしますがどうでしょ?

    (疑問2) app1,app2ではimagemagickを使って、リクエストの度にキャッシュファイル(サムネイル画像)を大量生成するようなアプリで、今はappが1台なので、appにそれらを保存していますが、2台で別々には管理したくないので、NFSなどの共通ディスクが欲しいところですが、ファイルストレージを使わない方法だと少し難しい?と思っていますが。

    セッションは、mysqlでも出来るのでそれでも大丈夫です。
  • id:b-wind
    やっと使ってるアプリの名前が出てきたね。
    もう1歩具体的な運用がわかればアドバイスも適切になると思うんだが。

    >静的ファイルをweb1,web2のmod_proxy側でキャッシュするということは分かりましたが、「大本はどこでもいい」これが分かりません。
    それようの小さな Web サーバーを立ててもいいけど、自分なら app1/app2 のどちらかに置いておくかな。
    リバースプロキシのキャッシュ時間を適切に設定すれば短時間のダウンならキャッシュだけで対処できるから問題ない。

    >web1がapp1に振った時はhtml取得してキャッシュ可能。app2に振った時は?
    振らないように設定すれば? mod_proxy かなり柔軟に設定できるから。
    静的コンテンツは特定サーバー、動的コンテンツはロードバランスとか。

    >次にapp2でPHPファイルを読み込むため
    ここはさすがに何らかの形でコピーを持つなりするしかないね。
    ただ、別段リアルタイムにプログラムが更新されるわけでもないだろうから
    直接同じデータを参照しなくても、CRON で rsync 走らせてコピーすればいいんでない?

    この考え方なら常に app1 がマスターデータを持っていて他はすべてこのコピー。
    データ自体はそれぞれにコピーされるけど、管理対象は app1 一つだけ。

    >リクエストの度にキャッシュファイル(サムネイル画像)を大量生成するようなアプリ
    ここのアルゴリズムがわからんから回答しにくい。
    生成されるデータがリクエストに固有の物なら、mod_proxy_balancer の機能で特定のクライアントからの接続は
    毎回同じサーバーに振り分けることが出来る。
    リクエスト毎に固有でないなら、Repcached 使えばいいのでは?
    レプリケーションされるからそれぞれの Repcached が持つデータは基本的に同一。

    別段 Repcached に拘るつもりはないけど、ここに対しては特にダメという条件も出ていないから
    とりあえず第一候補には挙げておく。
    ダメならダメで理由を教えてくれ。他にも手段はあるがすべてを列挙するほど暇でもない。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません