仮想化
Virtualization
1台の物理的なコンピュータ(サーバー)のCPUやメモリなどのリソースを論理的に分割し、あたかも複数台の独立したコンピュータが存在するかのように動かすソフトウェア技術のことです。物理資源を複数の環境で共有し、用途ごとに管理するために使われます。
🐾 猫で例えると?
重なってくつろぐ猫たちを、物理資源を分け合う環境に見立てています。ソファーが物理機、資源を割り当てる仕組みがハイパーバイザー、各猫が仮想マシンです。実際にはホストOSを経由する方式と、ハードウェア上で直接動く方式があり、必ず一つのゲストOSが別のゲストOSを支えるわけではありません。
💻 IT現場における「仮想化」とは?
用途ごとに別の物理機を用意すると、使わない時間帯の資源が余る場合があります。仮想化は、それらを集約して管理する方法の一つです。ただし、集約できる量は負荷と可用性の要件によって変わります。
VMware、Hyper-V、KVMなどでは、仮想マシンごとにOSやアプリを動かせます。クラウドでも広く使われますが、専有の物理サーバーなどを提供するサービスもあり、「クラウドはすべて同じ仮想化方式」というわけではありません。
⚠️ 仮想化の仕組みと注意点
仮想環境は非常に便利ですが、現場のエンジニアが常に警戒しているのが「オーバーコミット(リソースの割り当てすぎ)」と「単一障害点(SPOF)」のリスクです。
リソースの奪い合いとホストマシンの死
オーバーコミットは、物理資源より大きい合計量を論理的に割り当てる運用です。可能な方式や不足時の処理は製品によって異なります。同時利用の増加に備え、ホスト全体のメモリ、CPU待ち、I/Oを監視して上限を決めます。
# systemdを利用するLinux環境での検出例
systemd-detect-virt
# 仮想マシンだけを対象にする場合
systemd-detect-virt --vm
# noneは「検出されなかった」の意味。あらゆる環境を断定する検査ではない また、上に乗っている仮想サーバーがいくら頑丈に作られていても、土台となる「物理サーバー(ホスト)」の電源コードが抜けたり基板が壊れたりすれば、その上で動いているすべての仮想サーバーが道連れになって全滅します。停止が許される時間や復旧の要件に応じて、ホストの冗長化や別の機器へ復元する方法を検討します。
🛠️ 仮想化を賢く使うためのポイント
限られたリソースを安全かつ効率的に使い回すために、インフラ設計で意識すべきポイントです。
- ホスト側のリソース監視を怠らない: 仮想マシン単体のCPU使用率だけでなく、土台となっている物理サーバー全体の負荷を常に監視し、余裕を持ったキャパシティプランニングを行う必要があります。
- スナップショットとバックアップを区別: スナップショットは変更前へ戻す助けになりますが、元のストレージ故障に耐える独立したコピーとは限りません。DBの整合性や外部システムへの変更も含め、復元方法とバックアップを確認します。
- コンテナ技術との使い分け: より軽量で起動が速いDockerなどの「コンテナ仮想化」と、ゲストごとにOSを動かす「仮想マシン(VM)」の違いを理解し、プロジェクトの要件に合わせて適材適所で使い分けます。
重なって休む猫たちのように、仮想マシンも同じ物理資源を分け合います。ゲストごとの使用量だけでなく、ホスト全体の余裕と、ホストが停止した場合に影響する範囲を確認すると、台数を増やす前に必要な備えを判断できます。