Browse Day: June 19, 2009

Xen on CentOS

CentOS 5.3 x86_64 に Xen を導入するためのメモです。

1. 次のコマンドで Xen をインストールする
$ sudo yum install xen

2. Dom0 のメモリ容量を最低限に利用する(通常は 512MB あれば十分)
$ sudo vi /boot/gnub/grub.conf

18c18
<       kernel /xen.gz-2.6.18-128.1.6.el5 console=com1,vga com1=57600,8n1

>       kernel /xen.gz-2.6.18-128.1.6.el5 console=com1,vga com1=57600,8n1 dom0_mem=512M

3. 再起動して、Xen Kenel で起動する

4. free コマンドでメモリ容量が 512MB になっていることを確認する

$ free -m
total       used       free     shared    buffers     cached
Mem:         512        507          4          0         46        249
-/+ buffers/cache:      211        300
Swap:       8095          0       8095

5. 念のため、次のコマンドで Dom0 が起動していることを確認する

$ sudo /usr/sbin/xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0      512     4 r—–   2439.7

6. Dom0 で bonding しているときは、/etc/xen/xend-config.sxp を次のようになおしてから Dom0 を再起動する

(network-script ‘network-bridge-bonding bridge=xenbr0 netdev=bond0’)

ちなみに netdev を指定しないとブリッジ用のデバイス xenbr0 ができないので注意する。
この設定をすると Dom0 が起動したときに /etc/xen/scripts/network-bridge-bonding が実行される仕組みになっている。

/etc/xen/xend-config.sxp の network-bridge-bonding で指定できる変数の意味は、次のとおりです。
– brdige: 作られるブリッジのデバイス名(デフォルト xenbrX)
– netdev: ブリッジにつなぐ実デバイス(デフォルト eth0)

ここで Xen Dom0 のメモリ容量を変更すると、実際に搭載されている物理メモリの容量を見ることができないのか知りたい。知ることができれば、Xen DomU のメモリ容量などをあわせて使われていない物理メモリ容量を計算することができそう。

Xen の基本コマンド /usr/sbin/xm の使い方

ドメイン一覧を見る: xm list
ドメインOに戻る方法: Ctrl+]
ドメインUへ接続: xm console <仮想マシン名>

Xen DomU を削除する方法

コマンドはないなので、設定ファイルをイメージファイルを削除する(しかないと思う)。

sudo rm -f /etc/xen/仮想マシン名
sudo rm -f /var/lib/xen/images/仮想マシン名.img

DomU で内部専用の eth1 を作る

/etc/xen/仮想マシン名 の vif 行を、次のように変更する。

vif = [ “mac=00:16:3e:33:63:10,bridge=xenbr0″,”mac=00:16:3e:75:4a:51,bridge=virbr1” ]

mac アドレスは、http://www.asahi-net.or.jp/~aa4t-nngk/codes/xenmacgen.py.txt にあるスクリプトを使用して生成すると便利、重複しないように注意する。

/etc/xen/xend-config.sxp の network-script を次のように変更する

(network-script ‘network-bridge-bonding-custom bridge=xenbr0 netdev=bond0’)

/etc/xen/scripts/network-bridge-bonding-custom を、次の内容でパーミッション 755 で作成する。

#!/bin/sh
dir=$(dirname $0)
libvirtbr=virbr1

# Some clean-up of iptables rules inserted by libvirtd.
iptables -D INPUT -i $libvirtbr -p udp -m udp –dport 53 -j ACCEPT &>/dev/null
iptables -D INPUT -i $libvirtbr -p tcp -m tcp –dport 53 -j ACCEPT &>/dev/null
iptables -D INPUT -i $libvirtbr -p udp -m udp –dport 67 -j ACCEPT &>/dev/null
iptables -D INPUT -i $libvirtbr -p tcp -m tcp –dport 67 -j ACCEPT &>/dev/null

${dir}/network-bridge-bonding “$@”

echo 0 >/proc/sys/net/ipv4/ip_forward

/etc/virnet/virnet1.xml を、次の内容で作成する。

virnet1

virtnet1 の設定を有効にする。

# virsh net-define /etc/virnet/virnet1.xml
# virsh net-autostart virnet1

“default” ブリッジ(virbr0)の自動起動を無効にする。

# virsh net-destroy default
# virsh net-autostart default –disable

マシン(Dom0)を再起動して、ifconfig して xenbr0 と virbr1 があることを確認する。

参考資料