web-dev-qa-db-ja.com

Linux Webサーバーの仮想化を使用するか使用しないか?

現在3台のマシンでホストされている大きなWebプロジェクト(Java + postgres +いくつかのツール)のサーバーを維持しています。

  1. マシン:メールサーバー(postfix)、広告サーバー(lighttpd + php + openx)
  2. マシン:Tomcat +サーブレット
  3. マシン:PostgreSQL-サーバー、静的コンテンツ(lighttpd経由)

すべてのマシンはDebianStableを実行し、VPN(openvpn)を介して接続されています。ハードウェアは非常に古いため(AMD Athlon3000 +および2GB RAMそれぞれ))、変更の時期です。

これらのサーバーは、1台の大きなマシン(16GB Ram、VTをサポートする大きなIntel CPU、5つのIP)に置き換える必要があります。

今の質問は、仮想マシンを使用してさまざまなタスクを分離する必要があるのか​​、それとも通常どおりすべてをマシンに配置するのかということです。長所と短所はどこにありますか?

私は次のことを考えました:

プロの仮想化:

  • セキュリティ:VMが分離されているため、マシン全体を使用することはできません(うまくいけば)

コン仮想化:

  • パフォーマンス:パフォーマンスが低下します
  • 作業:すべてのメンテナンス作業は、VMごとに数回実行する必要があります
  • 通信:異なるVM(サーブレットdoデータベース)の通信はより複雑になります。
  • ハードメモリの制限:各マシンに静的リソース(メモリなど)を割り当てる必要があります。私のdb-serverが(割り当てられたよりも)30秒間より多くのRAMを必要とし、他のマシンでより多くのRAMが利用可能であるとすると、これは欠点になる可能性があります。仮想化がなければ、これは問題にはなりません。

ヒントをありがとう。

5
theomega

パフォーマンスの低下-はい、技術的には1つあります。それはあなたやあなたのユーザーが気付くものですか?それがクレイジーなハイエンドワークロードであるか、VM *をひどくオーバープロビジョニングしている(または「通常の」RAM古い既存のサーバーへの割り当てで5つのVMを絞り込もうとしている)場合を除いて、私は真剣に疑ってください。実際にRAMの使用状況を確認することを忘れないでください。すべてを分割する場合、たとえばNTPサーバーに512メガバイトは必要ありません。これはデフォルトで実行レベル3になります(NTPサーバーは過剰です。これは単なる例です。)

仕事-これは本当です。たとえば、1台から3台のサーバーからのみ移動する場合は、おそらくそれほど大したことではありません。変更を行い、コマンドを1つのターミナルセッションから別のターミナルセッションにコピーして貼り付けます。それを過ぎて、あなたはある種の管理ツールが欲しいのですが、私は現在 Puppet を見ています。

*メモリ制限-virtによって異なります。使用するソリューション。 ESX/vSphereなどの一部の環境では、物理的に利用可能な数よりも多くのRAMをVMに割り当てることができます。この機能に料金を支払う場合、ESXではリソースプールを設定でき、リソースを次のように自動的に調整します。優先順位を設定する機能が必要です。すべての場合と同様に、特定の環境での動作とトレードオフを理解する必要があります。

1
Orangutech

多くの人が言及しているように、スナップショットを簡単に作成/復元できるという事実から、仮想化は素晴らしいものです。

いくつかお話ししたいと思います。誰かが、1台ではなく複数のマシンを維持する必要があると述べました。仮想マシンをネットブートし、すべてのソフトウェアのパーティションを中央からマウントすることで、そのメンテナンスの多くを減らすことができます。このように、ソフトウェアの更新/インストールは自動的に他のマシンに移行し、追加のメンテナンス時間のほとんどを排除します。

3番目のオプションもあります:FreeBSDjails。 -これらにより、仮想化のオーバーヘッドなしに個別の環境を作成できます。 -分離は一般的なGNU/Linux chrootよりもはるかに高い(ネットワーク層も含めてすべてがカーネルレベルで分離されている)-各ジェイルは独自のIPを持つことができ、これらは実際には仮想化されておらず、カーネル内の分離された環境にすぎません+ファイルシステム。 http://en.wikipedia.org/wiki/FreeBSD_jail

私はプロとしてのセキュリティの向上を却下しません。特定の条件下で仮想マシンから抜け出すことができるのは事実です(vmソフトウェアのバグ-これらはパッチが適用されますが、他のすべての場合と同様に更新に対応します)-セキュリティはレイヤーに関するものであり、1つのレイヤーがフェイルセーフではありません。単純さはセキュリティに役立つ傾向がありますが、あまりにも多くの利点をもたらすものがいくつかあります。前述したように、ベースシステムを中央の場所からマウントすることで単純化できます(読み取り専用マウントの場合もあります)-

これが実際の例です:

PHPアプリケーションにmysqlインジェクションの脆弱性があるとすると、攻撃者はこれを悪用してサーバーにファイルを書き込む可能性があります。 (例:INTO OUTFILE sql構文を介して)-一般的なアプローチは、より多くのエクスプロイトコードを含むphpファイルを作成し、サーバーをさらに侵害することです。結局のところ、phpスクリプトは、それを実行するユーザー(Apacheプロセスを実行するユーザー)として実行されるシェルアカウントとほぼ同等です-そこから、攻撃者は完全なルートアクセスから離れたローカルエクスプロイトにすぎません。 mysqlが分離された環境(仮想マシン、bsd jail、chroot環境など)にある場合、攻撃者は自分のphpコードをファイルに書き込むことはできますが、次の場所にアクセスしてファイルを実行することはできません。 url。mysqlサービスはApacheによってホストされているファイルにアクセスできないためです。

4
jns

私は仮想化を好みます。なぜなら、

a。)非常に簡単な方法でサーバーのバックアップを実行できます

b。)実行中のサーバーの2番目のインスタンスを作成して、運用サーバーに触れることなく何かをテストできます。

c。)リソースを完全に処理して、1つのサーバーを他のサーバーよりも優先させることができます。

乾杯

撥弦楽器

3
plucked

仮想化がその方法です。

このようにして、最小限のダウンタイムでVMを簡単にバックアップ/復元したり、あるサーバーから別のサーバーに移動したりすることができます。

優れたハードウェア、ソフトウェア、および優れたセットアップにより、パフォーマンスの低下は最小限に抑えられます。すべての通信にsshを使用し、インターネットからアクセスできない分離されたローカルIPを使用するだけです。シンプルで安全。

長期的には、メンテナンスが実際に簡単であることがわかります。 openvzを使用すると、実行中のVMのスナップショットを簡単に作成することもできます。

そしてそれはスケーリングします!ハードウェアを追加するよりも、VMを追加する方がはるかに簡単です。

また、1つのVMのクラッシュ/ダウンが他のVMに影響を与えることはありません。

3
DennyHalim.com

このセキュリティの部分はかなり相対的なものです。1つではなく3つの環境を保護する必要があり、分離だけでは多くのセキュリティが提供されるわけではありません。

仮想化ソフトウェアのバグがマシン全体をクラッシュさせる可能性があることは言うまでもなく、パフォーマンスが低下することは間違いありません。

0
gekkz