nkjmkzk.net

powered by Kazuki Nakajima

XenとZFSで仮想マシンの高速Thin-Provisioning、スナップショット/ロールバックを可能にする

一年ほど前にOracle VMとZFSを連携させて高速Thin-Provisioning、スナップショット/ロールバックを実現するovmzfsを作成&紹介しました。

しばらく放置しておりましたがSolaris 11 Expressがリリースされ、COMSTARがグッと身近になったということもありovmzfsをvirtzfsとして書き直しました。virtzfsとはXenの仮想マシンイメージをZFSに格納することによって下図のようなこと実現しその作業を自動化するツールです。





ovmzfsからの主な変更点は、下記の通り

  • Solaris 11 Express COMSTAR対応。
  • Oracle VM APIのサポートを廃止して(オイオイ)、よりシンプルに。VM Managerは不要になり、仮想サーバもOracle VM ServerではなくてもXenかつRedhat系OSなら多分動く。
  • Deduplicationを有効に。そもそもvirtzfsはVMの作成をSnapshot & Cloneで行うので容量効率は非常に良いわけですが、Deduplicationを有効にすること究極的に消費容量を圧縮します。(特に同じようなVM Templateを複数インポートしたときに効果を発揮。

それではインストール方法を。

必要なものは、NASとしてSolaris 11 Expressと、仮想サーバとしてOracle VM Server。Oracle VM Serverは別のXen環境でも代替可能だと思いますが、Oracle VM Serverがフリーでダウンロードできて実際テストもこれでやってるので一番手堅い。まずはこの2台をインストールしてネットワークをつなげてください。

次にSolaris 11 ExpressのrootからOracle VM ServerにパスワードなしでSSHログインできるように公開鍵設定をしておきます。Solaris 11 Express上でssh-keygen -t rsaなどとして/root/.ssh/id_rsa.pubを作成した上で、このファイルの中身をコピーしてOracle VM Server上の/root/.ssh/authorized_keysに張り付けます。

次にSolaris 11 ExpressにCOMSTARのパッケージをインストールしサービスを有効化します。

[root@nas]# pkg install storage-server
[root@nas]# svcadm enable stmf
[root@nas]# svcadm enable -r svc:/network/iscsi/target:default

次にGithubからモジュールをダウンロードしてSolaris 11 Express上に保存します。

ダウンロードはこちらから:https://github.com/nkjm/virtzfs

モジュールをSolaris 11 Express上で展開したらconfig.pyファイルを編集して設定を行います。設定を行うのは基本的に次の3つでOKです。

  • zfs_ip : Solaris 11 ExpressのIPアドレス。複数セグメントがある場合はOracle VM Serverから接続するIPを選択。
  • vmserver_list : Oracle VM ServerのIPアドレス。複数セグメントがある場合はSolaris 11 Expressから接続するIPを選択。また、複数のOracle VM Serverがある場合はコンマ区切りで設定 ex.["172.22.0.1","172.22.0.2"]
  • reposistory_name : 適当に。rpool/REPOSITORY_NAMEというファイルシステムをルートとしてレポジトリが形成されます。

次にvirtzfsを下記のように実行してレポジトリを初期化します。

[root@nas]# ./virtzfs init repository

成功したらインストールは完了です。

引き続きvirtzfsの利用に移ります。

virtzfs show nfsと打ってみてください。これで表示されるディレクトリをOracle VM ServerからNFSマウントするのです。例えばこんな感じ。

[root@nas]# ./virtzfs show nfs
        nas:/rpool/nkjm/nfs

[root@vmserver]# mount nas:/rpool/nkjm/nfs /srv

このディレクトリ中にはイメージファイルは作成されません。単にdomain定義ファイル(仮想マシンの設定ファイル)が作成されます。VM Server側からはこのファイルを指定してxm create [domain定義ファイル]とすることでVMを起動できます。

とはいうもののまだVMは作成されていないのでまずはVM Templateをインポートします。これも必ずしもそうである必要はありませんが、手堅いところでOracle VM Templateをダウンロードしてインポートします。VM TemplateをSolaris 11 Express上にダウロードして解凍し、下記のようにvirtzfsを実行します。

[root@nas]# ./virtzfs import template [解凍したTEMPLATEのディレクトリ]

Templateの名前を聞かれますのでそれを入力するとインポートが始まります。これにはしばらく時間がかかりますのでコーヒーでも淹れて待ちます。また、このインポートのロジックはかなり怪しいのですぐエラーになります(オイ。Templateディレクトリ中のvm.cfgのvifエントリが空だったらエラーになったりするのでその場合はvif = ['type=netfornt,bridge=xenbr0']とかを書いておくと突破できるはずです。まぁどちらにしてもdomain定義ファイルの生成ロジックは相当ヤバいので後から確認してみてください。

インポートが完了したらVMを作成できます。下記のようにvirtzfsを実行して対話的に作成を進めます。

[root@nas]# ./virtzfs create vm

複数VMを一気に作成することもできます。例え10個VMを作ったとしても作成時間はほんの数秒、必要となるディスクスペースは初期状態ではほぼゼロです。このあたりから楽しくなってきます。

VMが作成されたら起動してみます。Oracle VM Server側でxm createコマンドを発行します。

[root@vmserver]# xm create -c /srv/[VM名]/vm_cfg.py

成功すればVMが起動してコンソールが表示されるはずです。

あとはスナップショットとロールバック。スナップショットはVMが起動していても取得できます。また、VM作成時にも初期状態として勝手に一つスナップショットtが取られるようになっています。スナップショットを取るには下記のようにvirtzfsを実行して対話的に対象のVMとスナップショット名を入力します。

[root@nas]# ./virtzfs snapshot vm

取得したスナップショットtは下記のように確認できます。

[root@nas]# ./virtzfs list snapshot

ロールバックする場合はまずVMを停止します。停止した上で下記のようにvirtzfsを実行して対話的に対象のVMとロールバックしたスナップショットを選択します。

[root@nas]# ./virtzfs rollback vm

大体こんな感じです。かなりヘボいロジックも入ってますが、ハマれば中々便利です。

with one comment

Written by 中嶋 一樹

2月 1st, 2011 at 8:53 am

Posted in Uncategorized

Tagged with

One Response to 'XenとZFSで仮想マシンの高速Thin-Provisioning、スナップショット/ロールバックを可能にする'

Subscribe to comments with RSS or TrackBack to 'XenとZFSで仮想マシンの高速Thin-Provisioning、スナップショット/ロールバックを可能にする'.

  1. [...] This post was mentioned on Twitter by oerrjp bot, Kazuki Nakajima. Kazuki Nakajima said: ブログ書いた。「XenとZFSで仮想マシンの高速Thin-Provisioning、スナップショット/ロールバックを可能にする」 http://is.gd/EhfltA [...]

Leave a Reply