Xenライブマイグレーション失敗の原因を探るログ
http://d.hatena.ne.jp/n314/20130226/1361901155
Xenのライブマイグレーションのエラー原因探索編。
もう一度データセンター側にプライマリ&セカンダリ指定してインスタンスを作り、マイグレーションを往復してみたけれどエラーは起きなかった。
なんか深みにハマっている。
メーリングリストを見つけた。
つまみ読み。
別にマイグレーションとは関係なさそうだけれども。
I just tried d-i 6beta1 and booted Squeeeze and its 2.6.32 kernel for
the first time on my usual server hardware (Dell R410).(snip)
It seems very prone to crashing at any APIC/ACPI bugs, of
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=603632
which there seem to be quite a bit of in both Dell and IBM.
今回失敗したのもDell R410だねぇ…。
このスレの内容は直接は関係なさそうだが、軽く調べた程度では原因は特定できなさそうってことと、アップデートで直ってる可能性があるってことが予想できる。
古いから関係ないけど
http://xen.1045712.n5.nabble.com/DomU-crashes-after-live-migration-td3238441.html
lennyのxenカーネルはバグだらけ?
# ls /var/cache/apt/archives/linux-image-2.6.32-5* /var/cache/apt/archives/linux-image-2.6.32-5-xen-amd64_2.6.32-34squeeze1_amd64.deb
なんか32-34ってのが古い気がする。最近入れた方は48だったような…。
コマンドを調べてみると、apt-cache showを使うらしい。aptitudeでもあるような気がするが
# apt-cache show linux-image-2.6.32-5-xen-amd64 |grep Version Version: 2.6.32-48 Version: 2.6.32-48squeeze1 Version: 2.6.32-34squeeze1
ちょっと近づいた気がする。
データセンター側のカーネルは最近入れたから 2.6.32-48 だ。移動の方向ではなくてdomUを起動するノードのカーネルバージョンが関係している可能性が高くなってきた。
起動しているカーネルのバージョン詳細ってどうやって見るんだろう。unameだと2.6.32-5としか出ない。
gnt-cluster command "apt-cache show linux-image-2.6.32-5-xen-amd64 |grep Version" # 各ノードで ls /var/cache/apt/archives/linux-image-*
再現しない…。
ある程度CPUが動いていないとダメなのかもしれないので、社内サーバーをマイグレーションで往復してみる。
- 2.6.32-48で起動中
- migration往復
- エラーなし
- migrationでカーネルが古いノードに移動
- poweroff => インスタンス起動 (2.6.32-35)
- migration往復
カーネルパニック再現した!
念のため2.6.32-48でマイグレーションを2往復してマイグレーション中に書き込み処理などをやってみたがエラーなし。
希望的な推測をすると、2.6.32-35から2.6.32-48の間のバグ修正で今回の事例が入っていたという可能性が高くなった。
これで解決?
結局、今回の環境では移動自体は無停止で出来そうだがカーネルアップデートのために一度は再起動しないといけない。
Debian squeezeでGanetiを使ってXen + DRBD
仮想化環境管理ツールのGanetiがDebianのパッケージになってるよ!ということで。
本家は http://code.google.com/p/ganeti/ ここ。
日本語情報はほとんどないのね。
http://d.hatena.ne.jp/naruoga/20081201/1228140473
http://trac.mizzy.org/public/blog?year=2007&month=11
では、OSインストール後から。
※ 6/22追記:インストール時のinitramfs作成で汎用ではなく目的別にしていたら、xenがディスクを認識しなかった。
ベースシステム。
aptitude install ssh cat > /etc/sysctl.d/windowscale.conf net.ipv4.tcp_rmem = 4096 65536 65536 net.ipv4.tcp_wmem = 4096 65536 65536 sysctl -p /etc/sysctl.d/windowscale.conf
aptitude install xen-linux-system xen-tools # reboot
DRBD
aptitude install drbd8-utils
DRBDはカーネルに含まれるようになったらしい。
find /lib/modules/ -name "drbd.ko" /lib/modules/2.6.32-5-xen-amd64/kernel/drivers/block/drbd/drbd.ko /lib/modules/2.6.32-5-amd64/kernel/drivers/block/drbd/drbd.ko
Ganeti
http://docs.ganeti.org/ganeti/2.1/html/install.html
aptitude install ganeti2
あとはドキュメントを参考に各種設定をする。
grubのオプション
http://groups.google.com/group/ganeti/browse_thread/thread/a18979bdd00f6461
ここを参考に。
/etc/default/grub
#GRUB_CMDLINE_XEN_KERNEL=dom0_mem=1024M maxcpus=1 GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=1024M maxcpus=1"
6/28 追記: この指定は間違っていた。
GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=1024M" GRUB_CMDLINE_LINUX_DEFAULT="maxcpus=1"
こう書いてupdate-grub2を実行すると、grub.cfgが
multiboot /boot/xen-4.0-amd64.gz placeholder dom0_mem=1024M module /boot/vmlinuz-2.6.32-5-xen-amd64 placeholder root=〜〜 ro maxcpus=1
このように生成される。
xenカーネルで起動後にtopや/proc/cpuinfoでCPUが一つだけになっており、xm vcpu-list では複数のCPUが見えたらOK。
root@node1:~# gnt-instance modify -B vcpus=4 instance1 ... root@node1:~# xm vcpu-list Name ID VCPU CPU State Time(s) CPU Affinity Domain-0 0 0 1 r-- 34.3 any cpu Domain-0 0 1 - --p 0.0 any cpu Domain-0 0 2 - --p 0.0 any cpu Domain-0 0 3 - --p 0.0 any cpu Domain-0 0 4 - --p 0.0 any cpu Domain-0 0 5 - --p 0.0 any cpu Domain-0 0 6 - --p 0.0 any cpu Domain-0 0 7 - --p 0.0 any cpu instance1.example.com 3 0 7 -b- 26.1 any cpu instance1.example.com 3 1 2 -b- 13.1 any cpu instance1.example.com 3 2 0 -b- 10.5 any cpu instance1.example.com 3 3 5 -b- 5.5 any cpu
あと
gnt-instance modify -H cpu_mask=<cpu-pinning-info> <instance>http://docs.ganeti.org/ganeti/master/html/design-cpu-pinning.html
このcpu pinningを試したくて
ganetiのバージョンを2.4.2に上げてみたが
root@node1:~# gnt-instance modify -B vcpus=4 -H cpu_mask=1:2:3:4 test1 Unhandled Ganeti error: Parameter 'cpu_mask' is not supported
無理なようだ。
xm vcpu-pin で一時的に固定はできるが、gnt-instance rebootすると割り当てが解除されている。
CPUを固定しなくても空いているCPUから割り振られているようなので、vCPU数が実CPU数を超えなければ特に問題はない?一つのCPUに対して仮想CPUを複数割り当てると体感速度が極端に落ちてコンソールが引っかかるような動きになったのでそういう構成はナシのつもり。CPU数以上に仮想マシンが欲しいときはバーチャルドメインで頑張る方向で。
追記ここまで
cd /etc/grub.d/ mv 10_linux 21_linux update-grub2 reboot
片方のマシンでgnt-cluster init や gnt-node addを実行する。
その後instanceを作成。
http://serverfault.com/questions/242311/ganeti-fails-to-install-debootstrap-instances-on-squeeze
ここがかなりのハマりどころ。
gnt-cluster modify --hypervisor-parameter xen-pvm:root_path='/dev/xvda1' gnt-instance add -n nodea1.example.com:nodeb1.example.com -t drbd \ --disk 0:size=512M -B memory=1G,vcpus=2 -o debootstrap+default \ -H xen-pvm:kernel_path=/boot/vmlinuz-2.6-xenU,initrd_path=/boot/initrd-2.6-xenU instance1.example.com
ディスクサイズは大きく取るとかなり時間を食うので、最初にinstance作成が成功するのを確認してからじっくり考える。
何度か試行錯誤したり再インストールしたら動いたので間違いがあるかも。
ganetiの最新を使うためにソースから入れる場合は
http://stable-link.com/?p=417
ここを参考に。
GUIを入れてみる
vi /etc/xen-tools/xen-tools.conf dist = etch mkdir /var/xen/domains/xen02.example.com xen-create-image --size=8G --ip=192.168.1.102 --hostname=xen02.example.com mv /etc/xen/xen02.example.com.cfg /etc/xen/auto/ xm create /etc/xen/auto/xen02.example.com.cfg xm console xen02.example.com apt-get install locales dpkg-reconfigure locales 日本語をインストール tasksel デスクトップにチェック
・・・・。
かなりあれこれいじってみたけど出来ない・・。検索したらgdmを立ち上げてvncで繋ぐとか普通に書いてるけどgdmが立ち上がらんし・・。保留にしようか。。
# 追記
悔しいからsargeに戻してroleを使ってみる。。
xen-create-image --size=8G --ip=192.168.1.103 --hostname=xen03.example.com --role=gdm
一応変なデスクトップは出たが・・重い・・・。なんでだろう。VMwareよりかなり重い?
で、role.d/gdm を見たらsarge用だとばっかり思ってたんだけど・・・・etchでも使えるじゃん!どういう仕組みなんだろ・・・?
etchでもいちいちデスクトップをtaskselで選択して・・ってやらなくて良かったのね。
# 更に追記
やっとetchでログイン画面が出るようになった。。なんでデフォルトの/etc/gdm/gdm.confファイルは空っぽなんだろうね。
apt-get install gnome-core vi /etc/gdm/gdm.conf [servers] 0=VNC [server-VNC] name=VNC server command=/usr/bin/Xvnc -geometry 800x600 -depth 24 flexible=true /etc/init.d/gdm start
日本語を入れるの忘れてた。
apt-get install locales dpkg-reconfigure locales
あとはanthyを入れたり細々した設定を。
・・・ってxenを本格的に使うわけじゃないけどね。今やっとけば必要になった時に役に立つことを祈って。
Debian(etch)でxenをインストール
apt-get install xen-linux-system-2.6.18-3-xen-686 xen-tools libc6-xen reboot
apt-getでgrubの設定までやってくれる。
取り敢えずDebian流のやり方を見る。
apt-get install perl-doc xen-create-image --manual
vi /etc/xen-tools/xen-tools.conf dir = /var/xen debootstrap = 1 passwd = 1 kernel = /boot/vmlinuz-2.6.18-4-xen-686 initrd = /boot/initrd.img-2.6.18-4-xen-686 mkdir -p /var/xen/domains/xen01.example.com mkdir -p /etc/xen-tools/skel/root/.ssh chmod -R 700 /etc/xen-tools/skel/root/ cat /root/.ssh/authorized_keys /root/.ssh/id_rsa.pub >> /etc/xen-tools/skel/root/.ssh/authorized_keys chmod 644 /etc/xen-tools/skel/root/.ssh/authorized_keys xen-create-image --ip=192.168.1.101 --hostname=xen01.example.com
固まったように感じるがプロセスはちゃんと動いているっぽい。
tail -f /var/log/xen-tools/xen01.example.com.log
で何が行われているか分かる。
4gb seg fixupとか出まくり・・・: ぺたぺたしてってください(^^;
これと同じ現象が・・・しかも解決しなかった・・。
mkdir /etc/xen/auto mv /etc/xen/xen01.example.com /etc/xen/auto/ /etc/init.d/xendomains reload
エラーで起動できなかった・・。
http://w3.doshisha.ac.jp/~kueda/index.php?Debian%E3%81%ABXen を参考に
apt-get install bridge-utils vi /etc/xen/xend-config.sxp (network-script network-bridge) /etc/init.d/xend restart /etc/init.d/xendomains reload # 接続 xm console xen01.example.com
おぉぉ。
なんて簡単なんだ!
Debianすげーな。