仮想化についての雑感
現在、サーバを仮想化 (Virtualization) して運用することがあたりまえになっている。個人的には、VMWare ESXi、業務では Xen、を導入しているので、仮想化することのメリットとデメリットをまとめてみる。
メリット
- 仮想マシンごとに一つの役割だけをあたえることで、個別サーバの設定が単純になる
- 普通は同じサーバに同居できないようなソフトウェアを、それぞれ仮想マシンにすることで物理的には一台に済む_(実際には、MySQL で同じデータベース名で異なるデータを格納している場合に仮想化を行っているが、4Gbps 本に mysqld-safe を使う方法がのっていたのでこちらの方がよいかも)
- 仮想マシンの OS ごと含めた設定をまるごろコピーして他の物理サーバへ展開できる(いわゆるライブマイグレーション、使ったことはない)
- 消費リソースが異なるサーバをうまく組み合わせて仮想化することで、物理サーバを少なくすることができる(空きラックが増えたり、消費電力が少なくすむ)
デメリット
- 物理サーバでサービスするよりも、各種リソースのパフォーマンスが下がる(実際には使いきれないことが多いので、特に問題にならない)
- Xen の場合、Dom0 の物理メモリ(512MB)、物理ハードディスク(10GB)、が必要になってしまう
- Xen の場合、Dom0 のファイルシステムなどがクラッシュすると、その上にある DomU がダメになる(先日、初めて体験して大変なことになった)
- Xen の場合、DomU から Dom0 の情報へアクセスできないので、モニタリングツールなどで管理しにくい傾向になる(今のところ、オープンソースでサポートしているモニタリングツールはなさそうなので、既存のモニタリングツールを改良するか自作するしかないと思う)。
- 仮想化を前提としたハードウェアが必要なので、すこし高めのサーバになり初期コストが若干かかる(それほど大きくは変わらないが)
と考えてみると、仮想化するデメリットよりもメリットのほうが大きいと思って、現在はほとんどのサーバを仮想化している。
ただし、なんでも仮想化すればよいというものでなく、次のことを考える必要がある。
- 物理サーバ上に一つの仮想マシンなら物理サーバが、そのままサービスを提供したほうがよい(あたりまえか)
- サービスによっては、サービスに特化した物理サーバを用意することで初期コストを下げられる(例えば、LVS は安いマシンで十分とか、データベースは高速なディスクのものにするなど)
- 仮想化したとき、どの程度リソースのパフォーマンスが下がるのか知っておく必要がある
- 現在、必要なサービスが仮想化を導入することで、デメリットよりメリットの方がうわまっているか考える必要がある
と、このあたりのことを改めて考えて、今のところ次のような方針で仮想化を導入している。
- LVS/マスターDB/Memcached/バッチ系などのサーバは、なるべく小さな単位にして仮想化する、例えば LVS は外側用のものと内側用のものは別々の仮想化している
- Slave DB は、パフォーマンス重視(特にディスク I/O)のため仮想化しない
- CPU とメモリの両方をたくさん使っているウェブサーバ(with Passenger なので、1台でなるべく多く捌きたい)は仮想化しない
現在はこんな方針でやっているが、そろそろ非同期処理系のクラスタマシン(Hadoop)が必要になってきたので、既存の物理サーバを最大限に使いつつ、新しい組み合わせを考える必要が出てきている。CentOS の場合、安定性の面、導入の容易さから、Xen を使うのが一番よいかなと思っているが、次の点を問題意識としてもっている。
- Dom0 なしでできない(完全仮想化でできる?)
- CentOS の Xen はもうサポートされないっぽい(RedHat は KVM サポートを発表したので)ので自分でサポートすることになりそう(例えば、新しいバージョンを使いたいなど)
- 最近の 1U サーバは内蔵の起動可能な USB ポートをもっているが USB メモリとかでブートして、ハードディスクは DomU 専用にすることは可能?
- Xen 以外の選択肢
まだまだ始めたばかりの仮想化なので、いろいろと試していきたい。
Recent Comments