実践Linux
CentOS5/6.5        CentOS5/6.5 目次へ  TOP(HOME)へ

Xen・サーバー仮想化(CentOS5の場合)   2010年7月





ここでは、333.333.333.210マシンにXen仮想化を用いて333.333.333.212マシン.を追加してみる。

xenはCentOS5導入時に選択しておいたのでインストール済み。
サービスをスタートさせておく。

xenでは、ホストOSをハイパバイザ、ゲストOSをドメインと呼ぶ。
ドメインのうち、ドメイン0は特別なドメインでハイパバイザの起動とともに標準で準備される管理用のゲストOS、それ以外のドメインをドメインUと呼ぶ。

準仮想化
ドメインU上のゲストOSは、ハイパバイザコールという命令を使って、ハイパバイザに対してハードウェア処理を依頼する。準仮想化では、オーバーヘッドを最小限に抑えることができ、効率よくリソースを利用できる。しかし、ゲストOSは、xen仮想マシン環境に対応しハイパバイザコールを利用できるように実装されている必要がある。
完全仮想化
ドメイン0がハードウェアの機能をエミュレーションする。ドメインU上のゲストOSからは物理サーバー上で動作しているのとまったく同等の条件に見える。完全仮想化ではxenを意識せずに開発されたwindows等様々なOSを動作させることができる。ただし、オーバーヘッドが大きくなる。
xenではエミュレーションのオーバーヘッドによる性能劣化を抑えるため、Intel VT-xまたはAMD Pacifica hardware virtualizationの機能を利用するように設計されている。xen完全仮想化では、これらの機能をサポートしたハードウェアが必要となる。

ゲストOSのインストール(準仮想化)
●自分でインストール用のレポジトリを用意する場合
まず、インストールするOSのレポジトリを用意しておく。このレポジトリにはNFS、FTP、HTTPのいずれかでアクセスできる必要がある。ここでは、Apache HTTPサーバを利用してレポジトリを用意する。
前提としてすでにApache HTTPサーバがインストールされて正しく稼働しているものとし、そのドキュメントルートは/var/www/htmlであるとする。

まず、要件に合ったインストールディスクまたはisoファイルを用意しておく。
ドキュメントルート以下に、今回使用するOSのレポジトリを保存するディレクトリを作成する。
# mkdir /var/www/html/guestos

インストールディスクの場合は、メディアの内容をすべてここににコピー。
また、容量が問題となる場合は、シッボリックリンクを張るのもよい。
# ln -s '/media/xxxxx i386 DVD' /var/www/html/guestos (''で囲んだのは名称にスペースが入っているとき)
ただしリソースが/var/www/html以外の場所にあり、このままではSELinuxがアクセス許可を出さないので、いったんSELinuxを無効にする。

isoファイルを使用する場合は、ファイルを任意のディレクトリにループバックデバイスとしてマウントしてコピー。
ループバック・デバイスとは
一般的なファイルを,あたかもハード・ディスクなどのブロック型デバイスであるかのように扱うための機能です。パソコン上でイメージ・ファイルを直接操作したい場合などに使います。「ループ・デバイス」とも呼ばれます。
例えば,ハード・ディスクのイメージ・ファイル(ディスク・イメージ)を任意のディレクトリにマウントするだけで,イメージ・ファイル内にある個別のファイルの保存・参照・削除,ディレクトリの作成・削除,ファイルやディレクトリに対するアクセス権限の設定や変更など,通常のファイルと同様の操作が行えます。

# mount -o loop /download/xxxxx.iso /mnt
# cp -a /mnt/* /var/www/html/guestos
# umount /mnt

HTTPサーバの設定
http://localhost/guestosで/var/www/html/guestosディレクトリにアクセスしたときその一覧が取得できるように設定しておく(取得できない場合に設定)。
/etc/httpd/conf/httpd.confファイルの編集
<Directory /var/www/html/guestos>
Options Indexes
</Directory>
Apacheを再起動すれば、レポジトリの用意はOK。

インストール元の場所として、http://localhost/guestos/を指定することになる。

●インターネット上で直接インストールする場所を指定する場合
インストール要件を満たすOSを探すのはめんどうなので、インターネットより確実な以下の場所を指定してインストールするほうが早い。
例 http://mirror.centos.org/centos-5/5.4/os/i386/

●GUIによるゲストOSのインストール
アプリケーション→システムツール→仮想マネージャー(または# virt-manager)
localhostをダブルクリックしてドメイン0をスタート。
下の「新規」ボタン。

システム名  system1
仮想化の方法  準仮想化(完全仮想化にマシンが対応してなければこれしか選択できない)
インストールメディアのURL  http://mirror.centos.org/centos-5/5.4/os/i386/
ストレージ領域の割当  シンプルファイルを選択
            場所  /var/lib/xen/images/system1.img
            サイズ  5000M
            「仮想ディスク全体に割り当てる」がチェックされた状態はそのまま
ネットワーク接続  共有物理装置 ブリッジ
メモリとCPU  メモリ 512  CPU 1
(通常のGUIによるインストール開始)

GUIによる管理
Xen内蔵のVNCを用いてGUIを実現している。
アプリケーション→システムツール→仮想マネージャー(または# virt-manager)
localhostをダブルクリックしてドメイン0をスタート。
同様にドメインUもダブルクリックしてコンソール画面が開いたら、「実行」でスタート。
場合によっては、# startx
画像解像度は800×600しか得られない。
ポインターを解放するには、ctrl+Altキー。

注意
ドメインを削除したとき、設定ファイルだけ削除される=ディスクイメージなどは削除されない(手動で削除)。
/var/lib/xeen/images/system1.img等を削除。

ゲストOSの基本設定
作業は、とりあえずvirt-managernのVNCコンソールで、当該ゲストドメインにログオンして行う。

ネットワーク
/etc/hosts ファイルの編集
127.0.0.1 localhost.localdomain localhost
333.333.333.212 system1.my-dom.xxx system1

VNCサーバの整備
Xen組込のVNCサーバとvirt-manager付属のVNCクライアントでもゲストのGUI操作は可能だが、反応が鈍く、解像度も 800x600 を超えられないため実用に耐えない。そこで、単体のVNCサーバーを使えるよう整備する。

@/etc/sysconfig/vncservers の編集
VNCSERVERS="2:user01"
VNCSERVERARGS[2]="-geometry 1024x768 -depth 16 -nolisten tcp -IdleTimeout 600 -nohttpd"

AゲストOS に目的の UNIX ユーザでログインした状態で、VNCパスワードファイルを作る。
VNC のパスワードとシステム上の UNIXパスワードは管理が全く別。
~/.vnc/passwd ファイルができる。

$ vncpasswd
Password: <タイプ>
Verify: <再タイプ>

B~/.vnc/ 下にその他の必要ファイルを作らせるため、VNCサーバを起動させ、すぐに終了させる。
~/.vnc/xstartup ファイルの編集
 #!/bin/sh

 unset SESSION_MANAGER <--アンコメントして有効化
 exec /etc/X11/xinit/xinitrc <--アンコメントして有効化

  [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
 [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
 xsetroot -solid grey
 vncconfig -iconic &
 xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &

windowsVNCクライアントからの接続は、「SSHでvncを遠隔安全運用(トンネリング)」を参照。

SSHクライアントからデータのやりとり
sshトンネルでFTPという方法もあるが、ポートを20と21の2つを使うので煩雑。
基本的にはsshのscpコマンド(sshコピーコマンド)を使用する。

windowsではwinSCPというソフトを使用  http://winscp.net/eng/download.php
設定例
ホスト 333.333.333.212
ポート 22
ユーザー名 user01
パスワード 空白のまま(公開鍵のときは空白、共通鍵のとき使用)
プライベートキーの場所 puttyで作成した.ppkファイルを指定
プロトコル SCP
「save」ボタンで保存しておくとよい。
「login」ボタンで接続。
公開キーのパスフレーズを入力。


ドメインUにUSBを認識させる

@まずドメイン0(正確な使い方ではないかもしれないが、ホスト側でといこと)でUSBメディアがどのように認識されるか調査しておく。
# fdisk -l
USBメディアを差し込んで、再び
# fdisk -l
/de/sdb等として認識されたことがわかる。

AドメインU(system1)の仮想ドライバ
# ls /dev/x*
/dev/xvc0 /dev/xvda /dev/xvda1 /dev/xvda2等々が表示される。
ここには/dev/xvdeはまだないことを確認。

Bドメイン0での作業 仮想デバイスxvdeを書き込みモードでアタッチ
# xm block-attach system1 phy:/dev/sdb xvde w

CドメインUでの作業 マウント
Bで/dev/xvde等が作成されている。
確認 # ls /dev/x*   /dev/xvde /dev/xvde1ができている。
マウント
# mount -t vfat /dev/xvde1 /media/usb (/media/usbは作成しておく。めんどうなら/mediaでもよい。)

作業が終了したら
ドメインUでマウントを解除
# umount /dev/xvde1
ドメイン0で仮想ドライバ xvde をデタッチ
# xm block-detach system1 xvde


ドメインUのrootパスワードを忘れた場合
シングルモードで起動して、passwdコマンドでパスワードを再設定する。

@アプリケーション→システムツール→仮想マネージャー
localhostを開いて、ドメイン0を実行状態にしておく。

A端末を開いて、
# xm create -c system1    (ここではゲストドメイン名をsystem1とする)
最初のpyGRUB画面で「e」キーを押す。
kernel /vmlinuz-**********の行を選択して、「e」キーを押す。
> <0/LogVol00 rhgb quiet 1 のように最後に「1」を書き加える。
enterキーを押すと、再びpyGRUB画面に戻る。
「b」キーでboot。
途中で「i8024.c:No controller found」とか出て、途中で止まるがそのままにしておく。

B仮想マネージャーの画面に戻り、system1を開く。
シングルモードで起動している。
# passwd
パスワードの再設定。


Domain-Uの複製

複製元のドメイン名:system1
複製先のドメイン名:system2

●system1を停止

●system1の仮想ディスクイメージファイルをコピー
# cd /var/lib/xen/images/
# cp -p system1.img system2.img

●Configファイルをコピー
# cd /etc/xen/
# cp -p system1 system2

●Configファイルsystem2を開き編集。
MACアドレスは、前半の'00:16:3e'は、Xenで共通で使用するもの。
後半の3つを同じセグメントで重複しないように変更。
uuidも変更。uuidは、# uuidgen コマンドで生成するとよい。

name = "system2"
uuid = "cba858f1-f76e-4420-8df3-8ca5f7df958d"
maxmem = 512
memory = 512
vcpus = 1
bootloader = "/usr/bin/pygrub"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
vfb = [ "type=vnc,vncunused=0,vncdisplay=3,keymap=ja" ]
disk = [ "tap:aio:/var/lib/xen/images/system2.img,xvda,w" ]
vif = [ "mac=00:16:3e:19:4c:df,bridge=xenbr0" ]

●新しいDomain-Uを起動

●新しいDomain-U環境の設定変更
/etc/hosts
127.0.0.1 localhost.localdomain localhost
333.333.333.213 system2.my-dom.xxx system2

/etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=system2.my-dom.xxx
GATEWAY=333.333.333.209

/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
HWADDR=00:16:3E:19:4C:DF
IPADDR=333.333.333.213
NETMASK=255.255.255.248
ONBOOT=yes

複製元で作成された rootユーザのbash履歴ファイルを削除。
# rm /root/.bash_history

複製元で作成された SSHサーバのホスト鍵を削除。
# rm /etc/ssh/ssh_host*
sshdを再起動し、ホスト鍵を再作成。

●Domain-Uを再起動。



TOP(HOME)へ

目 次

特別企画
Raspberry Piで遊ぶ

HOME(全体のシステム構成&目次)

CentOS7
CentOS7のインストール〜ネットワークの設定ほか
CentOS7の新機能(systemdとfirewalld)
ダイレクトルールを使ったfirewallの強化
DNS(BIND)サーバー
Webサーバー
  Webでファイルの受け渡し
  アクセス解析ツールAwstats
  Wordpressでブログ構築
FTPサーバー
FTPS(FTP over SSL/TLS)
Mail(Dovecot&Postfix)サーバー
Sambaサーバー
MariaDB(MySQL)サーバー
DHCPサーバー
SSHサーバー
VNCサーバー
ストリーミングサーバーRed5
ドメインの追加

CentOS5〜6
ネットワーク&ファイアウォール(iptables)
DNS(BIND)サーバー
DHCPサーバー
メールサーバー(基本)
メールサーバー/実際の運用
Webサーバー
  WebDAVによるファイル共有
  Webでファイルのやり取り
  アクセス解析ツールawstats
  namazuで全文検索
  WordPressブログサイト構築
  EC-CUBEショッピングサイト構築
FTPサーバー
ファイルサーバー・Samba
データベースpostgreSQL
  ExcelからpostgreSQLを操作
データベースMySQL
SSHサーバー
VNC
SSL/TLSを利用した暗号化通信
openVPN
ストリーミングサーバー
    C++ RTMP Server
    Helix server Basic
ドメインの追加
Xen・仮想化
特定ディレクトリに容量制限

SELinux
SELinux基本設定
新しいタイプとポリシー・モジュールを作成してみる
マクロを利用したteファイルの記述
新しいドメインを導入してみる

coLinux
Fedora11で試す

Cプログラミング目次
X11プログラム
サイエンス・プログラム

計測・プログラム
秋月電子のデーターロガーpico ADC-16
「今すぐ使えるパソコン計測USBマイコン基板」に付属のTRZ1102
センサーの使用例

Glade2/GTK+を使ってみる
テキスト・ビューで簡易エディター
ドローイングエリアで自動描画
放物線運動(pango、cairoも試してみる)
これらを、GTK+のみで書き出す

フォントについて
ネットワーク・プログラミング
postgreSQL接続
CGI
ファイル操作

●その他
印刷機関連開発 刷版絵柄面積率測定
数独をExcelで解く