Oracle Solaris 11での完全な仮想化:OS、ネットワーク、ストレージ


はじめに

Oracle Solarisは、オペレーティング・システム、ストレージ、およびネットワークの仮想化を実現する、世界で初めて完全に仮想化されたオペレーティング・システムです。このラボでは、これらの各仮想化オプションについて簡単に説明します。また、さらに重要な、これらの組合わせによって非常に俊敏なシステムを実現する方法について説明します。

前提条件

環境

Oracle Solaris 11 VirtualBox VMを使用している場合は、環境を以下のようにセットアップしてください。
オペレーティング・システム:Oracle Solaris 11 11/11
ホスト名:solaris(デフォルト)
IPアドレス:10.0.2.15
ユーザー:oracle(インストールに関するラボで推奨)
パスワード:<Solaris VMの初回起動時に構成したユーザー・パスワード>
rootパスワード:<Solaris VMの初回起動時に構成したrootパスワード>

ラボの演習

  1. 仮想ネットワークの操作
  2. ゾーンの操作
  3. ゾーンの基本的な管理
  4. ゾーンのクローニング
  5. ネットワークのサービス品質
  6. 管理の委任

演習1:仮想ネットワークの操作

Oracle Solaris 11では、以下のような新しい強力なネットワーク・スタック・アーキテクチャが導入されています。

  • 仮想ネットワーク・インタフェース・カード(VNIC)と仮想スイッチ(etherstub)によるネットワークの仮想化
  • ゾーンとの緊密な統合
  • ネットワーク・リソース管理 - 統合サービス品質(QoS)を簡単に効率よく管理して、VNICおよびトラフィック・フローに帯域幅制限を適用

ラボの演習を通じて、これらの3つのネットワーク仮想化機能セットのすべてについて説明します。最初の演習では、後でゾーン作成時(演習2)に使用できるVNICの作成方法について学習します。

  • マシンの物理ネットワーク・インタフェースを確認します。
    oracle@solaris:~$ dladm show-link
    LINK        CLASS     MTU    STATE    BRIDGE     OVER
    net0     phys      1500   up       --         --
    
  • 物理インタフェースを使用して仮想インタフェースを作成します。仮想インタフェースは、物理リンクまたは仮想スイッチ(etherstub)に関連付ける必要があります。今回は、物理リンクに関連付けます。
    oracle@solaris:~$ sudo dladm create-vnic -l net0 vnic0
    Password:
    
  • リンクは、VNICとして表示されます。
    oracle@solaris:~$ dladm show-link
    LINK        CLASS     MTU    STATE    BRIDGE     OVER
    net0     phys      1500   up       --         --
    vnic0       vnic      1500   up       --         net0
    
  • 次のように、仮想インタフェースの詳細(速度、MACアドレスなど)を確認することもできます。
    oracle@solaris:~$ dladm show-vnic
    LINK         OVER         SPEED  MACADDRESS        MACADDRTYPE         VID
    vnic0        net0      1000   2:8:20:cd:c1:d9   random              0
    
    
  • 仮想インタフェースの速度(SPEED)が物理NICと同じであることに注意してください。たとえば、このNICの帯域幅を制限する場合は、次のように操作します。
    oracle@solaris:~$ sudo dladm set-linkprop -p maxbw=400 vnic0
    
  • もう一度VNICを表示します。
    oracle@solaris:~$ dladm show-vnic
    LINK         OVER         SPEED  MACADDRESS        MACADDRTYPE         VID
    vnic0        net0      400    2:8:20:cd:c1:d9   random              0
    
  • ifconfigを実行すると、新しいVNICが出力に表示されないことが分かります。これは、IPインタフェースを作成してアドレスを割り当て、そのインタフェースを指定する必要があるためです。これは、次のように、ipadm(1M)を使用して行うことができます。
    oracle@solaris:~$ sudo ipadm create-ip vnic0
    oracle@solaris:~$ sudo ipadm create-addr -T static -a local=10.0.2.20/24 vnic0/v4static1
    
  • ここで、ifconfigを実行すると、VNICが表示されます。
    oracle@solaris:~$ ifconfig -a4
    lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
    	inet 127.0.0.1 netmask ff000000
    net0: flags=1004843<UP,BROADCAST,RUNNING,MULTICAST,DHCP,IPv4> mtu 1500 index 3
    	inet 10.0.2.15 netmask ffffff00 broadcast 10.0.2.255
    vnic0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 4
    	inet 10.0.2.20 netmask ffffff00 broadcast 10.0.2.25
    
    
    
  • このVNICは、他のNICと同様に使用できます。つまり、仮想マシンやゾーンに割り当てることができます。

演習2:ゾーンの操作

ゾーンの作成

Oracle Solaris Zonesは、アプリケーションをそのアプリケーション専用の安全な環境に隔離することによってリスクを軽減できる、オペレーティング・システム・レベルの仮想化テクノロジーです。Oracle Solaris Zoneによって、ファイル・システム、プロセス、およびネットワークが安全に隔離されます。このゾーンは、ネットワーク上の個別のシステムのように見えます。Oracle Solaris Zoneへの攻撃は、Oracle Solaris Zoneの境界を超えることができません。

ワークロードを分離するだけではなく、Oracle Solaris Zonesにより、そのワークロード専用のシステム・リソースの管理も可能になります。具体的には、Oracle Solaris Zone管理者は、Oracle Solaris Zoneが使用できるCPU容量、RAM、および仮想メモリの総量を制御できます。演習1で説明した方法によってネットワーク仮想化テクノロジーと組み合わせることにより、使用できるネットワーク帯域幅の総量も管理できます。この点については、後の演習で説明します。

図で示すと、完成したマシンは、次のように構成されます。

 OSの隔離

ゾーンをホストするZFSファイル・システムを作成します(追加のゾーンを作成する場合には、そのゾーンもこのファイル・システムに配置できます)。ZFSについてはこのラボでは説明しませんが、ZFSについての基本的な知識がない場合は、ラボ:Oracle Solaris 11 ZFSファイル・システムの概要を参照してください。

ゾーンを、そのゾーン用のZFSファイル・システムに配置することにより、データ圧縮やゾーンの迅速かつ効率的なクローン化といったZFSの高度なデータ管理機能を利用できるようになります。今日のCPUでは、非圧縮データのディスクへの書込み/ディスクからの読取りにかかる時間よりもデータの圧縮/解凍にかかる時間の方が短いため、ここで、圧縮を有効にします。次のzfs createコマンドの最後の構成要素であるrpool/zonesは、データセット名です。このデータセット名は、他のZFSコマンドをこのファイル・システムに適用する際に使用します。

oracle@solaris:~$ sudo zfs create -o mountpoint=/zones -o compression=on rpool/zones

ゾーン専用のネットワーク・インタフェースに関しては、次の2つのオプションがあります。

  • 仮想インタフェースを手動で作成する(ゾーンが動作しているかどうかに関係なく仮想インタフェースが永続的に存在します)
  • ゾーンの起動時にそのゾーン用に自動的に作成されるインタフェースを使用する
zonecfgによってゾーンを構成する際に、具体的な物理インタフェースを定義せずに、"add net"を使用してネットワークを構成した場合は、後者のオプションを使用できます。anetネットワーク・インタフェースがデフォルトでゾーン構成に追加されます。 ここで、ゾーン専用の仮想ネットワーク・インタフェースを作成しましょう。

 

oracle@solaris:~$ sudo dladm create-vnic -l net0 myzone0

システムのネットワーク・インタフェースを表示します。

oracle@solaris:~$ dladm show-link
LINK        CLASS     MTU    STATE    BRIDGE     OVER
net0        phys      1500   up       --         --
vnic0       vnic      1500   up       --         net0
myzone0     vnic      1500   up       --         net0

次の手順で、ゾーンを構成します。ゾーン構成時に設定する値について簡単に説明します。

  • zonepathは、ゾーンのファイルが格納されるディスク上の場所です。
  • zonepathの親ディレクトリがZFSファイル・システムである場合(今回がそうです)、そのゾーン用に新しいZFSファイル・システムが作成されます。それ以外の場合は、ディレクトリだけが作成されます。
  • autoboot設定により、システムの起動時にゾーンを起動させることができます。
  • ゾーンのIPタイプ(ip-type)は、shared(共有)またはexclusive(排他的)に設定できます。exclusive設定では、ゾーンが使用するネットワーク・インタフェース・カードを排他専用にしていると想定します。これは、ネットワーク・スタック管理に関するいくつかのメリットをもたらしますが、従来は、システムが数十または数百のゾーンを持つことができる一方でネットワーク・インタフェースを最大4つしか持てなかったため、実用的ではありませんでした。幸いにも、Solaris 11の新しいネットワーク仮想化機能により、この制限を容易に克服できるようになりました。このため、排他的IPが、ゾーンの推奨されるip-type設定となっています。
  • set physical設定により、システムのどのネットワーク・インタフェース・カードをゾーンに割り当てるかを、そのゾーンに対して指定できます。今回は、作成した新しいmyzone0 VNICを使用します。
  • IPタイプをsharedに設定する場合は、同時にIPアドレスも設定する必要があります。前述のように、IPタイプがexclusiveの場合は、ゾーンがIPスタックを直接管理できます。

次のコマンドを使用してゾーンを構成します。

  zonecfg
zonecfgユーティリティは、[Tab]キーによる補完をサポートします。任意の時点で[Tab]キーを押すと、入力可能なコマンドのリストが表示されます。入力可能なコマンドが1つしかない場合は、そのコマンドが補完されて入力されます。


oracle@solaris:~$ sudo zonecfg -z myzone
myzone: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:myzone> create
zonecfg:myzone> set zonepath=/zones/myzone
zonecfg:myzone> set autoboot=true
zonecfg:myzone> set ip-type=exclusive
zonecfg:myzone> add net
zonecfg:myzone:net> set physical=myzone0
zonecfg:myzone:net> end
zonecfg:myzone> verify
zonecfg:myzone> exit


ゾーンをインストールします。ゾーンのインストールには、約175MBのダウンロードが必要です。時間とネットワーク帯域幅を節約するために、今回は、tzoneという既存のゾーン(OTN SysAdmin Day Pre-workで作成するゾーン)をクローン化します。ゾーンのインストールは完了までに約10分かかりますが、ゾーンのクローン化は約10秒で完了します。この既存のゾーンががない場合(確認するにはzoneadm list -cvを実行)、次のコマンドのclone tzoneinstallに置き換えてください。

bleonard@solaris:~$ sudo zoneadm -z myzone clone tzone


システムに構成されている2つのゾーンを確認します。一つは大域ゾーン(すべてのOracle Solarisシステムに事前に存在します)であり、もう一つは新しい非大域(ローカル)ゾーンのmyzoneです。

oracle@solaris:~$ zoneadm list -cv
  ID NAME             STATUS     PATH                           BRAND    IP
   0 global           running    /                              ipkg     shared
   - myzone           installed  /zones/myzone                  ipkg     excl


myzoneは、インストールされていますが、まだ動作していないことに注意してください。この後ですぐに起動します。ブランドは、ipkgです。これは、ゾーンが大域ゾーンと同じオペレーティング・システム(Solaris 11)で動作することを意味します。Oracle Solaris 11は、他のオペレーティング・システム(Solaris 10など)を実行するためのブランド・ゾーンもサポートします。

ZFSによって使用されるデフォルトの圧縮アルゴリズムは、lzjbです。ゾーンがインストールされたので、rpool/zonesデータセットについて実現されている圧縮率を確認します。

oracle@solaris:~$ zfs get compressratio rpool/zones
NAME         PROPERTY       VALUE  SOURCE
rpool/zones  compressratio  1.62x  -


ゾーンを起動するための準備を整えます。初回起動時には、ゾーンが、そのゾーンを構成する一連の手順を示します。

# zoneadm -z myzone boot
# zlogin -C myzone


zloginの-Cオプションにより、ゾーン・コンソールにアクセスできます。つまり、ゾーンに入り、ゾーン内から作業できるようになります。使用できるシステム構成ファイルがないため、システム構成ツールが起動し、タイムゾーン、rootパスワード、およびネットワーク構成をセットアップする一連の手順を実行する必要があります。このセットアップの正確な手順については、Oracle Technology Networkの記事を参照してください。

rootパスワードおよびoracleユーザーのパスワードは、zlogin -Cによってゾーンに接続したときにシステム構成ツールで構成したパスワードになることに注意してください。

後で、sysconfigコマンドによってシステム構成ツールを実行して、システム構成を変更したり、システム構成が.xml形式で格納されるプロファイルを作成したりすることができます。

演習3:ゾーンの基本的な管理

インターネット接続


ゾーン内から外部へpingを実行できるかどうかをテストします。

root@myzone:~# ping www.oracle.com
www.oracle.com is alive

Oracle VM VirtualBox構成と大域ゾーン構成を変更していない場合、ホスト・マシンがインターネットに接続されていれば、インターネット接続はすぐに使用できます。問題がある場合は、ネットワーク構成をトラブルシューティングできます。

注:Oracle Solaris 11のネットワーク構成は、それ以前のリリースから変更されています。/etc/resolve.conf/etc/nsswitch.confなどの構成ファイルは依然として存在しますが、それらはSMFリポジトリに含まれる情報からコンパイルされるだけです。このため、次のコマンドを使用して、IPアドレス、デフォルト・ゲートウェイ、ネーム・サーバー・アドレス、およびネーム・サービスが正しく構成されていることを確認する必要があります。

ipadm show-addr
netstat -rn
svcprop -p config/nameserver dns/client
svcprop name-service/switch


SMFリポジトリのネーム・サービス構成へのインポートおよびネーム・サービス構成からのエクスポートのために、nscfg(1)という新しいユーティリティが用意されています。このユーティリティにより、下位互換性のために、SMF構成から/etc/nsswitch.conf/etc/resolv.confなどの従来のファイルを再作成することもできます。

netstatによってルーティング・テーブルを表示できます。

root@myzone:~# netstat -rn

Routing Table: IPv4
  Destination           Gateway           Flags  Ref     Use     Interface
-------------------- -------------------- ----- ----- ---------- ---------
default              10.0.2.2             UG        1          0
10.0.2.0             10.0.2.25            U         4        265 myzone0
127.0.0.1            127.0.0.1            UH        2         24 lo0

Routing Table: IPv6
  Destination/Mask            Gateway                   Flags Ref   Use    If
--------------------------- --------------------------- ----- --- ------- -----
::1                         ::1                         UH      2       0 lo0

ここで、次のように、外部にアクセスできます。

root@myzone:~# ping www.oracle.com
www.oracle.com is alive

リモート・アクセス

この時点では、ゾーンへのアクセスは、大域ゾーンからzloginユーティリティを使用することによってのみ可能です。ゾーンにリモートでアクセスするには、ユーザー・アカウントを作成する必要があります。この演習のために、tstarkというユーザーを作成します。myzoneインタフェースの実際のIPアドレスを確認してください(以下の例で使用されている10.0.2.25とは異なる場合があります)。

root@myzone:~# useradd -m -d /tstark -s /usr/bin/bash tstark
80 blocks
root@myzone:~# passwd tstark
New Password: abc133
Re-enter new Password: abc123
passwd: password successfully changed for tstark

tstarkの初期ログオン時のパスワードを変更します。

root@myzone:~# passwd -f tstark
passwd: password information changed for tstark


大域ゾーンにログインしている別のターミナル・ウィンドウに戻ります。便宜上、次のように、myzoneをhostsファイルに追加します。

oracle@solaris:~$ cat /etc/inet/hosts
# CDDL HEADER START
#
# ...
#
# Internet host table
#
::1 solaris solaris.local localhost loghost
127.0.0.1 solaris solaris.local localhost loghost
10.0.2.25 myzone


tstarkとしてmyzoneにログインします。

oracle@solaris:~$ ssh tstark@myzone
The authenticity of host 'myzone (10.0.2.25)' can't be established.
RSA key fingerprint is 2c:07:3a:fc:a0:c5:1b:80:de:c8:37:3d:d2:72:56:bf.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'myzone,10.0.2.25' (RSA) to the list of known hosts.
Password: abc123
Warning: Your password has expired, please change it now.

New Password: 123abc
Re-enter new Password: 123abc
sshd-kbdint: password successfully changed for tstark

Last login: Thu Apr  7 15:15:57 2011 from 10.0.2.15
Oracle Corporation      SunOS 5.11      11.0    November 2011
tstark@myzone:~$

特権操作

tstarkユーザーには権限がほとんどありません。このユーザーがrootロールを取得できるように、このロールを割り当てましょう。myzoneゾーンにrootとして接続し、そのままtstarkアカウントを変更します。

usermod -R root tstark


tstarkユーザーとしてログインしなおして、tstarkユーザーをsudoersファイルに追加します。sudoersファイルを編集するには、visudoを使用する必要があります。

VIチート・シート
viに関する基本的な知識がない場合は、この演習で使用する以下のいくつかの共通キーボード・コマンドを確認してください。

[k]キー = 上に移動
[j]キー = 下に移動
[w]キー = 1単語後前(右)に移動
[b]キー = 1単語後(左)に移動
[l]キー = 1文字右に移動
[h]キー = 1文字左に移動
[x]キー = 1文字削除
[u]キー = 元に戻す
[i]キー = 挿入
[d]キーを2回連続 = 現在の行全体を削除
[ESC]キー = 編集モードを終了
[:]+[w]+[q]キー = 上書き保存して終了
[:]+[q]+[!]キー = 変更を無視して(上書き保存せずに)終了


tstark@myzone:~# visudo


次の行をファイルの任意の場所に追加します。NOPASSWD:設定はオプションですが、この設定により、このラボの残りの部分でsudoを使用する際の煩雑さが解消されます。

tstark ALL=(ALL) NOPASSWD: ALL


最後に、rootユーザーを終了します。

tstark@myzone:~# exit
exit
tstark@myzone:~$

ソフトウェアのインストール

この後の演習でゾーンのクローニングによるメリットを確認できるように、このゾーンを少しカスタマイズします。Apache Webサーバーをインストールしましょう。

tstark@myzone:~$ sudo pkg install apache-22
Nov 17 04:56:07 solaris sudo:   tstark : TTY=console ; PWD=/home/tstark ; USER=root ; COMMAND=/usr/bin/pkg install apache-22
Packages to install:     5
           Create boot environment:    No
               Services to restart:     1
DOWNLOAD                                  PKGS       FILES    XFER (MB)
Completed                                  5/5     907/907      4.7/4.7

PHASE                                        ACTIONS
Install Phase                              1171/1171

PHASE                                          ITEMS
Package State Update Phase                       5/5
Image State Update Phase                         2/2

次に、Apacheサーバーを有効にします。

tstark@myzone:~$ sudo svcadm enable apache22


大域ゾーンでFirefoxを起動して、ゾーンでのWebサーバーの動作をテストしてください。

myzoneのApache

演習4:ゾーンのクローン化

ゾーンを希望どおりに構成できたので、このゾーンをテンプレートとして使用して、追加のゾーンを作成します。作成プロセスが非常に迅速になることと、ゾーンが希望どおりに事前に構成されることを確認してください。

まず、新しいゾーン用に新しいVNICを作成します。


oracle@solaris:~$ sudo dladm create-vnic -l net0 myzoneclone0


次に、ゾーン構成を定義します。

oracle@solaris:~$ sudo zonecfg -z myzoneclone
myzoneclone: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:myzoneclone> create
create: Using system default template 'SYSdefault'
zonecfg:myzoneclone> set zonepath=/zones/myzoneclone
zonecfg:myzoneclone> set ip-type=exclusive
zonecfg:myzoneclone> add net
zonecfg:myzoneclone:net> set physical=myzoneclone0
zonecfg:myzoneclone:net> end
zonecfg:myzoneclone> verify
zonecfg:myzoneclone> exit


インストールを行ったときには数分かかりましたが、今回は数秒で完了しました。

ここで、新しいゾーンのシステム構成情報を指定する必要があります。 以下の手順を実行してください。myzoneの構成とは、ホスト名とIPアドレスが異なるだけです。このゾーンのIPアドレスを手動で定義しましょう。この演習の例では、10.0.2.35を使用しますが、10.0.2.35が現在のネットワーク構成に合わない場合は別のIPアドレスを使用してくださいsysconfigによって構成手順が順番に示され、適切な値の入力を求められます。

この構成は、ゾーンをインストールして起動する前に、構成プロファイルによって行うこともできます。

このプロファイルは、Oracle Solaris 11で導入されたコマンドによって作成できます。

sysconfig create-profile -o sc_profile.xml

sysconfig
システム構成プロファイルを手動で編集した場合、sysconfigプロファイルに入力ミスや書式エラーがあると、ゾーンの起動プロセスが対話モードになります。

複数のディレクトリに異なる構成プロファイルが格納されている可能性がある場合に、.xmlファイルに保存された既存のシステム構成を使用してゾーンをインストールするには、zoneadm installおよびzoneadm cloneに-cオプションを使用し、その後にディレクトリのパスを入力してください。適切なディレクトリ構造を作成し、そこに構成プロファイルをコピーできます。

# mkdir profiles
# mkdir profiles/defaultprofile
# cp sc_profile.xml profiles/defaultprofile/

次に、以前に作成したプロファイルを使用してゾーンをインストールまたはクローン化できます。次のいずれかの操作を行ってください。
# zoneadm -z myzoneclone install -c /home/oracle/profiles
または
# zoneadm -z myzoneclone clone myzone -c /home/oracle/profiles


次の手順ではゾーンをインストールしますが、インストールではなく、既存のゾーンをクローン化することもできます。まず、クローン化するゾーンを停止します。

$ sudo zoneadm -z myzone halt


次に、myzoneをクローン化します。

$ sudo zoneadm -z myzoneclone clone myzone -c /home/oracle/profiles

次の操作によって、前述のシステム構成プロファイル(sc_profile.xml)を作成できます。
sysconfig -o sc_profile.xml

手動で作成する場合でも、以下のテキストをコピーしてファイルに貼り付けるだけです。

<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<service_bundle type="profile" name="sysconfig">

  <service version="1" type="service" name="system/config-user">
    <instance enabled="true" name="default">

      <property_group type="application" name="root_account">
        <propval type="astring" name="login" value="root"/>

        <propval type="astring" name="password" value="$5$IP.0cabs$/3rNMAzh0lP/v/hLzp5iyClfTaeoln.VkgT0raL1bT9"/>
        <propval type="astring" name="type" value="normal"/>

      </property_group>
    </instance>

  </service>
  <service version="1" type="service" name="system/timezone">

    <instance enabled="true" name="default">
      <property_group type="application" name="timezone">
        <propval type="astring" name="localtime" value="US/Pacific"/>

      </property_group>

    </instance>
  </service>
  <service version="1" type="service" name="system/environment">

    <instance enabled="true" name="init">
      <property_group type="application" name="environment">
        <propval type="astring" name="LANG" value="C"/>

      </property_group>
    </instance>
  </service>
  <service version="1" type="service" name="system/identity">

    <instance enabled="true" name="node">
      <property_group type="application" name="config">

        <propval type="astring" name="nodename" value="myzoneclone"/>

      </property_group>
    </instance>
  </service>
  <service version="1" type="service" name="system/keymap">

    <instance enabled="true" name="default">

      <property_group type="system" name="keymap">
        <propval type="astring" name="layout" value="US-English"/>

      </property_group>
    </instance>
  </service>
  <service version="1" type="service" name="system/console-login">

    <instance enabled="true" name="default">
      <property_group type="application" name="ttymon">
        <propval type="astring" name="terminal_type" value="sun-color"/>

      </property_group>
    </instance>
  </service>

  <service version="1" type="service" name="network/physical">

    <instance enabled="true" name="default">
      <property_group type="application" name="netcfg">
        <propval type="astring" name="active_ncp" value="DefaultFixed"/>

      </property_group>
    </instance>

  </service>
  <service version="1" type="service" name="network/install">

    <instance enabled="true" name="default">
      <property_group type="application" name="install_ipv4_interface">
        <propval type="astring" name="address_type" value="static"/>

        <propval type="net_address_v4" name="static_address" value="10.0.2.35/24"/>

        <propval type="astring" name="name" value="myzoneclone0/v4"/>

      </property_group>
      <property_group type="application" name="install_ipv6_interface">
        <propval type="astring" name="stateful" value="yes"/>

        <propval type="astring" name="stateless" value="yes"/>
        <propval type="astring" name="address_type" value="addrconf"/>

        <propval type="astring" name="name" value="myzoneclone0/v6"/>
      </property_group>
    </instance>

  </service>
  <service version="1" type="service" name="system/name-service/switch">
    <property_group type="application" name="config">

      <propval type="astring" name="default" value="files"/>
      <propval type="astring" name="printer" value="user files"/>

    </property_group>
    <instance enabled="true" name="default"/>
  </service>
  <service version="1" type="service" name="system/name-service/cache">

    <instance enabled="true" name="default"/>
  </service>
  <service version="1" type="service" name="network/dns/client">

    <instance enabled="false" name="default"/>
  </service>
</service_bundle>

ここで、ゾーンを起動します。

# zoneadm -z myzoneclone boot
# zlogin -C myzoneclone
[Connected to zone 'myzoneclone' console]
Hostname: unknown
Hostname: myzoneclone

myzoneclone console login: Nov 18 03:37:55 myzoneclone sendmail[9688]: My unqualified host name (myzoneclone) unknown; sleeping for retry
Nov 18 03:38:55 myzoneclone sendmail[9688]: unable to qualify my own domain name (myzoneclone) -- using short name

myzoneclone console login: tstark
Password: 123abc
Oracle Corporation      SunOS 5.11      11.0    November 2011
tstark@myzoneclone:~$ ifconfig -a4
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
myzoneclone0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
        inet 10.0.2.35 netmask ffffff00 broadcast 10.0.2.255


Firefoxに戻り、Webサーバーをテストします。

10.0.2.35が大域ゾーンからルーティング可能であることが重要です。myzonecloneゾーン用に別のIPアドレスを構成している場合は、代わりにそのIPアドレスを使用してください。そのIPアドレスは、現在のネットワーク構成に合っているものである必要があります。

この演習では、ホスト名の設定に時間をかけるのではなく、IPアドレスを使用するだけです。

myzonecloneのApache

クローンでもtstarkユーザーを使用できます。実際にはmyzoneからログアウトしていても、クローンでは"最終ログイン"と検出されます。

oracle@solaris:~$ ssh tstark@10.0.2.35
The authenticity of host '10.0.2.35 (10.0.2.35)' can't be established.
RSA key fingerprint is 8e:42:ea:ca:9c:dd:89:ba:80:a0:d1:60:74:79:4b:a2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.2.35' (RSA) to the list of known hosts.
Password: 123abc
Last login: Thu Apr  7 15:15:57 2011 from 10.0.2.15
Oracle Corporation      SunOS 5.11      11.0    November 2011
tstark@myzoneclone:~$

演習5:ネットワークQoS

これまでのところで、オペレーティング・システムのクローンをわずか数分で起動できる、オペレーティング・システム仮想化とストレージ仮想化の強力な組合せについて説明しました。この演習では、ネットワーク仮想化によってゾーンにもたらされるさらなる価値について学習します。

次のように、大域ゾーンから、10Kのデータでmyzonecloneにpingします。

oracle@solaris:~$ ping -s 10.0.2.35 10000
PING 10.0.2.35: 10000 data bytes
10008 bytes from 10.0.2.35: icmp_seq=0. time=1.513 ms
10008 bytes from 10.0.2.35: icmp_seq=1. time=0.973 ms
10008 bytes from 10.0.2.35: icmp_seq=2. time=1.079 ms
10008 bytes from 10.0.2.35: icmp_seq=3. time=1.718 ms
...

この場合、10KBのデータの転送にかかる時間は1~2ミリ秒です。

ここで、この特定のゾーンが、優先度の低いネットワーク・テープ・バックアップ・サービスのようなものと仮定しましょう。ただし、毎日行われるバックアップが始まると、そのバックアップ・データ・トラフィックによって残りのネットワーク・トラフィックが極端に遅くなり、サービス品質に関する問題が発生しているとします。仮想ネットワーク・インタフェースでのリソース制御を活用すると、この特定のインタフェースが使用できる帯域幅の量を簡単に制限できます。これにより、他のネットワーク・トラフィックで使用するための帯域幅が解放されます。

VNICを表示します。

oracle@solaris:~$ dladm show-vnic
LINK         OVER         SPEED  MACADDRESS        MACADDRTYPE         VID
vnic0        net0      400    2:8:20:7b:6e:37   random              0
myzone0      net0      1000   2:8:20:bf:e7:8c   random              0
myzoneclone0 net0      1000   2:8:20:e:35:f1    random              0

myzoneclone0は、現在、1Gb/秒で動作するように構成されています。この演習の目的を達成するために、これを8Mb/秒に低下させましょう。pingは実行中のままにして、別のターミナルに切り替えて次のコマンドを入力します。


oracle@solaris:~$ sudo dladm set-linkprop -p maxbw=8 myzoneclone0
Password: oracle


次のように、すぐに、pingの応答時間が約10倍に跳ね上がります。

10008 bytes from 10.0.2.35: icmp_seq=24. time=10.147 ms
10008 bytes from 10.0.2.35: icmp_seq=25. time=10.279 ms
10008 bytes from 10.0.2.35: icmp_seq=26. time=10.295 ms

ここで、計算すると、10ミリ秒あたり10KBのデータは1秒あたり1MBのデータに相当します。また、転送速度を8Mb/秒に設定しましたが、これも1MB/秒に相当します。

注意すべきもう一つの点は、変更が即座に動的に行われたことです。ネットワーク・トラフィックを変更するために何かを再起動する必要はありません。

この例では、帯域幅の設定をVNIC全体に適用しました。しかし、IPアドレス、ポート、プロトコル、またはMACアドレスに基づいて帯域幅を構成することもできます。つまり、同じNICを経由する異なるネットワーク・トラフィックを調整することも可能なのです。このトピックについて詳しくは、Oracle Solaris 11のネットワーク仮想化テクノロジーのWebページを参照してください。

演習6:管理の委任

Solaris 11は、ゾーンの管理を大域ゾーンの別のユーザーに委任できる新機能を備えています。演習のために、まず、大域ゾーンにppottsという新しいユーザーを作成します。

oracle@solaris:~$ sudo useradd -m -d /export/home/ppotts -s /usr/bin/bash ppotts
80 blocks
oracle@solaris:~$ sudo passwd ppotts
New Password: abc123
Re-enter new Password: abc123
passwd: password successfully changed for ppotts

ここで、ppottsに切り替えて、myzonecloneの管理を試みます。


oracle@solaris:~$ su - ppotts
Password:
ppotts@solaris:~$ pfexec zoneadm -z myzoneclone halt
zoneadm: zone 'myzoneclone': only a privileged user may halt a zone.

  pfexec
pfexecは、ユーザーのプロファイルに対するコマンドを実行するために使用します。次の手順で、Pepperというユーザー(ユーザー名:ppotts)に、ゾーンの管理に必要な認可を割り当てます。


ここで、Pepperにmyzonecloneを管理する特権を与えましょう。

ppotts@solaris:~$ exit
exit
oracle@solaris:~$ sudo zonecfg -z myzoneclone
zonecfg:myzoneclone> add admin
zonecfg:myzoneclone:admin> set user=ppotts
zonecfg:myzoneclone:admin> set auths=login,manage,clonefrom
zonecfg:myzoneclone:admin> end
zonecfg:myzoneclone> verify
zonecfg:myzoneclone> exit


ここで、Pepperに切り替えて、もう一度ゾーンの管理を試みます。

ppotts@solaris:~$ pfexec zoneadm -z myzoneclone halt
ppotts@solaris:~$ zoneadm list -cv
  ID NAME             STATUS     PATH                           BRAND    IP
   0 global           running    /                              ipkg     shared
   - myzone           installed  /zones/myzone                  ipkg     excl
   - myzoneclone      installed  /zones/myzoneclone             ipkg     excl


Pepperが別のゾーンの管理を試みるとどうなるかも、考えてみてください。

まとめ

これで、3種類の仮想化を利用してより俊敏なデータセンターを構築するラボは無事に完了です。ネットワーク仮想化とZFSおよびゾーンを組み合わせることで、迅速にレプリケートおよび制御できる環境を確立することができます。

false