連載
» 2008年02月13日 00時00分 UPDATE

実践! Xenで実現するサーバ統合(4):最短3分! ゲストOSの効率的なインストール (1/3)

仮想化ソフトウェアの「Xen」を用いてサーバ統合を実践していく手順を具体的に紹介します。第4回は多数のゲストOSを効率的にインストールする手順を紹介します(編集部)

[中嶋一樹, 高橋浩和,住商情報システム株式会社/VA Linux Systems Japan株式会社]

 今回は、前回の「仮想マシンの集約密度を決めるサイジング」で紹介した手順に沿って、1台のサーバ上に何台の仮想サーバを集約するかの密度を算出したという前提で、大量の仮想マシンを効率的にインストールする手順をご紹介します。データセンターやサーバルームで大量の仮想マシンを立ち上げる際に有効な方法です。

【関連記事】

http://www.atmarkit.co.jp/flinux/special/xen01/xen01.html
仮想化技術の大本命「Xen」を使ってみよう〜インストール & Debian環境構築編〜

http://www.atmarkit.co.jp/flinux/special/xen02/xen01.html
仮想化技術の大本命「Xen」を使ってみよう〜Xen対応カスタムカーネル構築編〜


インストールとはそもそも何ぞや

 第1回「インストールと環境構築」では、通常のゲストOSのインストール手順について説明しました。しかし、ほぼ同じ構成のゲストOSを一度に大量にインストールしたい場合、1つ1つインストールしていくやり方は効率的とはいえません。実は、仮想マシン環境でこのような作業をする場合、もっと良い手段があるのです。

 そもそもOSのインストールとは、乱暴にいえば、必要なデータ(ファイルシステム)をディスクにコピーし、いくつかの初期パラメータを設定するという作業です。インストールを行うにはインストーラを走らせなければならないように思われがちですが、実際は必要なデータがコピーできさえすれば、それでよいのです。

 この考え方でいくと、ゲストOSのインストールという作業は、非常に簡単に行うことができそうです。ホストOSから見ると、ゲストOSは基本的には単一のファイル、またはボリュームとして認識できます(注1)。

注1:厳密には、複数のファイルまたはボリュームから1つのゲストOSを構成することもできます


 ということは、基となるゲストOSのファイルまたはボリュームさえ用意できれば、あとは単純にそれをコピーするだけで必要なデータをコピーできる、つまりゲストOSをインストールできるということになります。ゲストOSインストールの具体的な手順はいろいろありますが、結局は以下の3ステップに尽きます。

  1. 基となるゲストOSのファイルまたはボリュームをコピーする
  2. ゲストOSの定義ファイルを作成する
  3. ホスト固有の設定情報(IPアドレスなど)を編集する

 それでは、上記の手順を実際にどのように進めるのかを見ていきましょう。

ファイルコピーで効率的に大量インストール

 ここでは基となるゲストOSとして、第1回で作成したデータを利用します。このゲストOSはファイルの形式で、ホストOSのファイルシステム上に/srv/vm01として存在しています。

 まず、手順1の「コピー」を行います。これはOS標準のcpコマンドで行うことができます。

# cp /srv/vm01 /srv/vm02

 ただし、ゲストOSが格納されているファイルは最低でも数Gbytesというサイズに上ることが多いため、コピーを行う際にはディスクスペースが十分に空いていることを確認してください。併せて、コピーの前にvm01を停止しておくことも確認してください。

 コピーが終われば、手順2の「定義ファイルの作成」に移ります。これも基になる定義ファイルをコピーして作成します。

 virt-installやVirtial Machine Managerで作成したゲストOSの定義ファイルは、/etc/xen/ゲストOSの識別名として保存されています。今回でいえば「/etc/xen/vm01」がそれに当たります。これをcpコマンドでコピーし、必要な項目を適宜、新しいゲストOS用に編集します。

# cp /etc/xen/vm01 /etc/xen/vm02
# vi /etc/xen/vm02

  # 新しいゲストOSの識別子を指定(uuidgenツールで取得しておく)
  uuid = "22106df4-5eb3-4382-86b4-0e858053afad"

  # 新しいゲストOSの識別名を指定
  name = "vm02"

  bootloader="/usr/bin/pygrub"
  on_poweroff = "destroy"
  on_reboot = 'restart'
  on_crash = 'restart'
  vcpus = 1
  maxmem = 512
  memory = 512
  vfb = [ ]

  # 新しいゲストOSの実体が格納されているファイルを指定
  disk = [ "tap:aio:/srv/vm02,xvda,w" ]

  # 新しいゲストOSのMACアドレスを指定
  vif = [ "mac=00:16:3e:3b:e7:a9,bridge=xenbr0" ]

 赤い部分は新しいゲストOS用に編集した項目です。

 この中で少し戸惑うのは、uuidとvifのところではないでしょうか。uuidは識別子として汎用的に使われる属性で、uuidgenというツールを用いて簡単に生成できます。

# uuidgen
018e3612-f0aa-4a7d-b4b6-aa276ca9ea60

 こうして実行するたびに、ランダムなuuid値が生成できます。

 次にMACアドレスですが、上位3オクテット(00:16:3e:)はベンダ固有の番号となっており、Xenの場合は一般的に、旧XenSourceの番号を用います。残る下3オクテットはランダムに値を生成して指定すればOKです。独自の割り当てポリシーに従って指定してもいいですし、それが面倒な場合は、以下のスクリプト(注2)を使えばuuidgenと同様の操作感でランダムにMACアドレスを生成できます。

# vi macgen.py

  #! /usr/bin/python
  # macgen.py script generates a MAC address for Xen guests

  import random
  mac = [ 0x00, 0x16, 0x3e,
  random.randint(0x00, 0x7f),
  random.randint(0x00, 0xff),
  random.randint(0x00, 0xff) ]
  print ':'.join(map(lambda x: "%02x" % x, mac))

# ./macgen.py
00:16:3e:14:f2:ab

注2:このスクリプトはまったくランダムにアドレスを生成しますので、結果的にMACアドレスに重複が出る可能性もゼロではありません。実環境で運用される際には、IPアドレス同様にMACアドレスも指定して管理することをお勧めします


 最後に、手順3の「ホスト固有の設定情報の編集」を行います。この作業を最も簡単に行うには、一度このゲストOSを起動し、そのOS上で設定を行うのがよいでしょう。

 ただし、この時点ではまだvm02の設定はvm01と全く同じ内容になっているので、vm01が起動しているとIPアドレスのバッティングが起こってしまいます。そこで、vm01は停止したままで、以下のようにvm02を起動してください。

# xm create /etc/xen/vm02 -c

 vm02が起動したら、設定を行います。ここで重要なのは「ホスト固有の設定情報」としてどのような項目があるかを知っておくことです。以下に最低限の項目を列挙します。

  • ホスト名
  • IPアドレス
  • MACアドレス

これらを設定するには、以下のファイルを編集していきます(この手順では前回までと同様、OSはRed Hat Enterprise Linux 5:RHEL 5を想定しています)。

ホスト名
# vi /etc/hosts
    127.0.0.1 vm02 localhost.localdomain localhost
    ::1 localhost6.localdomain6 localhost6

# vi /etc/sysconfig/network
    NETWORKING=yes
    NETWORKING_IPV6=no
    HOSTNAME=vm02
    GATEWAY=172.20.95.254

IPアドレス
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    IPADDR=172.20.95.102
    HWADDR=00:16:3e:3b:e7:a9
    NETMASK=255.255.248.0
    ONBOOT=yes

 ここまで設定すれば、後は再起動すればゲストOSのインストールは完了です。

 実際には、DHCPを使っている環境ならば、IPアドレスやホスト名は個々に設定する必要はありません。またMACアドレスについては、特段指定しなくとも、ゲストOS定義ファイルの設定情報を基にOSが自動的に認識してくれるので、省略しておいた方が無難です。

 逆に、元のゲストOSをある程度作り込んでいる場合には、上記のほかにも各アプリケーションの設定ファイル中のIPアドレス/ホスト名、クラスタ構成でのノードIDなど、ホスト固有の情報が存在しますので、それを設定する必要があります。


       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。