Novaデータを共有ストレージに保存して live migration !!

風邪を引いて更新を滞らせたものの、技術メモだけは溜まっていくこのごろ。

live migration でVMを停止せずにHost間を移動させる、仮想環境の醍醐味から復活するとしましょう。



Cephをマウント

live migration 機能はNovaデータの共有化が必須となります。貧乏なのでお金をかける場面じゃないので、共有ストレージはCephを利用することとします。マウントの仕方は前記事を参照してください。

このように全ComputeNodeでマウントしておいてください。


Novaデータ移動

一度Novaを停止し、Cephにデータ構造をコピーします。
ここではVMは無い状態で行っているので1台でコピーしているだけですが、既にVMがある場合は全て停止し、各ComputeNodeからCephに移すことになります。

また、イメージキャッシュ置き場となる _base ディレクトリですが、この値は instances_path の配下に必ず入るようになっており、フルパス指定ができません。そして、_base ディレクトリを全ComputeNodeで共有すると、競合が発生するという問題があり(@ishikawa84gのツイート)、もし共有ストレージ上に置く場合は base_dir_name=_base_$my_ip や base_dir_name=_base_$host としてHostごとに分ける必要があります。

が、そもそもCeph上に保存しているGlanceイメージを、持ってきてまたCeph上にキャッシュ保存しても意味ないと考え、ここでは各Hostにある大きいパーティション(ex: /data)に保存することにしました。若干汚らしいですが、そのためにCephの _base はローカルディスクへのシンボリックリンクを置いています。


Novaデータの所有者確認

共有ストレージにデータをコピーすると、あるサーバからファイルを見ると nova ユーザが所有者になっていても、違うサーバから見ると異なる所有者になっているかもしれません。なので、全ComputeNodeから確認してみます。

もし、食い違っている場合は、全サーバでユーザIDを統一する必要があります。これをやらないと、novaデータの操作でエラーが発生します。

OpenStackインストール前にユーザ/グループ作成

IDを調整すると、各データディレクトリの所有者も変更する必要が出るため、できればOpenStackインストール前に重要なユーザ/グループを作成しておいた方が楽です。

インストール後に調整する場合

/etc/passwd, /etc/group を見ながら、usermod, groupmod でIDを統一したら、データディレクトリの所有者も修正する必要があります。修正対象はこのような感じです。


設定変更

state_path を書き換えます。instances_path と base_dir_name はデフォで記述されてなかったので、明記しておきました。

/etc/nova/nova.conf

novaを起動します。
起動したらVMの動作確認を行なってください。


live migration用の設定

live migration機能を使うために、いくつか専用の設定を入れる必要があります。
  • Configuring Migrations – OpenStack Compute Administration Guide – Grizzly, 2013.1

  • libvirtd 設定

    まずは livevirtd のご機嫌をとります。

    /etc/libvirt/libvirtd.conf

    /etc/default/libvirt-bin

    再起動します。

    nova 設定

    完全に新しい項目を追加します。
    [DEFAULT] なので、QUOTA の下にでも入れておきます。

    /etc/nova/nova.conf

    再起動します。

    hosts 設定

    nova設定の live_migration_uri の %s のところには自動的にHostOSの hostname が入り、live migrationの通信時に使用されます。よって、hostnameで接続できる必要があるため、/etc/hosts に書いておきます。(ここまで hosts を使ってなかったのでできれば止めたいところですが!)

    /etc/hosts


    live migration実行

    VMの所有Hostを確認したら、移動先のHostを指定して live migration を発動します。
    せっかくなので、発動時に ping, ssh, Cinderボリュームアタッチ をしておきつつやると面白いですが、素晴らしいことに全て切断無しにHostを移動してくれます。



    これで、live migration自体は確認出来たのですが、VMのルートイメージをCephマウント上に置くと、肝心のVM動作でディスクsyncエラーとか出るようになり、結局諦めて各Hostのローカルディスクに保存することに・・・

    CephはCinderボリュームとして使う分にはベンチマークとってもエラーが出ないのですが、マウントしてしまうとアレなようで。apt-get update ですらディスクエラーが出たので、もっとまともなストレージでやれればな、という感じで未導入(というか解除した)の情報ですが、まぁ楽しかったのでよしとします!