web-dev-qa-db-ja.com

moodleのスケーラブルなアーキテクチャを構築するためのアドバイスが必要

私はmoodleベースの教育サイトのアーキテクチャを設計することを検討しています。最初は数千人のユーザーにサービスを提供しますが、いくつかの国で数十万から数百万のユーザーをサポートするように成長できる必要があります。

複数のWebサーバーにリクエストを分散するロードバランサーを考えていました。 Webサーバーは、静的コンテンツを提供するものと動的コンテンツを提供するものによって分割できます。次に、mysqlマスターノードに書き込み、スレーブノードから読み取ります。

どのような種類のロードバランサーがmoodleでうまく機能しますか?ベンダーの1つからハードウェアロードバランサーソリューションを入手する必要がありますか、それともLVSやリバースプロキシなどのオープンソースソリューションを使用して自分で構築する必要がありますか?

最初はApacheサーバーを使用してWebページを提供することを計画していましたが、負荷が高くなるにつれて、静的コンテンツ用のlighttpdWebサーバーと動的コンテンツ用のApacheアプリケーションサーバーに分割しました。必要に応じて、gzip圧縮、squidキャッシュ、memcacheなどもデプロイされます。

Webサーバーハードウェアの場合、one-uシングルソケットサーバーまたはブレードソリューションを使用する必要がありますか?どちらを実行して拡張する方が安くなるでしょうか? Supermicroには、1uシャーシにツインサーバー、2Uシャーシに4台のサーバーとインフィニバンドを備えた興味深い製品があります。ここの誰かが以前にこれらのサーバーを試したことがありますか?

ストレージには、SANを使用するか、Sun Unified Storage 7000のようなストレージサーバーで十分です。mysqlクラスターのセットアップには、マスターノードの書き込みに使用する2つの異なるストレージシステムが必要です。アクセスとスレーブが読み取るための別のアクセス?またはすべてのノードに個別のストレージが必要ですか?

このWebサイトは読み取り操作に重点を置く可能性が高いため、mysqlクラスターとストレージのセットアップについてどのような考慮が必要ですか?

管理部分には、dsh、ganglia、nagios、splunk、kickstartを使用する予定です。

バックアップのために、LTOテープオートローダーを計画しています。このサイトは主にアジア地域で使用されるため、夜間は数時間のトラフィックが少なくなります。 mysqlクラスターをバックアップするための最良の方法は何ですか?一時的に書き込みを無効にし、マスターを取り出してバックアップを実行できますか?

この種のスケーラブルなWebサイトのセットアップの経験がある場合は、アドバイスしてください。私の経験のほとんどは、大きなUNIXボックス、または小さなスタンドアロンのUNIX/Linuxボックスでの作業です。したがって、この種のスケールアウトの実装は私にとって初めてです。

ありがとう

ロバート。

5
Robert

ロバート、あなたは明らかに賢い人ですが、敬意を表して、事前のドメイン知識を持つコンサルタントを雇うか、今すぐ小さなものを作り始めて、それがあなたをどこに連れて行くかを見てください。あなたの投稿に答える方法はありません。抽象概念が多すぎて、難しい数字はありません。

いくつかの考え:

最初は数千人のユーザーにサービスを提供します...数十万から数百万のユーザーをサポートするように成長します

最初にそのレベルの尺度が必要であることを証明します。表示されないユーザーを見越してスケールアウトアーキテクチャを構築しないでください。耳障りに聞こえたら申し訳ありませんが、すべてのWebサイトの99%が大規模に成長していません。 Stack Overflow/ServerFaultを参照してください。かなり従来型の少数のサーバーから毎月100万人のユーザーにサービスを提供しています。

ベンダーの1つからハードウェアロードバランサーソリューションを入手するか、オープンソースソリューションを使用して自分で構築する必要があります

あなたのスキルと時間対お金に関するあなたの状況に依存します。一度構築されると、オープンソースと商用製品はほとんど同じように機能します。商用ソリューションは、すぐに使用できる優れた統計と優れた管理インターフェイスを備えている傾向があります。

Webサーバーハードウェアの場合、one-uシングルソケットサーバーまたはブレードソリューションを使用する必要がありますか?

サーバーベンダーに価格を問い合わせてください。データセンターに電力密度、つまりサイズと消費電力の好ましいバランスについて尋ねます。多くの場合、電力が制限されるため、ブレードのような高密度のソリューションでは何も得られない可能性があります。

ストレージには、SANを使用する必要があります。そうしないと、Sun統合ストレージ7000のようなストレージサーバーで十分です。

SANの必要性が証明されている場合は、SANを取得します。そうすれば、SANが解決する必要があるものをよりよく理解できます。

このWebサイトは読み取り操作に重点を置く可能性が高いため、mysqlクラスターとストレージのセットアップについてどのような考慮が必要ですか?

本当に優れたキャッシュソリューションを作成します。 Squid(Varnish)のようなフルページキャッシング、Memcachedのようなアプリケーションデータキャッシング、または両方の組み合わせ。キャッシュの無効化を検討してください。コンテンツが再度提供されないように、キャッシュからコンテンツをすばやく削除する必要がありますか?

Mysqlクラスターをバックアップするための最良の方法は何ですか?

意見はさまざまですが、一般的なアプローチの1つは、バックアップ専用のスレーブMySQLを用意し、セルフスクリプトバックアップソリューションにInnoBackupやMaatkitなどを使用することです。

編集:これを最初から作成する場合は、コミットする前にクラウドコンピューティングをよく見てくださいを確認してください。クラウドコンピューティングは、スケーラビリティが非常に強力であっても、スケーラビリティだけではありません。パッケージの一部として提供される特定のサービスは、日常業務を容易にするのに非常に役立ちます。いくつかの例:

  • Amazon EBSボリュームのライブスナップショットにより、データベースのバックアップが簡単になります。
  • Amazonには、セットアンドフォーゲットサービスとしての負荷分散があります(もちろん、優れたセルフホストロードバランサーよりも機能が制限されていますが、簡単に開始できます)。
  • Rightscaleのイメージには広範なサーバー監視が組み込まれているため、容量計画やアプリケーションのイントロスペクションが容易になります。
4
Jesper M

Moodleの詳細についてはよくわかりませんが、一般的なスケーラビリティーに関するヒントをいくつか提供できます。

ブレードとSANは、ベンダーによって誤って販売されることがよくあります。コモディティ1Uサーバーのクラスターがおそらくあなたのニーズに最適だと思います。消費電力が非常に高く、冷却要件も非常に必要なため、ブレードシステムを使用しないデータセンターが多数あります。

私は分散/複製ストレージの Gluster の大ファンです。大規模ベンダーのSANソリューションの代わりに、調査するのは興味深いかもしれません。

HP DL360のスタック全体も同様に機能します(またはより安価なコモディティサーバー(DNUKを強くお勧めします))。サーバー間にInfiniband相互接続が必要になるかどうかは真剣に疑っています(インフラストラクチャは高価であり、Webサービスの目的にはほとんど不要です。ゲノム発現のHPCモデリングを行っている場合、私の答えは異なる可能性があります!)

ネットワークインフラストラクチャに関して(これも考慮する必要がある場合)、CiscoCatalystスイッチまたはHPProcurves(ほぼ均等に一致、IMO、および安価)を備えたCiscoルーターをお勧めします。

負荷分散に関する限り、LVSを実行している専用のLinuxサーバーは、複数のクラスターノードへのトラフィックを簡単に処理します。お金($ 30k +)がある場合は、citrixネットスケーラーが適切なキャッシング/アクセラレーション/ロードバランシングプラットフォームである可能性がありますが、冗長性のために2つ(理想的には3つ)が必要になることに注意してください。

おそらく最初からmemcacheを含めるようにしてください。スケーラビリティを追加するのは簡単で、特にMySQLデータベースクラスターから読み取る場合は、キャッシュのパフォーマンスが大幅に向上します。 MyISAMではなくInnoDBを使用するなど、MySQLのパフォーマンスを調整するためにできることは他にもあります。

クライアント側のキャッシュとしてより適切に機能するSquidとは対照的に、Varnishなどのリバースプロキシキャッシュを使用した方がよいと思います。
2つの専用Varnishキャッシュノードを簡単に作成したり、Apache/lighttpdサーバーと同じサーバーでVarnishを実行したりできます。

ライセンスの問題に関しては非常に高額になる可能性があるため、ベンダーロックインが発生する状態にならないようにしてください。フリー/オープンソースソフトウェアを完全に使用してスケーラブルなサイトを構築することは非常に可能です。もちろん、ソフトウェアのロードバランサーは、専用のASICを備えたハードウェアのロードバランサーほど高速ではありませんが、優れたネットワークインフラストラクチャがあれば、かなり近づくことができます。

管理部分には、dsh、ganglia、nagios、splunk、kickstartを使用する予定です。

そのリストにパペットを追加するだけで、勝者になります。 splunkの高価なライセンスに注意してください(1日に数十GBのログを処理するようになると、噛み付く可能性があります)。

Muninは優れた無料の監視ツールであり、プラグインスクリプトからグラフを自動的に構成できるため、Zabbixなどのアプリよりも優れています(監視対象を事前に追跡する必要がありません)。

1
Tom O'Connor

私は大規模と見なされる可能性のあるMoodleシステム(多くても数千人のアクティブユーザーがいる)を管理したことはなく、Linuxの経験が私よりも多いことはほぼ間違いありませんが、いくつかの所見を提供できます。

何百万人ものユーザーがいるMoodleのインストールは、私が聞いた他のどのインストールよりも桁違いに大きいでしょう。英国と世界中に学生がいるオープン大学でさえ、20万人のユーザーしか期待していません。米国の大規模な大学には、数万人のユーザーしかいない傾向があります。サイズの良いアイデアについては、 http://docs.moodle.org/en/Large_installations を見てください本当にシステムを使用して何百万人もの人々を獲得しますか?それらはすべて一度に表示されるのでしょうか、それとも何年にもわたって徐々に登録されるのでしょうか。最初の年に10,000を取得するだけの場合は、数百万を処理できるシステムは必要ありません。さらに、多くの教育機関には理論的にMoodleを使用する学生がいますが、実際にシステムを使用しているのはごくわずかです。要するに、小さく始めてスケールアップします。

Linuxディストリビューションは、Moodleを管理する際の作業を最も簡単にします。利用可能なオンラインコミュニティヘルプは、Windowsを対象としていません。

あなたがこれについて真剣に考えているなら、地元のMoodleパートナーを募集することを検討してください(申し訳ありませんが、私は新しいので、この2番目のリンクを投稿することはできません)。彼らは、Moodleシステムのセットアップと管理における個人的な経験に基づいてアドバイスを提供することができます。

Moodleは一般的にシステムリソースで非常に簡単です。トランザクションレートが非常に大きくなる可能性があるため、データベースを監視するだけです。あなたはそれについて言及していませんが、dbサーバーをWebサーバーから分離し、dbのクラスター化にリソースを集中することを検討してください。キャッシュ(eacceleratorまたはmemcached)を使用すると、Webアクセスはごくわずかです。ファイルストレージも一般的に非集中的であり、ローカルまたは別のマシン上の適切なRAIDアレイへのリンクだけが必要です。 SANをお持ちの場合は、それを使用してください。そうでない場合は、単純なものに固執します。

いつものように、バックアップ、バックアップ、バックアップ!

幸運を!

1
user14142