はるさめ氏の日常

主に弱電とマイコンを扱っています.たまにネットワークやサーバなども.

自宅サーバ(に限らないんだけど)で仮想環境を導入することのメリット・デメリットをまとめておく記事

私は仮想環境としてよく Proxmox Virtual Environment を使っています.そのうえで,当然メリット・デメリットが発生するので,それを簡単にまとめておこうと思い,この記事を書いています.

仮想環境とは

仮想サーバを動かすことができる環境のことを仮想環境といいます.仮想とは何かというと,一言で言うなら「ハードウェアをソフトウェア的に模擬する」でしょうか.
これにより,複数のサーバを単一の物理サーバの上で動かすことができます.

例えば 8Core 128GB RAM なサーバがあるとしましょう.その上で,2Core 8GB RAM なサーバを 4 つ動かすというようなことができます.それぞれは全く別のサーバとして振る舞い,設定すればそれぞれが MAC アドレス / IP アドレスを持ち,リソースを占有します.

サーバを仮想化するメリット

  • コスト削減に繋がる
  • 資源を有効活用できる
  • 柔軟性・スケーラビリティが向上する
  • 可用性が向上する
  • 障害時に復旧がしやすい

コスト削減に繋がる

仮想サーバを用いない場合,言い換えるとベアメタルサーバ上でサービスを展開する場合,当然必要なサーバ数だけマシンを調達する必要があります.
ただ,仮想サーバを用いる場合,一つあるいは少数の物理サーバの上でより多くのサーバ環境を構築することができます.
これは調達する必要のあるマシンの数の削減に繋がり,コスト削減になることがあります.

これはコストメリットだけでなく,占有スペースや消費電力も削減できます.

資源を有効活用できる

例えば 3 台のサーバが必要だとします.各サーバには当然 CPU / RAM / ストレージ などの資源があるわけですが,サーバ A の資源をサーバ B が使用することは当然できません.ただ,これを仮想サーバで構築した場合,リソース自体は単一のホストに存在するため,リソースの共有ができます.サーバ A は忙しいけどサーバ B は暇している.という時にサーバ B に割り当てるリソースを縮退し,サーバ A に割り当てるリソースを増やしてあげるということも,やりようによってはできます.

柔軟性・スケーラビリティが向上する

上で述べたことと一部被る部分はありますが,サーバを柔軟に運用することができます.
リソースの柔軟な割り当てについては上記の通り.それ以外だと,簡単に仮想サーバを建てたり複製したり止めたり削除したりすることができます.
特に複製ができる点が,ハードウェアをソフトウェアで模擬しているからこそ成せる技と言えましょう.

可用性が向上する

複数の物理サーバと共有ストレージを用意し,クラスタを構築すると,HA 構成を作ることができます.
HA とは,High Availability の略であり,日本語にすると「高可用性」となります.可用性が高いということは,それだけサービスを維持できるということになります.

HA 構成を組んでおくと,例えば物理サーバに障害が発生してダウンしても,すぐに別のサーバでサービスを再開できます.
ダウンしたマシンのメモリ上にしか無いデータは失われますが,その前の時点からであれば速やかな復旧が可能です.
これをフェイルオーバとか言ったりしますが,物理機器の障害対策として使うことができますね.

また,マイグレーションという機能を使用すれば,サービスを活かしたまま物理サーバのメンテナンスを行うことができます.特に仮想サーバが起動した状態でのマイグレーションをライブマイグレーションといいます.

障害時に復旧しやすい

事前にバックアップなりスナップショットなりをしっかり取っているという場合に限りますが,取得したバックアップから簡単に戻すことができます.バックアップがあれば戻せるのはベアメタルでも同じですが,マシンそのものをまるごとバックアップできるのは仮想環境ならではでしょう.

サーバを仮想化するデメリット

もちろんメリットがあればデメリットもあります.それについて簡単に.

  • オーバーヘッド
  • 比較的大規模な基盤が必要になる

オーバーヘッド

サーバを仮想化するうえでハイパーバイザが動いているわけですが,それ自身が消費するリソースは無視できません.
一般には仮想マシン自体ほどではないですが,大なり小なりリソースは消費します.

比較的大規模な基盤が必要になる

仮想サーバをたくさん動かせるということは,それを動かし切るだけのマシンスペックが必要になるということになります.特に,CPU と RAM の消費が大きいでしょう.
そのため,我が家では,一つの VM に割り当てるコア数・メモリの量を最小限にすることでやりくりしています.

とまぁこんな感じでしょうか.多分他にもあると思うので,思いつき次第追記していきます.