ログ日記

作業ログと日記とメモ

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


Xen

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

Debianパッケージのバージョンは2.1なので。


あとはドキュメントを参考に各種設定をする。
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
ここを参考に。