Actions

Mahara日本語ドキュメント/システム管理者ガイド/スケーラビリティ

From Mahara Wiki

< Mahara日本語ドキュメント‎ | システム管理者ガイド
Revision as of 13:12, 12 May 2011 by WikiSysop (talk | contribs)

Maharaは拡張できるよう、同時にクラスタ環境にも配置できるように設計されています。さらに、リバースプロクシ、HTTPキャッシング、PHPアクセラレータ等、パフォーマンスおよびスケーラビリティを改善することのできる方法をインストール済みMaharaに適用することができます。

私のMaharaをどのように拡張すればよいですか?

あなたがすでにMaharaを運用している場合、そして、あなたがスケーラビリティ/パフォーマンスに関して調査している場合、使用しているソフトウェアのチューニングまたは入替えをするため、以下のインストラクションを参考してください。いつくかの変更により、スケーラビリティ/パフォーマンスに関して、「容易に改善」することができるでしょう。

あなたが新しいMaharaをセットアップする場合、まず最初に、「ハードウェア & クラスタリング」セクションをご覧ください。ハードウェアアーキテクチャを正しく構築することで、将来的に面倒なことから、あなたを救うことができます。

ハードウェア & クラスタリング

あなたがどのようなハードウェアを必要になるのか知るためには、あなたのシステムが何名のユーザ (合計ユーザ数および同時アクセスユーザ数) をサポートするのか考える必要があります。

  • 合計ユーザ数は、あなたの考える、システムがサポートする必要のあるユーザ数です。あなたは正確な数を把握できないかもしれませんが、それでもOKです。数年内にどれくらいのアカウントを登録することになるのか考えてください - また、ハードウェアのリプレイスがいつになるのか考えてみてください。
  • 同時アクセスユーザ数は、サーバの最大ロードを処理するため、1秒あたりに実行する必要のあるPHPスクリプト数を定義することを目的とします。これは、大まかに1秒あたりのページロード数と一致します。しかし、PHPスクリプトにより、数千のサムネイルおよびAJAXリクエストも処理されるため、完全に一致するとは断言できません。

以下、合計ユーザ数の例です。Hut Valley High schoolには、常時2,000名の生徒が在籍しています。Hut Valley High schoolでは、当初、少数の生徒からMaharaの試行運用を開始しました。しかし、結果として、ほとんどの生徒およびスタッフがMaharaを使用できるよう移行しました。3年後、合計で約4,000名から5,000名のアカウントがシステム内に登録されると想定しています。

同時アクセスユーザ数は、さらに少しだけ把握することが難しくなります。恐らく、システムが一番忙しくなる時間は、教師がクラスを図書館に連れて行き、生徒がサイト中をクリックしてまわる時でしょう。これらの時に、あたなは最大30名のユーザを予想することができます、ですから、バッファとして少しだけ追加します。そして、多くのサムネイルがリクエストされる場合の処理を考えて、例えば、最大の同時アクセスユーザを40名としてみましょう。

これらの値を想定した後、あなたが必要とするハードウェアを考え始めることができます。

どの程度のハードウェアが必要ですか?

これは答えるのに難しい質問です。しかし、あなたがサポートする必要のある、最大同時アクセスユーザ数に大きく依存します (上記参照)。また、あなたのシステムにおいて、すべてのユーザアカウントに関する、ユーザファイルを保持するためのディスクスペースを考慮する必要があります。

一般的に、ウェブサーバのリクエスト処理は、以下2つの要素に制限されます:

  • CPU: ページ生成時にCPU時間を使用します。CPUの数に依存しますが、クロックスピードが速くなるため、複数コアの方がさらに良いと思われます。あなたは、最近のCPUに対して、1コアあたり、最大20リクエストを要求することができます - しかし、少ない数の方が、より安全ではあります。
  • RAM: ほとんどのページ生成では、およそ8から32MのRAMを必要とします。Maharaでは、インストール時にPHPメモリリミットを128Mに上げます。あなたがMaxRequestsPerChild を控えめに設定したとして (例えば、デフォルトの1000として)、リクエストあたり32MのRAMが必要だと仮定して、あなたは安全にページを生成することができます。

トリックは、あなたが可能な限り多くのリクエストをApacheに処理させたい、そして、少しだけ他のリクエスト (CSS/Javaスクリプトファイル等) を処理させたい点にあります。または、あなたはクライアントへのデータ転送に関して、メモリが足りないApacheが待ち時間を増やさないようにしたい。あなたが可能な最良の方法は、Varnish等のリバースプロクシをApacheの前に配置することです。あなたがリバースプロクシ等を準備できない場合、あなたのシステムのスケーラビリティは、さらに縮小します。

Hutt Valley High Schoolの例では、リバースプロクシが使用されると想定して、1秒当たり40のリクエストを処理するため、1台の最新サーバで十分です。エントリレベルのクアドコア (4プロセッサマルチコア) + 2GBのRAMで十分過ぎるほどです。リーバスプロクシを使用できない場合、さらにRAMが必要となります。

ディスクスペースは、どのようにしましょう?

ディスク容量を計算することは、ある種、黒魔術のようです。適切な原則は次のようになります: あなたは、常に自分が思っているより、少ない容量が必要です。そして、あなたは、常に自分が考えているより、多い容量が必要です。混乱しましたか? 以下、お読みください:

最初に、あなたが考えるより、少ないディスクスペースが必要となります。なぜなら、あなたの学生すべてが、自分に割り当てられたクオータを使い切ることがないからです。たとえ、Hut Valley High Schoolが、想定される5,000名のユーザすべてに1GBのストレージを与えたとしても、あなたが5テラバイトのディスクスペースを必要とすることはありません。実際、特に最初の場合、あなたは必要なディスクスペースを極めて大量に見積もることができます。ディスク使用量の増加がゆっくりだと予想される場合、あなたは、最初に100GBのストレージで切り抜けることができるのではないでしょうか。

私たちは、クオータに限定して議論していることに留意してください。これは、ユーザが保存するデータ総量により、データベースサイズを著しく小さくすることができるからです。ほとんどの場合、あなたの計算したサイズをディスカウントすることができます。

次に、常にあなたが考えるより、多くのディスクスペースが必要となります。理由は次のとおりです。最初のポイントを読んで、気が遠くなったあなたは、100Gのストレージを準備することでしょう。しかし、Maharaが利用開始された時点で、ユーザ (特にアート系の学生) が山盛りのコンテンツをアップロードし始めて、あなたの予想より早く、ディスクスペースが消えてしまいます。

この問題を解決するための鍵は? 将来的に、あなたが容易に追加することのできる、ファイルストレージをセットアップすべきです。

あなたが、この問題を解決する方法は問いません - lvm、zpools、SAN - どれでも構いません。しかし、Maharaデータルートのディスクスペースが、どのように増加するのか知らない場合、そして、ディスクスペースを使い切った場合、あなたは様々なトラブルを抱えることになることでしょう。ですから、あなたが何をすべきか確認してください - そして、外に出て、あなたのハードディスク容量に出し惜しみせずに購入してください。少なくとも最初のうちは :)

さらにストレージを追加する必要が生じた時点で、あなたが解決すべき他の問題があります。可能な場合、使用状況をモニターして、管理可能な割合で容量が増加していることを確認してください。特に、時間に応じたdatarootの使用容量をグラフ化できる場合、どれくらいのディスク容量が必要であるか計画することができ、問題が発生するずっと前にハードディスクを増設することができます。

クラスタリング

あなたのシステムに多数の同時アクセスユーザが必要な場合、Maharaをクラスタ環境で動作させることを考慮すべきでしょう。

ウェブサーバ、ファイルサーバ (必要であれば) およびデータベースサーバが異なるマシンに配置された環境に、Maharaをインストールすることができます。あなたが、データベースサーバを独自のマシンに移管できる場合、スケーラブルなシステムへの偉大な第一歩となることでしょう。

現在のところ、Maharaはデータベース活動に関して、並列同時の読み書き処理をサポートしていません。これは、あなたがマルチマスタ形式のデータベースを設定できないことを意味します。しかし、pgpool のようなソフトウェアを使用することで、あなたがこのレベルのスケーラビリティを必要とする場合、マスタ/スレーブを配置することができます。

データベースサーバが独自のマシン上に設置された後、スケールアップに関する、次の最も有用な方法は、さらにウェブサーバを追加することです。複数のサーバすべてが同じMaharaコードを提供して、同じデータベース、同じdatarootディレクトリを提供する限り (これはNFSを使用して準備できます)、Maharaが快適に動作するため、あなたはサーバ群の前にロードバランサを配置することができます。

ファイルサーバ/SAN

一般的に、そのような環境下では、あなたはdatarootディレクトリをウェブサーバの1つに置く、またはデータベースサーバに置くでしょう。そして、他のサーバは、それをマウントするためNFSを使用して、ローカルディレクトリのように表示されます。しかし、これにより、ディスクに関するパフォーマンスの低下が生じた場合、あなたは、ファイルサーバまたはSANの使用を考えても良いでしょう。あなたが多くのストレージクオータをユーザに提供したい場合にも、このことが関係します - 独立したマシンまたはSANを使用することは、他のサーバから独立して、あなたが必要なディスクスペースを準備できることを意味します。

ソフトウェア

TODO:

  • チューニングおよびリバースプロクシを使用する
  • ウェブサーバをチューニングする
    • Apache設定
    • PHP 設定/アクセラレータ
  • データベースをチューニングする
    • PostgreSQL
    • MySQL