仮想サーバのお引越し | 雲の上はいつも青空

雲の上はいつも青空

不思議な経歴をもつエンジニア!?の徒然なブログです。
お仕事関係の話が多いと思いますが、コメントとかもらえると中の人はとても喜びます(^O^)/

Xenで動いている仮想サーバのメンテナンスについて、少しTipsを書いてみます。
Xenに限らずサーバの仮想化技術には、ライブマイグレーションという非常に面白くて素晴らしい技術があります。
つまり、DomainU(ゲストOS)を停止しないで、別のホスト機へ移動させる技術です。
※詳しくはここ(ITproのページ)を眺めてください。

この機能があれば、物理的にサーバをメンテナンスしたり、Domain0のOSを再起動したりする場合でも、DomeinUを停止する必要がなく、非常に便利です。
ただし、ライブマイグレーションを使うには異なるDomain0(ホストOS)から共有されたストレージにアクセスできる必要があるので、通常のスタンドアロンのサーバではこの機能は使えません。

余談ですが、個人的にはSAN(ストレージ・エリア・ネットワーク)は特定の分野にだけ残り、一般的なサーバ間ではiSCSIが本命なるとにらんでいます。 Debianの場合、現行のetchではサポートが不完全(イニシエータのdebパッケージはあるが、ターゲットのパッケージがない)ですが、次期バージョンのlennyではフルサポートになる予定です。
つまりXenのDomain0を搭載するホスト機が複数フロントエンドで動き、その後ろでiSCSI接続された共有ストレージが稼動し、仮想サーバのHDDイメージはこの共有ストレージに置かれるという形態です。


さて、話を戻しましょう。
そういう共有ストレージがない場合の仮想サーバの移動ですが、思っているよりは簡単です。

/home/xen/domain/ 直下の、仮想サーバ名のフォルダーを総て移動したいホスト機へコピーする。
#scp -r /home/xen/domain/rickdom newserver:/home/xen/domain
※NICが100Mのタイプですと、50GBをコピーするのに約1時間半程度かかります(約10Mbyte/sec)。

次に、scp /etc/xen/rickdom.cfg newserver:/etc/xen で、起動用のコンフィグファイルをコピーします。
#
# Configuration file for the Xen instance rickdom, created on
# Fri Oct 24 14:59:52 2008.
#
#
# Kernel + memory size
#
kernel = '/boot/vmlinuz-2.6.18-6-xen-686'
ramdisk = '/boot/initrd.img-2.6.18-6-xen-686'
memory = '512'
#
# Disk device(s).
#
root = '/dev/sda1 ro'
disk = [ 'file:/home/xen/domains/rickdom/disk.img,sda1,w',
'file:/home/xen/domains/rickdom/swap.img,sda2,w' ]
#
# Hostname
#
name = 'rickdom'
#
# Networking
#
vif = [ 'ip=192.168.64.55' ]
#
# Behaviour
#
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'

そんなに中身は難しいことが書いてあるわけではありません。
読むと、ふむふむという感じです。
memoryのところを変えると、起動したときの仮想メモリーの容量を変化させられますが、ホスト機のメモリーをよく見てむやみに増やしてはいけません。
#xm list
というコマンド叩いて、メモリーの割当状況を確認してくださいね。


仮想HDDのイメージと起動用コンフィグのコピーが済みましたら、新しいホスト機にログインし
#xm create /etc/xen/rickdom
と、仮想サーバを起動してください。
何事もなく起動できれば良いのですが、ダメなときもあります。

その場合は、すぐに /var/log/syslog をチェックしてください。
Failed to find an unused loop deviceという、エラーメッセージが出ていると、これは仮想HDDへアクセスするリソースが不足しているという意味です。
私の場合は、これに引っかかりました。

このエラーを回避するには、一部設定を変更しホスト機を再起動する必要があります。
#echo "options loop max_loop=64" > /etc/modprobe.d/loop
これで、新しくloopというファイルを作ってください。 再起動した際にこのパラメータが読み込まれます。

ホスト機を再起動するには、いろんな方法がありますが、一番簡単な方法はホスト機上でshutdown -r nowを実行する事です。
この場合、そのホスト機で稼動している仮想サーバは総て自動的にシャットダウンされ、ホスト機が再起動後、自動的に立ち上がります。

ホスト機が立ち上がり、ゲストで動いている仮想サーバの稼動が安定した頃を見計らって(Load Ave.が落ち着いたら)、先ほどダメだった仮想サーバの起動コマンド:
#xm create /etc/xen/rickdom
をもう一度入力してみてください。 今度はちゃんと起動するはずです。


時間はかかりますが、単にファイルをコピーするだけでサーバの移動が出来るので、保守性は高いと感じます。
また、仮想サーバはハードウェアの制限からは開放されていますから、CPU,NIC,RAIDコントローラ等、物理環境が違うサーバへ持っていってもちゃんと起動します。
これも保守する側からいうとありがたいです。