コンテンツにスキップ

XENの基本設定

Debian squeeze
本記事は 2011 年 7 月に旧サイト(オンプレミス環境)で公開した記録の復元です。内容は当時のまま掲載しています。本記事には Amazon アソシエイトのアフィリエイトリンクを含みます。

目次

  1. インストール
  2. GRUBの修正
  3. ネットワークブリッジの設定
  4. xen-tools
  5. DOM-Uの設定
  6. save/restore動作の修正
  7. ゲストOS(DOM-U)の自動起動化
  8. ゲストOSとしてDebian squeezeを3台追加
  9. 多段ネットワークの構築
  10. TIPS

サーバ環境

製品名Dell OPTIPLEX SX280
CPUIntel Pentium4 CPU 2.8GHz
メモリ3GB(PC2-5300U(1GB) x 1枚、PC2-5300U(2G) x 1枚)
ストレージIBM SATA 160GB

インストール

まず最初にこの本の前半半分の基本的なところを読んでXENの概要を抑えてから、実機検証とネットを参考に進めました。この本はCentOS,Debian,openSUSEのそれぞれのディストリビューションにおける、XENのインストール、初期設定、ストレージ、ネットワークといった基本から、iSCSIの利用、マイグレーション、セキュリティなどの応用まで載っています。分厚い割りにサクッと読めるため、XENの概要を短時間で知りたい人にはお勧めです。ただし、私が試した限り本書そのままとはいかない箇所も多いため、色々と試行錯誤は必要になりました。

root@labo:~# uname -r
2.6.32-5-686

でカーネルのバージョンを調べてから、

xen-linux-system-[kernelのバージョン]-xen-686

xen-tools

の二つをインストールします。

root@labo:~# aptitude install xen-linux-system-2.6.32-5-xen-686
以下の新規パッケージがインストールされます:
  bridge-utils{a} firmware-linux-free{a} gawk{a} libc6-xen{a} libxenstore3.0{a} linux-image-2.6.32-5-xen-686{a} python2.5{a}
  python2.5-minimal{a} xen-hypervisor-4.0-i386{a} xen-linux-system-2.6.32-5-xen-686 xen-utils-4.0{a} xen-utils-common{a}
  xenstore-utils{a}
以下のパッケージが更新されます:
  linux-base
更新: 1 個、新規インストール: 13 個、削除: 0 個、保留: 85 個。
36.2 MB のアーカイブを取得する必要があります。展開後に 105 MB のディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] Y

...

root@labo:~# aptitude install xen-tools
以下の新規パッケージがインストールされます:
  debootstrap{a} libconfig-inifiles-perl{a} libexpect-perl{a} libfile-slurp-perl{a} libio-pty-perl{a} libio-stty-perl{a}
  librpmbuild1{a} libterm-size-perl{a} libtext-template-perl{a} rinse{a} rpm{a} xen-tools
更新: 0 個、新規インストール: 12 個、削除: 0 個、保留: 85 個。
2,201 kB のアーカイブを取得する必要があります。展開後に 4,809 kB のディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] Y

...

GRUBの修正

grubには以下がエントリされています。

root@labo:/boot/grub# grep menuentry /boot/grub/grub.cfg
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-xen-686' --class debian --class gnu-linux --class gnu --class os {
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-xen-686 (recovery mode)' --class debian --class gnu-linux --class gnu --class os {
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686' --class debian --class gnu-linux --class gnu --class os {
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686 (recovery mode)' --class debian --class gnu-linux --class gnu --class os {
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-xen-686 and XEN 4.0-i386' --class debian --class gnu-linux --class gnu --class os --class xen {
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-xen-686 and XEN 4.0-i386 (recovery mode)' --class debian --class gnu-linux --class gnu --class os --class xen {

reboot後、起動時に上記''で囲まれた箇所が選択肢として表示されます。

一番上の'Debian GNU/Linux, with Linux 2.6.32-5-xen-686'を選択して起動後、xm listを確認すると以下のようになりました。

root@labo:~# xm list
WARNING!  Can't find hypervisor information in sysfs!
Error: Unable to connect to xend: No such file or directory. Is xend running?

外れです。再度rebootして上記'Debian GNU/Linux, with Linux 2.6.32-5-xen-686 and XEN 4.0-i386'を選択して立ち上げます。

立ち上がり後にXENの起動を確認します。

root@labo:~# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  2896     1     r-----     24.9

ホストOS(Domain-0)が起動しました。

上記の通り、デフォルトだとDebian GNU/Linux, with Linux 2.6.32-5-xen-686が立ち上がってしまうので、20_linux_xenが10_linuxよりも先に来るようにGRUBを修正します。

root@labo:~# cd /etc/grub.d/
root@labo:/etc/grub.d# ls
00_header  05_debian_theme  10_linux  20_linux_xen  30_os-prober  40_custom  41_custom  README
root@labo:/etc/grub.d# mv 10_linux 50_linux
root@labo:/etc/grub.d# update-grub2
Generating grub.cfg ...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-2.6.32-5-xen-686
Found initrd image: /boot/initrd.img-2.6.32-5-xen-686
Found linux image: /boot/vmlinuz-2.6.32-5-xen-686
Found initrd image: /boot/initrd.img-2.6.32-5-xen-686
Found linux image: /boot/vmlinuz-2.6.32-5-686
Found initrd image: /boot/initrd.img-2.6.32-5-686
done

ネットワークブリッジの設定

xendの設定ファイルを修正します。

書式についてはVA LINUXさんのサイトが参考になります。

ネットワークを有効にするため、以下の箇所のコメントアウトを外します。

root@labo:~# vi /etc/xen/xend-config.sxp
(network-script network-bridge)

xendを再起動します。

root@labo:~# /etc/init.d/xend restart
Restarting Xen daemons: xend xend.

xen-tools

xen-tools.confファイルの修正

root@labo:~# vi /etc/xen-tools/xen-tools.conf

# lvm = vg0
lvm = labo      LVMを使用するため、lvm = ボリュームグループ名 の設定をしています。

#size   = 4Gb      # Disk image size.
#memory = 128Mb    # Memory size
#swap   = 128Mb    # Swap size

size   = 9Gb      # Disk image size.
memory = 256Mb    # Memory size
swap   = 256Mb    # Swap size

dist   = `xt-guess-suite-and-mirror --suite` # Default distribution to install.     ※1

# gateway    = 192.168.1.1
# netmask    = 255.255.255.0
# broadcast  = 192.168.1.255

gateway    = 192.168.1.1
netmask    = 255.255.255.0
broadcast  = 192.168.1.255

kernel = /boot/vmlinuz-`uname -r`           ※2
initrd = /boot/initrd.img-`uname -r`        ※2

# arch = [i386|amd64]
arch = i386

mirror = `xt-guess-suite-and-mirror --mirror`     ※3

上記、強調箇所については以下より問題ありません。

※1

root@labo:~# xt-guess-suite-and-mirror --suite
squeeze

※2

root@labo:~# uname -r
2.6.32-5-xen-686

root@labo:~# ls /boot/
System.map-2.6.32-5-686      config-2.6.32-5-686      grub                     initrd.img-2.6.32-5-xen-686  vmlinuz-2.6.32-5-686      xen-4.0-i386.gz
System.map-2.6.32-5-xen-686  config-2.6.32-5-xen-686  initrd.img-2.6.32-5-686  lost+found                   vmlinuz-2.6.32-5-xen-686

※3

root@labo:~# xt-guess-suite-and-mirror --mirror
http://ftp.jp.debian.org/debian/

xen-create-imageの実行

ゲストOSとしてDebianを動かすのであれば、xen-create-imageで簡単に作成できます。

xen-create-imageコマンドを実施すると、上記xen-tools.confの設定に従ってIPアドレスの設定等が行われ、ホスト単位の設定ファイルが生成されます。

root@labo:~# xen-create-image --hostname labo1 --ip 192.168.1.112 --passwd

...

Creating Xen configuration file
Done
Setting up root password
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
All done

--passwdを付けない場合、DOM-U起動時にrootパスワード不要でログインできるという記事がたくさんありましたが、私の環境ではログインできませんでしたので、--passwdオプションを付与しています。

--passwdを付与すると、最後にrootのpasswordを質問されるため、二回投入します。

ボリュームグループのsizeを見てみると、Free PE / Sizeが72.33 GiBから63.08 GiB(-9G)に減ったことが確認できました。

xen-create-image実行前
root@labo:~# vgdisplay
  --- Volume group ---
  VG Name               labo
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  34
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                6
  Open LV               6
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               148.81 GiB
  PE Size               4.00 MiB
  Total PE              38095
  Alloc PE / Size       19579 / 76.48 GiB
  Free  PE / Size       18516 / 72.33 GiB
  VG UUID               trKeJB-vmUV-kH9Y-Udkt-22rN-2dLf-jI3jGp

xen-create-image実行後
root@labo:~# vgdisplay
  --- Volume group ---
  VG Name               labo
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  36
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                8
  Open LV               6
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               148.81 GiB
  PE Size               4.00 MiB
  Total PE              38095
  Alloc PE / Size       21947 / 85.73 GiB
  Free  PE / Size       16148 / 63.08 GiB
  VG UUID               trKeJB-vmUV-kH9Y-Udkt-22rN-2dLf-jI3jGp

DOM-Uの設定

xen-create-image実施後、DOM-Uの設定ファイル(/etc/xen/[DOM-Uのhostname].cfg)が作成されます。

富士山は世界遺産さんのサイト鯖缶Blogさんのサイトを参考に一番下のextraを追加しました。

root@labo:~# vi /etc/xen/labo1.cfg

kernel      = '/boot/vmlinuz-2.6.32-5-xen-686'
ramdisk     = '/boot/initrd.img-2.6.32-5-xen-686'

vcpus       = '1'
memory      = '256'

#
#  Disk device(s).
#
root        = '/dev/xvda2 ro'
disk        = [
                  'phy:/dev/labo/labo1-disk,xvda2,w',
                  'phy:/dev/labo/labo1-swap,xvda1,w',
              ]


#
#  Physical volumes
#


#
#  Hostname
#
name        = 'labo1'

#
#  Networking
#
vif         = [ 'ip=192.168.1.112,mac=00:16:3E:61:EF:E0' ]

#
#  Behaviour
#
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'
extra = 'xencons=tty clocksource=jiffie'

vifのMACアドレスは自動生成されました。

上位24bitの00:16:3EはXENで共通で使用される値です。

下位24bitはランダムで生成されました。

修正が終わったら、DOM-Uを起動します。起動には以下のコマンドを実施します。

root@labo:~# xm create labo1.cfg -c

しばらくするとDOM-Uのログイン画面が表示されるので、rootでログインします。私の環境ではxen-create-imageで--passwdを指定したため、rootのパスワードを入力する必要があります。

...

Debian GNU/Linux 6.0 labo1 hvc0

labo1 login: root
Password:
Linux labo1 2.6.32-5-xen-686 #1 SMP Mon Jun 13 09:07:50 UTC 2011 i686

root@labo1:~#

起動時点ですでにDOM-0の外部への疎通性も問題ありません。

root@labo1:~# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_req=1 ttl=64 time=1.54 ms
64 bytes from 192.168.1.1: icmp_req=2 ttl=64 time=0.789 ms
^C
--- 192.168.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.789/1.167/1.546/0.380 ms

初期状態ではrootでしかログインできないため、ユーザを追加します。

# useradd -u 1000 -g 4 -d /home/user001 -s /bin/bash -m user001

# more /etc/passwd
user001:x:1000:4::/home/user001:/bin/bash

# ls /home
user001

# usermod -G adm user001

# more /etc/group
adm:x:4:user001

# passwd user001
Enter new UNIX password:[パスワードを投入]
Retype new UNIX password:[パスワードを投入]
passwd: password updated successfully

外部からSSHにて上記で作成したユーザでアクセスが可能なことを確認します。

その他、細かい設定は通常のDebianの設定と同じため割愛します。

DOM-Uの立ち上がりの際に、Error: Driver 'pcspkr' is already registered, abortingというエラーが出ていました。

corbieのブログではalsa-utilsを入れて/etc/modprobe.d/alsa-base-blacklistに“blacklist snd-pcsp”が書き込まれれば解消されるとありましたが、私の環境ではすでに上記条件を満たしているにもかかわらず出ているため、気持ち悪いですが様子見します。

Ctr + ] を押せばDOM-0に戻れます。DOM-Uが立ち上がっている状態でDOM-0の状態を確認します。

・論理ボリューム

root@labo:~# lvdisplay

・・・

  --- Logical volume ---
  LV Name                /dev/labo/labo1-swap
  VG Name                labo
  LV UUID                B8CEIZ-I772-BIVF-JFiO-MRqf-Hqwh-P3Lfbt
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                256.00 MiB
  Current LE             64
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:12

  --- Logical volume ---
  LV Name                /dev/labo/labo1-disk
  VG Name                labo
  LV UUID                LNplBs-9vek-hYkV-Piox-JtbP-JjBM-fgrBUj
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                9.00 GiB
  Current LE             2304
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:13

/dev/labo/labo1-swap と /dev/labo/labo1-disk が作成されました。

・ネットワーク

DOM-0では、DOM-Uとのインタフェースであるvif1.0が追加されています。

root@labo:~# ifconfig -a
eth0      Link encap:イーサネット  ハードウェアアドレス 00:0f:1f:e9:8a:52
          inetアドレス:192.168.1.111 ブロードキャスト:192.168.1.255  マスク:255.255.255.0
          inet6アドレス: fe80::20f:1fff:fee9:8a52/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:501 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:368 エラー:0 損失:0 オーバラン:0 キャリア:0
      衝突(Collisions):0 TXキュー長:0
          RXバイト:49838 (48.6 KiB)  TXバイト:47181 (46.0 KiB)

eth1      Link encap:イーサネット  ハードウェアアドレス 00:10:60:db:04:24
          inet6アドレス: fe80::210:60ff:fedb:424/64 範囲:リンク
          UP BROADCAST MULTICAST  MTU:1500  メトリック:1
          RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:1 エラー:0 損失:0 オーバラン:0 キャリア:0
      衝突(Collisions):0 TXキュー長:1000
          RXバイト:0 (0.0 B)  TXバイト:90 (90.0 B)

lo        Link encap:ローカルループバック
          inetアドレス:127.0.0.1 マスク:255.0.0.0
          inet6アドレス: ::1/128 範囲:ホスト
          UP LOOPBACK RUNNING  MTU:16436  メトリック:1
          RXパケット:69 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:69 エラー:0 損失:0 オーバラン:0 キャリア:0
      衝突(Collisions):0 TXキュー長:0
          RXバイト:4662 (4.5 KiB)  TXバイト:4662 (4.5 KiB)

pan0      Link encap:イーサネット  ハードウェアアドレス 6e:1a:df:79:6d:c2
          BROADCAST MULTICAST  MTU:1500  メトリック:1
          RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0
      衝突(Collisions):0 TXキュー長:0
          RXバイト:0 (0.0 B)  TXバイト:0 (0.0 B)

peth0     Link encap:イーサネット  ハードウェアアドレス 00:0f:1f:e9:8a:52
          inet6アドレス: fe80::20f:1fff:fee9:8a52/64 範囲:リンク
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  メトリック:1
          RXパケット:490 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:395 エラー:0 損失:0 オーバラン:0 キャリア:0
      衝突(Collisions):0 TXキュー長:1000
          RXバイト:59161 (57.7 KiB)  TXバイト:53531 (52.2 KiB)
          割り込み:16

vif1.0    Link encap:イーサネット  ハードウェアアドレス fe:ff:ff:ff:ff:ff
          inet6アドレス: fe80::fcff:ffff:feff:ffff/64 範囲:リンク
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  メトリック:1
          RXパケット:6 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:29 エラー:0 損失:3 オーバラン:0 キャリア:0
      衝突(Collisions):0 TXキュー長:32
          RXバイト:384 (384.0 B)  TXバイト:6964 (6.8 KiB)

DOM-Uではeth0で見えています。

root@labo1:~# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:16:3e:61:ef:e0
          inet addr:192.168.1.112  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::216:3eff:fe61:efe0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:35 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:6633 (6.4 KiB)  TX bytes:706 (706.0 B)
          Interrupt:247

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

/etc/xen/xend-config.sxpにnetwork-bridgeを設定した場合、DOM-0にxenbr0が作成されると想定していましたが、見当たりませんでした。

DOM-Uから外部には疎通できたのでブリッジは機能しているようですが、ifconfigで見えなくても良いのでしょうか?

bridge-utilsを入れているので、brctlコマンドで仮想ブリッジの状態を確認してみます(bridge-utilsについてはいますぐ実践! Linuxシステム管理が参考になります。

root@labo:~# brctl show
bridge name     bridge id               STP enabled     interfaces
eth0            8000.000f1fe98a52       no              peth0
                                                        vif1.0
pan0            8000.000000000000       no
tmpbridge               8000.000000000000       no

eth0がブリッジになっています。

同様の事例が無いかネットで調べてみたところ、Fedoraの話ですがStray Penguinさんのサイトの「Fedora Core 8における仮想ネットワーク」に記載がありました。

eth0ブリッジ(これまでのxenbr0相当)
peth0実際に外部と接続しているIF
vif1.0DOM-Uと接続しているIF

eth0 = xenbr0ということで、つじつまが合いました。

pan0というブリッジも作成されています。少し調べてみたのですが分かりませんでした。

海外のFedoraフォーラム(libvirt do not create virbr0)でも同様に悩まれているようでしたが、動作に影響は無さそうなので放置します。

DOM-Uの詳細設定やネットワークのチューニングについては別途まとめます。

save/restore動作の修正

デフォルトの設定にて、DOM-Uを立ち上げた状態でDOM-0をreloadしてみたところ、reload前には存在しなかった/var/lib/xen/saveディレクトリが作成されていました。

そしてDOM-0の起動時には「Restoring Xen domains: labo1.」と表示され、DOM-Uも自動起動されていました。

上記のようにsave/restoreをしないようにするためには、以下の二箇所を修正します。

root@labo:~# vi /etc/default/xendomains

## Type: string
## Default: /var/lib/xen/save
#
# Directory to save running domains to when the system (dom0) is
# shut down. Will also be used to restore domains from if # XENDOMAINS_RESTORE
# is set (see below). Leave empty to disable domain saving on shutdown
# (e.g. because you rather shut domains down).
# If domain saving does succeed, SHUTDOWN will not be executed.
#
XENDOMAINS_SAVE=/var/lib/xen/save
XENDOMAINS_SAVE=

## Type: boolean
## Default: true
#
# This variable determines whether saved domains from XENDOMAINS_SAVE
# will be restored on system startup.
#
XENDOMAINS_RESTORE=true
XENDOMAINS_RESTORE=false

上記修正を加えて再度reloadしてみたところ、DOM-0の起動時にDOM-Uは停止していました。

ocean-netさんのサイトを参考にしました。

ゲストOS(DOM-U)の自動起動

/etc/xen/autoにDOM-Uの設定ファイルへのシンボリックリンクを置くことで、DOM-0起動時にDOM-Uも起動するようになります。

もめす屋さんのサイトを参考にさせて頂きました。

root@labo:~# ls /etc/xen/
labo1.cfg  scripts  xend-config.sxp  xend-pci-permissive.sxp  xend-pci-quirks.sxp
root@labo:~# mkdir /etc/xen/auto
root@labo:~# ln -s /etc/xen/labo1.cfg /etc/xen/auto/
root@labo:~# ls -al /etc/xen/auto/
合計 2
drwxr-xr-x 2 root root 1024 2011-07-29 18:26 .
drwxr-xr-x 4 root root 1024 2011-07-29 18:25 ..
lrwxrwxrwx 1 root root   18 2011-07-29 18:26 labo1.cfg -> /etc/xen/labo1.cfg

ゲストOS(DOM-U)を3台追加

ゲストOSとしてDebian squeezeを三台追加してみます。

あわせて、追加した際のメモリ使用量についても確認します。

2台目

ゲストOS追加前のメモリ状態

root@labo:~# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  2772     1     r-----     92.5
labo1                                        1   256     1     -b----      3.6

2台目ゲストOSの追加

root@labo:~# xen-create-image --hostname labo2 --ip 192.168.1.115 --passwd
root@labo:~# vi /etc/xen/labo2.cfg
extra = 'xencons=tty clocksource=jiffie' を末尾に追加

root@labo:~# xm create labo2.cfg -c

ゲストOS追加後のメモリ状態

root@labo:~# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  2520     1     r-----    332.2
labo1                                        1   256     1     -b----      3.7
labo2                                        2   256     1     -b----      3.1

DOM-0のメモリが252M減少しています。

自動起動の設定

ln -s /etc/xen/labo2.cfg /etc/xen/auto/

3台目

以下同様に、

root@labo:~# xen-create-image --hostname labo3 --ip 192.168.1.116 --passwd
root@labo:~# vi /etc/xen/labo3.cfg
root@labo:~# xm create labo3.cfg -c
root@labo:~# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  2264     1     r-----    576.8
labo1                                        1   256     1     -b----      3.8
labo2                                        2   256     1     -b----      3.2
labo3                                        3   256     1     -b----      2.9
root@labo:~# ln -s /etc/xen/labo3.cfg /etc/xen/auto/

4台目

root@labo:~# xen-create-image --hostname labo4 --ip 192.168.1.117 --passwd
root@labo:~# vi /etc/xen/labo4.cfg
root@labo:~# xm create labo4.cfg -c
root@labo:~# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  2015     1     r-----    830.7
labo1                                        1   256     1     -b----      3.9
labo2                                        2   256     1     -b----      3.3
labo3                                        3   256     1     -b----      3.1
labo4                                        4   256     1     -b----      2.8
root@labo:~# ln -s /etc/xen/labo4.cfg /etc/xen/auto/

一台立ち上げるごとに、DOM-0のメモリが250~256減少しています。

ぺたぺたしてってくださいではたくさんDOM-Uを立ち上げたらエラーが出たのでDOM-0のメモリを絞るような記事がありどうしようかとも思いましたが、今のところ私の環境ではエラーは出ていないのでこのままで行きたいと思います。

多段ネットワークの構築

Colorless Mindさんのサイトを参考に多段構成のネットワークを組んでみます。

先ほど少し触れたように、私の環境ではデフォルトのブリッジがxenbr0ではなくeth0なので、少し注意が必要です。

ネットワーク構成

---------------------------------- 192.168.1.0/24 (ブリッジ名:eth0) = 外部LAN
         |               |
         |               |
         | .114          | .115
    +---------+     +---------+
    |  labo1  |     |  labo2  |
    +---------+     +---------+
         | .1            | .2 
         |               |
         |               |
 --------------------------------- 192.168.2.0/24 (ブリッジ名:lanbr0) = 内部LAN
         |               |
         |               |
         | .101          | .102
    +---------+     +---------+
    |  labo3  |     |  labo4  |
    +---------+     +---------+

LVSとか試すかもしれないので外部との接続性のある前段のeth0側を2台(labo1,2)にしています。

後段の2台(labo3,4)は外部からはアクセスできないようになっています。

もう一段作ればロードバランサ→Webサーバ→DBサーバといった構成も作れると思います。

新たなブリッジの作成

新たに作成するスクリプト(mybridge)を指定します。

vi /etc/xen/xend-config.sxp

#(network-script network-bridge)
(network-script mybridge)

上記で指定したスクリプトを作成します。

デフォルトのブリッジであるeth0と新たなブリッジであるlanbr0をオプション指定してnetwork-bridgeスクリプトを起動するようにします。

root@labo:~# vi /etc/xen/scripts/mybridge

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

${dir}/network-bridge "$@" bridge=eth0 netdev=eth0 antispoof=yes
${dir}/network-bridge "$@" bridge=lanbr0 netdev=dummy0 antispoof=yes

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

実行権限の付与とxendスクリプトの再起動を行います。

root@labo:~# chmod 755 /etc/xen/scripts/mybridge
root@labo:~# /etc/init.d/xend restart
Restarting Xen daemons: xend xend.

DOM-Uのネットワーク設定

続いて各DOM-UのVIF設定を行います。MACアドレスは分かりやすいように連番にしておきます。

前段のlabo1,2は外部LANと内部LANの2 IFがあるのに対し、後段のlabo3,4は内部LAN用の1 IFしか作成しないようにします。

root@labo:~# vi /etc/xen/labo1.cfg

#
#  Networking
#
#vif         = [ 'ip=192.168.1.114,mac=00:16:3E:61:EF:E0' ]
vif          = [
                "mac=00:16:3E:00:00:01,bridge=eth0",
                "mac=00:16:3E:00:00:02,bridge=lanbr0",
               ]


root@labo:~# vi /etc/xen/labo2.cfg

#
#  Networking
#
#vif         = [ 'ip=192.168.1.115,mac=00:16:3E:9F:7C:2A' ]
vif          = [
                "mac=00:16:3E:00:00:03,bridge=eth0",
                "mac=00:16:3E:00:00:04,bridge=lanbr0",
               ]

root@labo:~# vi /etc/xen/labo3.cfg

#
#  Networking
#
#vif         = [ 'ip=192.168.1.116,mac=00:16:3E:E1:19:74' ]
vif         = [ 'mac=00:16:3E:00:00:05,bridge=lanbr0' ]


root@labo:~# vi /etc/xen/labo4.cfg

#
#  Networking
#
#vif         = [ 'ip=192.168.1.117,mac=00:16:3E:6E:97:CA' ]
vif         = [ 'mac=00:16:3E:00:00:06,bridge=lanbr0' ]

次にDOM-UのIPアドレスを設定します。上のcfgファイルで指定しても良さそうですが、確認の意味でもそれぞれのDOM-Uにて設定してみました。

・labo1

root@labo:~#  xm create labo1.cfg -c

起動後にIFを修正します。

root@labo1:~# vi /etc/network/interfaces

auto eth1
iface eth1 inet static
 address 192.168.2.1
 netmask 255.255.255.0
  broadcast 192.168.2.255

上記を追加しました。

結果的には以下のようなアドレス状態になりました。

root@labo1:~# /etc/init.d/networking restart

root@labo1:~# ifconfig -a
eth0      Link encap:イーサネット  ハードウェアアドレス 00:16:3e:00:00:01
          inetアドレス:192.168.1.114 ブロードキャスト:192.168.1.255  マスク:255.255.255.0
          inet6アドレス: fe80::216:3eff:fe00:1/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1

eth1      Link encap:イーサネット  ハードウェアアドレス 00:16:3e:00:00:02
          inetアドレス:192.168.2.1 ブロードキャスト:192.168.2.255  マスク:255.255.255.0
          inet6アドレス: fe80::216:3eff:fe00:2/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1

続けてlabo2~4も同様に設定していきます。設定変更後のネットワーク状態のみを載せておます。

・labo2

root@labo2:~# ifconfig -a
eth0      Link encap:イーサネット  ハードウェアアドレス 00:16:3e:00:00:03
          inetアドレス:192.168.1.115 ブロードキャスト:192.168.1.255  マスク:255.255.255.0
          inet6アドレス: fe80::216:3eff:fe00:3/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1

eth1      Link encap:イーサネット  ハードウェアアドレス 00:16:3e:00:00:04
          inetアドレス:192.168.2.2 ブロードキャスト:192.168.2.255  マスク:255.255.255.0
          inet6アドレス: fe80::216:3eff:fe00:4/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1

・labo3

root@labo3:~# ifconfig -a
eth0      Link encap:イーサネット  ハードウェアアドレス 00:16:3e:00:00:05
          inetアドレス:192.168.2.101 ブロードキャスト:192.168.2.255  マスク:255.255.255.0
          inet6アドレス: fe80::216:3eff:fe00:5/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1

・labo4

root@labo4:~# ifconfig -a
eth0      Link encap:イーサネット  ハードウェアアドレス 00:16:3e:00:00:06
          inetアドレス:192.168.2.102 ブロードキャスト:192.168.2.255  マスク:255.255.255.0
          inet6アドレス: fe80::216:3eff:fe00:6/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1

疎通確認

外部のWindows端末から192.168.2.0/24に対してPingが疎通しないことを確認します。

・外部Windows端末

C:\Windows\system32>ping 192.168.2.101

192.168.2.101 に ping を送信しています 32 バイトのデータ:
Ctrl+C
^C

labo1にてフォーワーディングを有効にするとPingが疎通することを確認します。

・labo1

root@labo1:~# echo 1 > /proc/sys/net/ipv4/ip_forward

・外部Windows端末

C:\Windows\system32>ping 192.168.2.101

192.168.2.101 に ping を送信しています 32 バイトのデータ:
192.168.2.101 からの応答: バイト数 =32 時間 =2ms TTL=63

TIPS

設定ファイルを修正した際に変更を反映する方法のまとめ

①/etc/xen/xend-config.sxpを修正した場合

xendをrestartする

root@labo:~# /etc/init.d/xend restart
Restarting Xen daemons: xend xend.

②/etc/xen/[DOM-Uのドメイン名].cfgを修正した場合

そのままDOM-Uを起動するだけでOK

root@labo:~# xm create labo1.cfg -c

③/etc/xen-tools/xen-tools.confを修正した場合

xen-create-imageコマンドで再度DOM-Uの設定ファイルを生成するため、以下を実施します。

まず、DOM-Uを落とします。

root@labo:~# xm shutdown labo1

次に設定ファイルを削除します。

root@labo:~# rm /etc/xen/labo1.cfg

論理ボリュームを削除します。

root@labo:~# lvremove /dev/labo/labo1-disk
Do you really want to remove active logical volume labo1-disk? [y/n]: y
  Logical volume "labo1-disk" successfully removed
root@labo:~# lvremove /dev/labo/labo1-swap
Do you really want to remove active logical volume labo1-swap? [y/n]: y
  Logical volume "labo1-swap" successfully removed

再度、xen-create-imageを実施します。

root@labo:~# xen-create-image --hostname labo1 --ip 192.168.1.112 --passwd

XMコマンド

XMコマンドの使い方については以下を参照

http://www.atmarkit.co.jp/flinux/special/xen02/xen03.html

Amazonアソシエイトリンク