Linux-vserverまたはすべてのサンドボックスサービス

最近、habrでopenvzとlxcに関する記事が公開されました。 この記事はまだサンドボックスに横たわっていることを思い出しました...



プロジェクトを配置するために、このスキームを使用します。各サービスは隔離された環境で起動されます。戦闘-個別、テスト-個別、電話-個別、Web-個別。 これにより、システムをハッキングするリスクが軽減され、1回のrsyncですべてをすべてクラウンの隣のサーバーにバックアップできます。 (およびdrbd + corosyncを使用すると、これも自動的に行うことができます)



分離された環境を作成するには、VDS(ハードウェア仮想化)とVPS / jail(プロセス空間の仮想化)と呼ばれる2つのアプローチがあります。



VDS分離を作成するには、XEN、VirtualBox、VMWare、およびその他の仮想マシンが使用されます。

LinuxでVPSを作成するには、linux-vserver、openvz、またはlxcが使用されます。



VDSの利点:内部のシステムは完全に任意であり、異なるバージョンのコアを保持でき、別のOSを配置できます。

VDSの短所:IOでの高いパフォーマンス損失、サーバーOSで実行されているサービスを複製するサービスのCPUおよびRAMの過剰な消費。



VPSの利点:非常に低いパフォーマンスの損失。分離の場合のみ、本当に必要なサービスのみが起動されます。

短所VPS:Linuxのみを実行でき、カーネルは既に実行されているバージョンのみになります。



別のOSは必要ないので、どこでもlinux-vserverを使用します(歴史的に、2004年から使用しており、openvzは2005年に公開されました)。すでに)。



FAQから引用します。

「Linux-VServerのステータスはどうなっていますか?

Linux-VServerには10年以上の成熟度があり、積極的に開発されています。 2つのプロジェクトは、Linux-VServer、[LXC]、および[OpenVZ]に似ています。 2つのうち、OpenVZはより成熟しており、Linux-VServerと同様の機能を提供します。 LXCは、最新のカーネルに存在するcgroupなどのカーネルメカニズムのみに基づいています。 これらのカーネルメカニズムは引き続き改良され、分離が成熟します。 それが発生すると、Linux-VServerはLXCとは別にこれらの新機能を利用し、現在と同じ堅牢なユーザーインターフェイスを引き続き提供します。 現在、LXCはLinux-vserverよりも機能性と分離性が大幅に低くなっています。 LXCは、最終的にはカーネルメカニズムの堅牢なラッパーになりますが、まだ大規模な開発中であり、実稼働で使用する準備ができているとは見なされていません。



以下では、隔離された環境でLAMPサーバーを起動するための基本的な操作について説明します。



OS:debian-stable、64ビット

Wheezyからは、debianチームによるvserverのサポートが削除されたため、 repo.psand.net / infoでカーネルを使用します



linux-vserverを実行するためのルートシステムの構成



echo "deb http://repo.psand.net/ wheezy main" > /etc/apt/sources.list.d/psand.list wget -O - http://repo.psand.net/pubkey.txt | sudo apt-key add - aptitude update aptitude search linux-image-vserver #      aptitude install linux-image-vserver-3.13-beng util-vserver curl bzip2 #  3.13      curl http://dev.call2ru.com/vs/nss_vserver_64.tar.bz2 | tar xfj - cd nss_vserver_64 make make install ln -s var/lib/vservers / curl http://dev.call2ru.com/vs/vserverauth.tar.gz | tar xfz - cd vserverauth/vslogin/ make cp vslogin /sbin/ chmod u+s /sbin/vslogin echo /sbin/vslogin >> /etc/shells echo -e "auto dummy0\niface dummy0 inet static\n\taddress 192.168.1.250\n\tnetmask 255.255.255.0\n" >> /etc/network/interfaces echo -e "\tpre-up /sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 ! -d 192.168.1.0/24 -j MASQUERADE\n" >> /etc/network/interfaces echo -e "\tpost-down /sbin/iptables -t nat -D POSTROUTING -s 192.168.1.0/24 ! -d 192.168.1.0/24 -j MASQUERADE\n" >> /etc/network/interfaces
      
      





インストール後-新しいカーネルで再起動します。



私たちは何をしましたか:





これにより、1つのIPサーバーを使用してさまざまなサービスを開始し、ログインでサービスを共有できます(たとえば、web-rootまたはroot @ webとしてログインするだけでWeb仮想マシンにログインできます)。



その後、それらをdummy0インターフェースにバインドすることにより、サーバー上で新しいサーバーを開始できます。

すべて問題ありませんが、作成されたサーバーは192.168.1.xに応答しますが、外部からアクセス可能でなければなりません。



これを解決するには、rootでnginxが必要です。

  aptitude install nginx cat > /etc/nginx/sites-available/proxy <<END server { listen 80; #  IP:PORT proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-SSL no; if ($http_host ~ "(?i)(somesite\.ru)$") { rewrite ^(.*) /web/$1 last; } #    if'      #  catch-all    rewrite ^(.*) /web/$1 last; #     location /web// { proxy_pass http://192.168.1.57/; proxy_read_timeout 500; } } END ln -s ../sites-available/proxy /etc/nginx/sites-enabled/ /etc/init.d/nginx reload
      
      







これにより、80番目のポートへのすべての着信要求を、名前に応じて異なる仮想マシンに分散できます。

必要に応じて、proxy_passを別の外部IPに使用できます。これにより、DNSレコードの完全な更新を待たずに仮想サーバーを別のマシンに移動できますが、これは別の議論のトピックです。



ここで、LAMPをインストールする新しい仮想マシン(57という名前、webという名前)を作成する必要があります。



新しい仮想サーバーの作成



  MIRROR=http://ftp.de.debian.org/debian NAME=web DOMAIN=mydom.ru CONTEXT=57 vserver $NAME build -m debootstrap --context $CONTEXT --hostname $NAME.$DOMAIN --interface dummy0:192.168.1.$CONTEXT/24 -- -d squeeze -m $MIRROR echo default > /etc/vservers/$NAME/app/init/mark vserver $NAME start vserver $NAME enter aptitude update aptitude install locales echo -e "en_US.UTF-8 UTF-8\nru_RU.UTF-8 UTF-8\n" >> /etc/locale.gen locale-gen echo -e "127.0.0.1 localhost.localdomain localhost vhost\n192.168.1.250 vroot\n" > /etc/hosts
      
      





これにより、ベースシステムがセットアップされ、ルートシステムの再起動時に自動実行されます。



これで、仮想マシンは必要なソフトウェアをインストールする準備ができました。 たとえば、通常のLAMP:

  aptitude install apache2 libapache2-mod-php5 mysql-server php5-mysql php5-mysqli libapache2-mod-rpaf editor /etc/apache2/mods-available/rpaf.conf # (  "RPAFproxy_ips 127.0.0.1"       192.168.1.57 (IP )) a2enmod rpaf /etc/init.d/apache2 restart exit
      
      







それだけです! これで、サーバーは完全に分離された環境でApacheを実行します。



このアプローチの問題は次のとおりです。


1.仮想サーバーへの直接アクセスは、パスワードのみで可能です。

2.ルートシステムでは、誰にもアクセスを許可しないでください。そのため、検証された最小限のソフトウェア(ssh、nginx、iptablesなど)のみがルートシステムに存在する必要があります。

3.仮想マシン内のポートに直接アクセスする必要がある場合、iptablesを使用して転送する必要があります。



記事を簡単にするために舞台裏に残された瞬間


1. / var / lib / vservers / *仮想マシンのスペースの割り当てを個別に管理できるようにlvmに配置することが望ましい。

2.リソース管理:作成されたばかりの仮想マシンは、マシンのすべてのリソースを消費できます。 制限の設定の詳細linux-vserver.org/Resource_Limits

3. / tmp /。 仮想マシンの内部では、デフォルトで/ tmp /は16mサイズのramdiskとして作成されます。 または、「vserver $ NAME start」修正の直前/ etc / vservers / $ NAME / fstab

4. linux-vserverに関する有用な情報、情報などは、 linux-vserver.orgにあります。



有用な質問がある場合、それらに対する詳細な回答がトピックに記載されます。



All Articles