クラウドコンピューティング環境において、データの信頼性と復元性は重要な課題です。Apache CloudStackは、仮想化プラットフォームの柔軟性とスケーラビリティを提供するオープンソースのインフラストラクチャとして注目されています。特に、KVM(Kernel-based Virtual Machine)プラグインにおけるスナップショット機能は、データ保護や災害復舊に不可欠な技術です。本記事では、CloudStackのKVMプラグインにおけるインクリメンタルスナップショットの実裝メカニズム、技術的課題、および実用性について詳しく解説します。
スナップショットは、特定の時點におけるボリューム(volume)の狀態を記録する技術です。このデータは通常、セカンダリストレージに保存され、他のボリュームやテンプレートの作成に利用されます。重要な點は、スナップショットが仮想マシン(VM)のスナップショットとは異なる點です。VMスナップショットは、メモリやディスク全體をコピーするため、バックアップとしての用途には適していません。
従來のスナップショット方式では、仮想マシンのメモリとすべてのボリュームをコピーするため、ストレージ空間の浪費やパフォーマンス低下、サービス中斷が発生します。この方式は、現代のクラウド環境では不適切とされています。
現在のKVMプラグインでは、目標ボリュームに対してオーバレイ(overlay)層を構築します。仮想マシンがデータを書き込む際、オーバレイ層に直接書き込み、元のボリュームに影響を與えません。スナップショット後、オーバレイ層のデータをセカンダリストレージにコピーし、元のボリュームと統合します。停止中の仮想マシンでは、直接ボリュームをコピーすることが可能です。
頻繁なスナップショット作成により、重複データが発生し、ストレージ空間を浪費する可能性があります。特に、毎日のスナップショットでは、データの冗長性が顕著になります。
libvirt APIのbegin backup
機能とQEMU 2形式を組み合わせることで、インクリメンタルスナップショットを実現します。この技術では、**バックイングチェーン(Backing Chains)**を用いて変更ブロック(dirty blocks)を追跡し、**ビットマップ(Bit Map)**で変更データを記録します。初期スナップショットは完全なコピーとして作成され、以降は差分データを記録します。
CloudStackでは、スナップショットチェーンの長さが16に制限されています。17番目のスナップショット作成時に、自動的に新しい完全スナップショットが作成され、チェーンの長さを制御します。
スナップショットに依存する子スナップショットが存在する場合、削除時にデータを即座に削除せず、すべての子スナップショットが削除されるのを待つ方式を採用しています。
スナップショットを復元する際には、バックイングチェーンを単一ボリュームに変換するAPIを用いることで、簡潔な操作が可能です。
begin backup
APIを実行し、チェックポイント(checkpoint)を指定して変更データを追跡します。停止中の仮想マシンでは、仮想の「ダミーボリューム」を用いてAPI呼び出しを実行します。
スナップショットの削除には、依存する子スナップショットが存在しないことを確認する必要があります。復元時には、バックイングチェーンの整合性を維持する必要があります。
インクリメンタルスナップショット機能は、libvirt 7.6とKVM 6.1以上のバージョンをサポートしています。
現在は、ファイルベースのストレージ(例:ローカルストレージ、Ceph RBD、LVMなど)のみがサポートされており、NFSなどの他のストレージタイプは未対応です。
原子的ディスクスナップショット(Atomic Disc Snapshots)の導入により、すべてのボリュームを同期してスナップショットを実行する機能が追加される予定です。また、VMwareの原生インクリメンタルスナップショット機能をサポートすることで、CloudStackがKVM、VMware、XenServerの三大仮想化プラットフォームをカバーする予定です。
CloudStackでは、スナップショットがデフォルトでセカンダリストレージにコピーされるため、バックアップとして扱われます。ただし、複製設定が未有効の場合、スナップショットは同じストレージプールに保存されるため、誤解を招く可能性があります。
Apache CloudStackのKVMプラグインにおけるインクリメンタルスナップショットは、ストレージ効率とパフォーマンスの向上を実現する重要な技術です。ただし、チェーン長さの制限やストレージタイプの制約など、課題も存在します。今後の拡張により、より柔軟な運用が可能になると期待されます。実裝時には、ソフトウェアバージョンやストレージ構成を慎重に検討することが重要です。