私は、主に Web サービス、プロジェクト管理サービス (バージョン管理など)、およびそのような種類のアプリケーションを実行するための、負荷分散された仮想サーバーの作成を検討し始めました。そして、オープン ソース (Linux) ソリューションが必要です。
ウィキペディアにはこのエントリー一見非常に有望で安定したプロジェクトもありますが、ほとんどはとっくに終わっています。LVS のそしてケリヘド可能のように見えますが、確信はありません。投資する価値はありますか(時間的に)?
良い解決策は何でしょうか? (商用ソリューション (Linux など) を購入する余裕はありませんが、これらの代替案について学びたいので、そのためのコメントをいただければ幸いです)。
THX
答え1
答え2
私が質問を本当に間違って読んでいるのでなければ、Web アプリケーションのホスティングに関しては、やり方が間違っていると思います。
複数のノード(仮想または物理)を用意し、それらの構成を管理することをお勧めします。傀儡。
ノードは1Uサーバのラック全体、または3Uの強力なマルチプロセッササーバの束で実行できます。仮想化そして、仮想化ゲストとして任意の OS をインストールします。
4 台のサーバーがある場合は、次のように設定できます。
- サーバー 1: ロード バランサ + HTTP ノード (Varnish と Apache を実行)
- サーバー 2: ロード バランサ + HTTP ノード (Varnish と Apache を実行)
- サーバー 3: HTTP ノード + DB マスター (Apache と MySQL を実行)
- サーバー 4: HTTP ノード + DB スレーブ (Apache と MySQL を実行)
PXE ブート環境用の nagios、munin、tftpd、kickstart/preseed ファイル用の小さな HTTP サーバー、DHCPd、Rocketport 経由のシリアル コンソールなどのサービスを実行する 5 番目のサーバーがあると便利です。
単一のイメージを使用する代わりに Puppet を使用して独自のシステムを展開する大きな利点は、リソースが効果的に自己文書化されることです。サーバーにドロップするイメージだけを使用する場合よりも、はるかに明確で、ブラック ボックスが少なくなります。さらに、イメージの更新と変更がはるかに簡単になります。
答え3
実際に質問されている内容に答えているかどうかわかりませんが、VM を取得してミラーリングする方法を探している場合は、私が知っている無料の仮想化ツール (VMware Server、ESXi、kvm など) のいずれかを使用できます。
- 必要なものをすべて備えたVMを作成する
- VMをコピーする
- コピーに変更を加える(IPアドレスとホスト名)
- 両方のVMを起動する
- ロードバランサーを挿入する(ハードウェアまたはソフトウェアは問いません)
- .. 6 番目のステップは思いつきません :)
答え4
SSI は魅力的に聞こえますが、最適なパフォーマンスを発揮する可能性はほとんどありません。
主なターゲットは Web アプリなので、現在のベスト プラクティスを使用できます (使用すべきです)。通常、ベスト プラクティスは次のようになります。
- フロントエンドとしてのキャッシュロードバランサ(squid、varnish、nginx)
- Web アプリ用の複数の HTTP サーバー (通常は Apache、nginx+FastCGI など)
- データベース
うまくいけば、最初のボトルネックはデータベースになります。この時点で、次のことを行う必要があります。
- Web アプリにキャッシュを追加して、DB ヒットを最小限に抑えます。(最新のフレームワーク (RoR、Django) には、memcached の優れたサポートが含まれています)
- DB からより専門的なアプリに何らかのジョブを移します。最初の候補はタスク キュー (rabbitMQ または類似のもの) とキー/値ストア (tokyo cabinet、resis、mongoDB など多数) です。
- DB を分散します。読み取りが多く書き込みが少ない場合は、マスター/スレーブ レプリケーション (MySQL では簡単) を試してください。ただし、この場合、memcached がすでに負荷の大部分を吸収しているはずです。シャーディングも試してください。
もしこれが大きくなりすぎたら(FaceBook ですか?)、Google のように(ほとんどすべてのことを MapReduce で「オフライン」で実行している)構造全体を再考する必要があります。