技術

XenServerゲストのCentOSをKVMに移転する

最近個人的にXenServerの微妙感が増してきました。
冷静な判断によるものというよりは、ほとんど感情的なものなんですが。(違うものを試すための口実といいますか…)

まだKVMに移行するかどうかは決めてません。
ロードマップ的にはそろそろXenServerの次のバージョンのbetaの発表がある頃だと思うので、その内容次第です。

しかしとにかくKVMに移行するのにどのくらい手間が掛かるかは見積もっときたいので、XenServerで使ってる準仮想化なCentOSゲストをひとつだけ完全仮想化なKVMへ移転してみました。

KVMホストは今回新たにFedora 17をセットアップして構築したものを利用。
移転を試したCentOSゲストのバージョンは5.8、仮想ディスク容量は30GB、パーティション構成は多分デフォルトのまま、仮想NICはブリッジモードで1つだけ割り当ててる状態、準仮想化カーネルを使用、多分最小限インストールしたもの(つまりGUI無し)に、よくあるLAMP環境+αを構築したもので、1〜2年ぐらい動いてたものです。

KVMと書いてますけど、他の完全仮想化な環境や、物理マシンへにも同じ手順で多分移せるはずです。

1. 移転先(KVM)にCentOSをインストール

仮想ディスク容量と仮想NICの数を移転元ゲストに合わせます。
MACアドレスはコピーしません。
移転元ゲストと同じバージョン(CentOS 5.8)のインストールディスクから起動し、最小限インストールを通常通り実行します。
固定IPの設定は行わずDHCPを利用します。

2. 移転元ゲスト、移転先ゲストにrootログイン

それぞれにrootログインし、selinuxをoffにしときます。

[root@localhost ~]# setenforce permissive

ここで移転先ゲストのIPアドレスをifconfigなどで調べてメモっときます。

3. 移転元ゲストからrsyncで(ほぼ)全てのファイルを移転先ゲストに転送

移転元ゲストで実行

[root@localhost ~]# rsync -rtlzvogpHAX --delete --exclude /dev/ --exclude /proc/ --exclude /sys/ --exclude /var/lock/ --exclude ifcfg* --exclude ssh_host_* --exclude fstab --exclude /boot/ --exclude /lib/modules/ --exclude /etc/inittab --exclude /etc/sysconfig/hwconf --block-size=4096 -e ssh / root@転送先ゲストのIPアドレス:/
[root@localhost ~]# reboot

移転先のIPは絶対に間違えないようにしてください。
rsyncで /var/run を除外してないので、rsync直後のrebootによるシャットダウン中にいくつかエラーが出ますが、多分問題ないと思います。
rsyncで /var/run を除外するようにすると、再起動後MySQLなどが自動起動に失敗したりします。(まぁその場合はpidファイルの置き場所を作ってあげればいいだけです。)

4. 移転先ゲストの再起動後のネットワーク接続の確認

多分eth0が無効になってるはずなので、有効化します。

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost ~]# mv ifcfg-eth0.bak ifcfg-eth0
[root@localhost ~]# service network restart

一度これをやっておけば次からは再起動しても大丈夫なはずです。
この手順が必要なくなることを狙って一応rsyncで ifcfg* と /etc/sysconfig/hwconf を除外するようにしてるんですが、まだ足りないみたいです。
あとは、移転元が固定IPを使ってたら停止させた後、同じIPを移転先に設定すれば今までと同じように使えるはずです。

まとめ

今回の手順は、どんな環境でも使えるってわけではないですが、使える環境ならかなり楽なんじゃないかと思います。
また3の手順を移転元の稼働中に一度行い、各サービスを停止してからもう一度実行すればダウンタイムを大幅に減らしつつ移転する事も可能です。

今回の手順のキモはrsyncのオプションにあります。
準仮想化と完全仮想化ではカーネルが違うので、そのあたりに関係する部分(/boot, /lib/modules)を除外するようにしています。
また、 /etc/inittab にもXen用のコンソールを使う設定が追加されてるのでそれも除外するようにしています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です



※画像をクリックして別の画像を表示

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください