さくらの VPS で OpenVZ を使う

現在自分が契約しているさくらの VPS (旧 1.5G プラン) では amd64 の Debian 6.0 (squeeze) を OpenVZ カーネルで利用しています。

VPS をこういう構成で使っている話はあまり聞かないので、これについてちょっと書きたいと思います。

2012/04/07: まとめなどを追記しました。また一部の文章を読みやすいように書き直しました。

OpenVZ のすすめ

OpenVZ (または Virtuozzo) を使った商用 VPS サービスは利用者には非常に評判が悪いようですが、OpenVZ そのものは自分のサーバで自分のために動かすのであればとても便利に使うことができるので、おすすめです。

OpenVZ の VPS はコンテナのリソースリミットを少しでも超過するとすぐプロセスが落とされる、といった悪評を特によく見かけます。これはトレランスのないコンテナリソース配分に起因するものだと思いますが (商用サービスゆえにやむを得ない措置だと思いますが)、自分がホストするサーバであれば自由にリソースリミットを設定できるので、そのような問題はほぼ回避できます。

また OpenVZ はコンテナ仮想化技術であり、KVM や Xen などのハードウェア仮想化技術とは異なるため、それらは併用が可能です。OpenVZ カーネルはオーバーヘッドも少なく普通のカーネルとほとんど変わらないため、さくらの VPS でも普通にインストールして動かせます。Debian squeeze においてはインストーラで -openvz カーネルを選択するだけで使えるようになります。

2012/04/07 追記: さきほど新しいさくらの VPS をセットアップしたのですが、CD イメージからのインストールのためか、インストーラでは -openvz カーネルを選択できませんでした。セットアップ完了後に apt-get install linux-image-2.6-openvz-amd64 などで手動インストールする必要があります。

VPS での OpenVZ 活用法

さくらの VPS のようにグローバル IP アドレスがひとつしか貰えない仮想マシンでの上で、さらに OpenVZ のようなコンテナ仮想化環境を動かして何が嬉しいんだと思われるかもしれませんが、十分なグローバル IP アドレスがなくとも工夫しだいで OpenVZ の利点を生かした運用が可能です。

OpenVZ の最大の利点は、コンテナのオーバーヘッドがごくわずかであることから (chroot 環境と同じ程度です)、サービスや用途ごとに小分けにしたコンテナを大量に作って運用できることでしょう。自分は DNS やメールや Web やデータベースといったサービスごとにコンテナを作成し、それぞれにプライベート IP アドレスを割り当てて動かしています。

各コンテナは独立した VPS として SSH ログインして使用可能です。個別に i386/amd64 用の好きな Linux ディストリビューションを動かせますので、サービスごとに最適なディストリビューションとパッケージ構成で運用することができます。またコンテナ単位で動かしたり止めたりできますので、あるサービスのメンテナンスの影響を他のサービスが受けることがありません。

自分は現時点でひとつの VPS 上で 10 程度のコンテナを動かしています。次のように全部 Debian ですが、各サービス向けに様々なバージョンの最小パッケージ構成で動いています。

% sudo vzlist -a -o ctid,numproc,ip,name,description
  CTID      NPROC IP_ADDR         NAME     DESCRIPTION
  1064         13 10.11.0.64      vs064    wheezy/i386 bind
  1065         11 10.11.0.65      vs065    wheezy/i386 openldap
  1066         43 10.11.0.66      vs066    wheezy/i386 postfix/dovecot/amavisd-new/clamav
  1067         16 10.11.0.67      vs067    wheezy/i386 nginx
  1068         45 10.11.0.68      vs068    wheezy/i386 mysql
  1069         45 10.11.0.69      vs069    wheezy/i386 zabbix
  1070          - 10.11.0.70      vs070    sid/i386 wordpress
  1071         16 10.11.0.71      vs071    wheezy/i386 typo
  1072         13 10.11.0.72      vs072    wheezy/i386 gitolite
  1073         73 10.11.0.73      vs073    etch/i386 apache
  1074         19 10.11.0.74      vs074    wheezy/i386 tiarra

外部からのアクセスは OpenVZ ホスト上で iptables を使って DNAT ルールを設定し、グローバル IP アドレスへの接続をプライベート IP アドレスのコンテナに転送しています。これは L4 の負荷分散ネットワークとして一般的な構成です。意味があるかどうかはさておき LVS を動かすこともできるでしょう。

もうひとつの利点は vzdump ユーティリティでコンテナ単位のダンプ・リストアが非常に簡単にできることです。さくらの VPS の立ち上げにおいては、自宅サーバで稼動中のコンテナをダンプしたアーカイブファイル (普通の tar ファイルですが) を VPS に転送し、リストアすることで簡単に環境移行できました。また一日一回 vzdump することで複数世代のバックアップが簡単に自動化できます (ディスク容量は消費しますが)。

さくらの VPS の新プラン乗り換え優遇施策が発表されたため、今後自分も旧 1.5G プランから新 2G プランへと引越しをする予定ですが、すべてコンテナ化してあるおかげで移行作業は非常に気楽に行えそうです。

OpenVZ の今後

以上、VPS でも得られる OpenVZ の利点ばかりを紹介しましたが、現時点で OpenVZ に全く問題がないわけではありません。端的にいうと将来が不安視されています。

OpenVZ 開発チームは RHEL6 カーネル向けのメンテナンスに注力しているようで、いまのところ安定板は最新で Linux 2.6.32 のカーネルにしか対応できていません。Debian においても OpenVZ カーネルは現安定板の squeeze を最後にサポート打ち切りとなり、次期安定板の wheezy 以降には OpenVZ カーネルはありません。

多くのディストリビューションで Linux 2.6.32 は現時点での安定板カーネルですので、今のところは大して支障はありませんが、将来的には問題が出てくるでしょう。たとえば Linux 2.6.32 のドライバでは動かないハードウェアが出てきていますし、またさくらの VPS で IPv6 接続のために使える 6rd は Linux 2.6.33 以降のカーネルでないと使えません。

もしものときの対策として Linux 標準のコンテナ技術である LXC を最新カーネルで使うことも検討していますが、OpenVZ は長年の実績もあって非常に安定しており、また便利な独自機能もいろいろあるため完全な代替にはならないという状況です。OpenVZ 自体の開発は今も活発で ploop や vSwap など新たな機能が続々と追加されています (この話題について触れた FOSDEM 2012 での Kir Kolyshkin に対するインタビュー発表録画がありました)。

OpenVZ 開発チームは cgroup をはじめとしてメインラインカーネル開発への寄与も活発ですので、そのうち新しいカーネルに完全対応した新作を出してくれるんでないかなあと淡い期待をしていますが、どうなるでしょうか。

まとめ

OpenVZ は商用 VPS サービスの界隈では悪い評判ばかりが目につくようになってしまいましたが、実際には実績ある安定したコンテナ技術として非常に便利なものなので、ぜひ使ってみてください。ポイントはサービスを提供される側ではなく、提供する側になってそれを自分で使うということです。

ただし現時点で OpenVZ の将来性はやや不明瞭ですので、Linux 標準コンテナ技術の LXC も調査しておくといった保険をかけておくことをおすすめします。OpenVZ には便利な独自機能も多いのですが、普通の用途では LXC でも十分かもしれません。

 

2012/04/05 17:29:00 JST