Google Code Prettify

2010年3月3日

libvirtd を終了時にGuestOSを保存する方法

libvirt+QEMU/KVM を使った仮想化の運用を続けていると、どうしても気になる事がある。

libvirtd の設定には、自動起動するGuestVMは登録できるのだが、 終了時には有無を言わさず GuestVM を強制終了してしまう事である。

自前で libvirt (0.7.2)を入れているので今のバージョンでは何らかのサポートが入ってかもしれない。 ただ「libvirt: Releases」を見る限り入って無さそうである。

それにQEMU/KVMドライバだけの挙動かもしれない。他とドライバ(Xen等々)だと状況は違うかもしれない。

まぁ。。。そのうち何らかの対応が入るんだろうなぁ。。。

そうは言っても、ホストマシンを終了するときイチイチ確認するのは難儀である(とくにACPIサポートが悪く電源断しないGuestOSタイプとかねぇ)。

さて、QEMUにはVMの状態を保存復帰(save/restore)がサポートされている。コイツとストレージ共有を組み合わせると、ライブマイグレーションが一丁上がりになるので、つい何年か前に小躍りしてる人がたくさんいた気がする。

まぁ普通にサスペンド/レジュームの仕組みなので、コイツをなんとか上手く使うスクリプトを組んでみた。

指定する項目は3つで、それぞれスクリプト冒頭に書かれている。

libvirt-start-stop-vm.sh

...
SAVEVMDIR="/var/lib/libvirt/save"            # 保存するVMの置き場所
LISTVM_SHUTDOWN="linux_sid linux_fedora"     # 終了時 shutdown するもの
LISTVM_SAVE="freebsd_cur netbsd_cur solaris" # 終了時 save するもの
...

やってる事は単純で virsh コマンドを叩いてるだけである。 ただ、LISTVM_なんたらで指定し無かったり、15分以内に正常に電源断しない奴は、 最後に念のためsaveしてある。

コイツを、/etc/init.d/libvirt-binのスクリプトの必要な部分に入れ込むだけ。

うん〜、これでマシンを立ち上げると前回マシンを落とした時の状態のままのSolaris10/FreeBSDが立ち上がるようになった。。。しかし、時刻が合わん。なんか、GuestOSが共通に取れるイベントの仕組みがあるのかなぁ。。。SNMPとかで叩くんかなぁ。。。SSHとかで叩くんかいなぁ。。。順当に cron でntp引っ張ってくるが原始的でいいのかぁ。。。でも、時刻合わせの精度は低いし、常時CPUをちょっとだけ使うのはなぁ。。。ぶつぶつ

あんまり、すっきりしないが個人で使う分には用は足りそうである。

2009年12月9日

VIA EPIA EN のその後

VIA EPIA EN12000 を24時間運転してサーバ運用してる。 以前は、時々ハングアップしていたのため、保険で watchdog 設定をしていたのだが、 奇妙なことに安定動作している。

# uptime 
 16:32:08 up 48 days, 21:24,  1 user,  load average: 0.06, 0.07, 0.01

取り敢えず、1ヶ月半くらい連続運転している。

はて?
なにが効果あったのかな?

環境としては、

  • VIA-EN12000EG / VIA C7 1.2GHz
  • DDR2-533 1G (IO-DATA DX533-1G)
  • PATA SSD 32G (TS32GSSD25-M)
  • SATA HDD 1Tx2 (WDC WD10EADS-00L/WDC WD10EADS-00M)
  • Debian lenny の標準的なパッケージをほぼ使ってる。
TimeMachine の バックアップ先になっており、一時間ぐらいの間隔で バースト的に Network I/O や Disk I/O が同時に発生する状況にある。

取り敢えずは、今のところ安定している。。。

まぁ、ネットワーク負荷を計測するときには、 負荷をかけるとハングアップすることが多々あった。 追っかけてみようかと思って保留して、 計測後の環境ではハングアップが全く無くなったので放置してしまった。

計測前と計測後には大きく2点の作業をしてある。

メモリのフリーページの調節

運良くコンソールにメッセージが出てきたとき「lockup」とかは見た記憶がある。 別のメッセージだったかもしれない。 色々調べて、「メモリーのフリーページの不足ぎみが NICドライバ内でのlockupを引き起こす」とか適当に結論づけて、 次の設定をした気がする

# echo "vm.min_free_kbytes = 8192" >> /etc/sysctl.conf

ただ、もっと良い設定があって次のようなスクリプトを自前のバックアップ処理の後に入れている

## pagecache clear & dirty page & inode cache clear
/sbin/sysctl -w vm.drop_caches=3
#
/sbin/sysctl -w vm.drop_caches=0

この設定は、結構気分の問題な気がする。

NIC ドライバの変更

計測中も、ベンダ提供のものか、自前で修正したものを使っている。 計測後は、自前で修正したものを使って長期運用している。。。ってその為に改良したしなぁ。

Debian 標準カーネルに含まれているvia-velocityドライバはバースト的なI/Oにはlockupするような、気がする。

まとめ

人生で初めて家の電灯の安定器のコンデンサが破裂していく音を聞いた。

「しゅるしゅるしゅる〜〜、ぷぅん」って。

VIA-EN12000EG のコンデンサが減ったった時が、VIA とのお別れですね

2009年10月21日

Blogger の「続きを読む」機能

ここ2〜3ヶ月くらいで、Blogger にクラウドタグと「続きを読む」機能が追加された。

すばらしい!

あとは、関連記事のリスト表示の対応が入れば、全部 Blogger 内でまかなえるのかなぁ。。。

ただし、ちょっとだけ問題がでた。

今使っている投稿アプリ ecto では 投稿後に再度 Blogger からデータを再取得してその内容を保存するような動作をしている。

このとき、Blogger から流れてくるデータでは 「<!-- more -->」が「<a name='more'></a>」に置換されてしまっている。

そのままで jump break と同等に機能すれば良いのだが、どうもそうでは無いらしい。

再度修正したいときは、都度確認し修正が必要のようである。

ecto の使い方がわるいんかなぁ。。。

久しぶりの投稿

かなり期間が空いてしまったが、ブログを再開してみようと思う。 2013年3月が直前の投稿だったが、頻繁に更新していた時期が 2011年11月までなので、8年間ぶりとなる。 8年間なにをしていたのかと言えば、2回転職して未だにIT技術者の職を得ている。 その...