クラウドにおけるOracle Solaris 11

OTNのシステム管理者/開発者コミュニティのハンズオン・ラボ

Duncan Hardie、Pavel Anni共著

このラボでは、Oracle Solarisを使用して多層アプリケーション環境をセットアップし、"Cloud in a box"(パッケージ化したクラウド)を効率よく構築することによって、非常に優れたクラウド環境を実現する方法について説明します。

2013年11月公開


この記事についてコメントする場合は、リンクをFacebookのOTN Garageのページに投稿してください。同様の記事を共有する場合は、FacebookまたはTwitterに投稿してください。みんなで議論しましょう。
目次
はじめに
前提条件
環境
ラボの概要
ラボの目標
演習1:システムの構成とネットワークのセットアップ
演習2:ストレージ・レイヤーの構成
演習3:Webレイヤーの構成
演習4:データベース・レイヤーの構成
演習5:WordPressアプリケーションの構成
演習6:ゾーンの監視
演習7:リソース管理の実行
演習8:可用性の確保
演習9:環境の保護
まとめ
追加の演習
参考資料

はじめに

クラウド環境には、優良なクラウドを構築するための鍵となるいくつの考慮事項と機能があります。これらは、次の5つの主要領域に分類されます。

  • 迅速なデプロイ
  • 柔軟性
  • 可用性
  • セキュリティ
  • 監視

Oracle Solarisによって非常に優れたクラウド環境を構築できることを示すために、このラボでは、多層アプリケーション環境のセットアップ方法について説明します。このラボでは、上記の各主要領域について説明しながらパッケージ化したクラウドを効率よく構築します。

最終的な環境は、Oracle Solaris Zoneに含まれるWordPressブログによって構成されます。このアプリケーション環境は、Webサーバーおよびデータベースによってサポートされます。

Oracle Solaris 11は、クラウドを中心として設計されており、Oracle Solaris 11の主要な機能がクラウドと統合されています。このラボでは、この点についても学習します。

前提条件

このラボでは、以下のことが前提となっています。

  • Oracle Solarisの基本管理操作に慣れている
  • 仮想環境に関する基本的な知識がある

環境

Oracle VM VirtualBox環境に含まれるOracle Solaris 11インスタンスで作業を行います。Oracle Solaris 11インスタンスは、このラボに関するかぎり、ベアメタル・インストールとして扱うことができます。

  • ユーザー:ouser
  • パスワード:Oracle123
  • rootパスワード:solaris11

ラボの概要

表1:演習の説明
演習 タイトル 学習内容
1 システムの構成とネットワークのセットアップ
  • ネットワークの設定を確認します。
  • ストレージの設定を確認します。
2 ストレージ・レイヤーの構成
  • Oracle Solaris Zonesを格納するZFSファイル・システムを作成します。
  • データを格納するZFSファイル・システムを作成します。
3 Webレイヤーの構成
  • ネットワークを構成します(仮想スイッチとVNICの作成を含む)。
  • Oracle Solaris Zonesを作成してインストールします。
  • ゾーン内からネットワークを構成します。
  • AMPパッケージをゾーンに追加します。
  • Apacheサービスを有効にします。
4 データベース・レイヤーの構成
  • Webゾーンをクローン化して、データベース・ゾーンを作成します。
  • ゾーン内からネットワークを構成します。
  • MySQLインスタンスを構成して実行します。
5 アプリケーション・レイヤーの構成 WordPressブログ・アプリケーションを構成してインストールします。
6 ゾーンの監視 psprstat、およびzonestatを使用してシステム・アクティビティを監視します。
7 リソース管理の実行
  • リソース管理をゾーンに追加します。
  • ゾーンに負荷をかけることによってリソース管理をテストします。
8 可用性の確保
  • svcsコマンドを使用してサービスを監視します。
  • サービスの自動再起動を確認します。
9 環境の保護 不変ゾーンを作成してテストします。

ラボの目標

このラボを終了すると、2つのゾーンの作成が完了します。一つは標準インストールから、もう一つはクローニングから作成されます。ネットワークの構成とそれらのゾーンへのアプリケーションの追加も完了し、ユーザー独自のブログを提供します。これにより、アプリケーション、ミドルウェア、およびデータベースの3層で構成される環境が実現されます。

ラボ終了時の構成は、図1のようになります。

図1

図1:完成した環境のレイアウト

:このラボでは、"大域ゾーン"という用語は、そのシステム用のデフォルトのゾーンを指します。このゾーンは、システム全体の管理制御にも使用されます。

以上で、これから行う作業を理解できたと思います。ここからは、演習において、目標を達成するための正確な手順を、コマンドラインの例を含め、順番に説明します。

このラボの全体を通じて、使用する設定の早見表として図2を参照してください。

図2

図2:設定の早見表

演習1:システムの構成とネットワークのセットアップ

ここでは、システムの設定を見ておきます。これにより、ラボでの作業の進行による相違を確認できます。

まず、システムの現在の構成を見てみましょう。

システムにログインします。

user: ouser 
password: Oracle123

Q:なぜ、rootではなくouserとしてログインしたのですか。
A:Oracle Solaris 11では、rootは、ユーザーではなく"ロール"と呼ばれるものになっているためです。

ターミナル・ウィンドウを開きます。ラボの残りの部分では、rootになるほうが便利なため、ここで、その操作を行いましょう。

ouser@solaris:~$ su -
Password: solaris11

Oracle Corporation      SunOS 5.11      11.1    September 2012
root@solaris:~# 

最初に、ZFSファイル・システムの設定を確認しましょう。

root@solaris:~# zfs list
NAME                      USED  AVAIL  REFER  MOUNTPOINT
rpool                    15.3G  13.0G  4.90M  /rpool
rpool/ROOT               4.17G  13.0G    31K  legacy
rpool/ROOT/solaris       4.17G  13.0G  3.79G  /
rpool/ROOT/solaris/var    284M  13.0G   220M  /var
rpool/VARSHARE             54K  13.0G    54K  /var/share
rpool/dump               1.03G  13.1G  1.00G  -
rpool/export             5.19M  13.0G    32K  /export
rpool/export/home        5.16M  13.0G    32K  /export/home
rpool/export/home/ouser  5.13M  13.0G  5.13M  /export/home/ouser
rpool/repository         9.02G  13.0G  9.02G  /repository
rpool/swap               1.03G  13.1G  1.00G  -

ファイル・システムの現在の状態をメモしておいてください。この情報は、後で必要になります。

次に、ネットワークを見てみましょう。Oracle Solaris 11には、頻繁に使用することになる新しいコマンドがあります。それは、ipadmdladmです。

ipadmを使用すると、リスト1のように、IPスタックが表示されます。このシステムのインタフェースとIPアドレスを確認しましょう。

root@solaris:~# ipadm show-if
IFNAME     CLASS    STATE    ACTIVE OVER
lo0        loopback ok       yes    --
net0       ip       ok       yes    --
root@solaris:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
net0/v4           static   ok           192.168.1.222/24
lo0/v6            static   ok           ::1/128

リスト1

リスト1で、このシステムにループバック・インタフェース(lo0)とネットワーク・インタフェース(net0)があることが示されていることに注意してください。これらのインタフェースの両方にIPv4アドレスが割り当てられています。また、net0にIPv4アドレスが静的に割り当てられていることも分かります。

では、リスト2のように、dladmコマンドを使用して、データリンク・レイヤーを確認しましょう。

root@solaris:~# dladm show-link
LINK                CLASS     MTU    STATE    OVER
net1                phys      1500   unknown  --
net0                phys      1500   up       --
root@solaris:~# dladm show-vnic
root@solaris:~# dladm show-etherstub

リスト2

リスト2で、このシステムに2つの物理ネットワーク・インタフェースがあり、VNICやetherstub(これらについては後で説明します)がないことに注意してください。

Q:なぜnet1はリスト1のipadmコマンドでは表示されなかったのでしょうか。
A:IPアドレスが割り当てられていなかったためです。

これで、ストレージ・レイヤーをセットアップする準備が整いました。

演習2:ストレージ・レイヤーの構成

ZFSの作成と管理に必要なすべての手順について詳しくは、Oracle Solaris 11.1の管理:ZFSファイルシステムを参照してください。

作業を開始する前に

ZFSファイル・システムのステータスを確認します。

root@solaris:~# zfs list | grep zones
root@solaris:~# zfs list | grep mydata

:いずれかのゾーンに関連付けられているZFSデータセットや、mydata用のZFSデータセットは存在しません。

ゾーンZFSデータセットの構成

ZFSデータセットをすべてのゾーンrootディレクトリに格納します。このデータセットは、rootプールで作成され、/zonesにマウントされます。では、この作業を行いましょう。

root@solaris:~# zfs create -o mountpoint=/zones rpool/zones

ここで、作成されたものを確認しましょう。

root@solaris:~# zfs list rpool/zones
NAME         USED  AVAIL  REFER  MOUNTPOINT
rpool/zones   31K  13.0G    31K  /zones
root@solaris:~# ls /zones

実際にはこの手順を実行する必要はありません。この手順は、ゾーンを作成すると実行されます。しかし、ここでは、データセットの作成とそのマウント・ポイントの指定が非常に容易であることを確認するために行いました。

データベースZFSデータセットの構成

MySQLデータ・ファイルを格納する個別のファイル・システムも作成します。これは、後で、データベース・ゾーンに割り当てられます。これにより、データベース・ゾーン管理者が、このデータセットを個別に管理して、たとえば、その圧縮および重複排除パラメータを変更したり、スナップショットを作成したりすることが可能になります。

root@solaris:~# zfs create rpool/mydata
root@solaris:~# zfs list rpool/mydata
NAME          USED  AVAIL  REFER  MOUNTPOINT
rpool/mydata   31K  13.0G    31K  /rpool/mydata

演習3:Webレイヤーの構成

ここでは、Webレイヤーを作成します。これには、ネットワークのセットアップ、ゾーンの作成とインストール、アプリケーションのゾーンへの追加が含まれます。ネットワークの構成から始めましょう。

ネットワークの構成

現在使用中のOracle Solarisインスタンスは、2つの内部ネットワークによって構成されています。これらのネットワークとそのIPアドレスは、dladmおよびipadmコマンドを使用して確認できます(演習1のリスト1およびリスト2で行った作業と同様)。

root@solaris:~# dladm show-link
LINK                CLASS     MTU    STATE    OVER
net1                phys      1500   unknown  --
net0                phys      1500   up       --

root@solaris:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
net0/v4           static   ok           192.168.1.222/24
lo0/v6            static   ok           ::1/128

次に、webzonedbzoneが相互に通信できるようにするために内部ネットワークを作成します。これを行うには、etherstubを使用します。このetherstubは、各ゾーン専用のVNICを使用して(それらのVNICの作成後に)接続されます。

Q:etherstubとは何ですか。
A:etherstubは、システム管理者によって管理される疑似イーサネットNICです。物理リンクを経由するのではなくetherstubを経由するVNICを作成できます。etherstubを経由するVNICは、システムの物理NICに依存しないものになります。etherstubを使用することにより、システム内の他の仮想ネットワークからも外部ネットワークからも分離されたプライベート仮想ネットワークを構築できます。簡単に言うと、etherstubは、内部ネットワーク・スイッチと考えることができます。

では、etherstubを作成しましょう。

root@solaris:~# dladm create-etherstub vswitch0

root@solaris:~# dladm show-etherstub
LINK
vswitch0

ここで、最初のVNICを作成します。これは、vswitch0に関連付けます。

root@solaris:~# dladm create-vnic -l vswitch0 webint0
root@solaris:~# dladm show-vnic

LINK                OVER         SPEED  MACADDRESS        MACADDRTYPE       VID
webint0             vswitch0     40000  2:8:20:de:f4:40   random            0

webzoneの構成

webzoneを構成してインストールする必要があります。また、その後に、ネットワークをセットアップし、このゾーンにアプリケーションを追加する必要があります。

まず、作成するゾーンの構成情報を入力しましょう。デフォルトでは、作成するゾーンに関して指定する必要があるのは、ゾーン名とゾーンパスだけです(ゾーンパスは、ゾーンrootが配置される場所です。この情報を保持するZFSデータセットのrpool/zonesを作成したことを思い出してください)。ただし、今回は、VNICのwebint0にも追加する機会があります。

root@solaris:~# zonecfg -z webzone

Use 'create' to begin configuring a new zone.
zonecfg:webzone> create
create: Using system default template 'SYSdefault'
zonecfg:webzone> set zonepath=/zones/webzone
zonecfg:webzone> add net
zonecfg:webzone:net> set physical=webint0
zonecfg:webzone:net> end

zonecfg:webzone> verify
zonecfg:webzone> commit
zonecfg:webzone> exit

Q:verifycommitは、どのようなコマンドですか。
A:zonecfgのこれらのコマンドは、情報が正しいことを確認して、その構成をコミットします。ゾーン構成情報を編集する際は、これらのコマンドを使用することを推奨します。

webzoneのインストール

webzoneの構成は完了しましたが、まだインストールされていません。この時点でインストールすることもできますが、ここでインストールした場合は、最初の起動後にそのゾーンにログインして、ホスト名、タイムゾーン、rootパスワードなどのシステム・プロファイルを作成する必要があります。これを実現する別の方法として、インストール前にプロファイルを作成することができます。これにより、最初の起動後にすぐにゾーンを使用できるようになります。また、この方法により、その後のゾーン作成も自動化できます。

root@solaris:~# sysconfig create-profile -o /root/webzone-profile.xml

表示されるダイアログ・ボックスに、以下のパラメータを入力します。

コンピュータ名:webzone
ネットワーク接続:None(後でゾーン内からネットワークを構成します)
タイムゾーン:該当するタイムゾーンを選択(ヒント:国を選択する際は、たとえばUnited StatesのUといったように、最初の文字を入力します)
rootパスワード:solaris11
ユーザーの実際の名前:Zone User
ユーザーID:zuser
ユーザー・パスワード:oracle1

これら以外はデフォルトのままにして、[F2]キーまたは[ESC]+[2]キーを押して続行します。

ここで、ゾーンをインストールしましょう(完了するまでに数分かかります)。

root@solaris:~# zoneadm -z webzone install -c /root/webzone-profile.xml
Progress being logged to /var/log/zones/zoneadm.20130812T145306Z.webzone.install
       Image: Preparing at /zones/webzone/root.

 AI Manifest: /tmp/manifest.xml.ZnaOeg
  SC Profile: /root/webzone-profile.xml
    Zonename: webzone
Installation: Starting ...

              Creating IPS image
Startup linked: 1/1 done
              Installing packages from:
                  solaris
                      origin:  http://192.168.1.222/
DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
Completed                            183/183   33556/33556  222.2/222.2  328k/s

PHASE                                          ITEMS
Installing new actions                   46825/46825
Updating package state database                 Done 
Updating image state                            Done 
Creating fast lookup database                   Done 
Installation: Succeeded

        Note: Man pages can be obtained by installing pkg:/system/manual

 done.

        Done: Installation completed in 1096.528 seconds.


  Next Steps: Boot the zone, then log into the zone console (zlogin -C)

              to complete the configuration process.

Log saved in non-global zone as /zones/webzone/root/var/log/zones/zoneadm.20130812T145306Z.webzone.install

インストールが完了したら、webzoneを起動して、そのコンソールにログインできます。

root@solaris:~# zoneadm -z webzone boot; zlogin -C webzone

[Connected to zone 'webzone' console]
Loading smf(5) service descriptions: 116/116
Hostname: webzone

webzone console login: zuser
Password: oracle1
Oracle Corporation      SunOS 5.11      11.1    September 2012

ここで、"~."を使用してコンソールを終了しましょう。

zuser@webzone:~$ exit

logout
webzone console login: ~.
[Connection to zone 'webzone' console closed]

webzoneのネットワークのセットアップ

ここで、webzoneネットワークをセットアップし、zloginを使用してもう一度ログインしなおす必要があります(リスト3を参照)。-Cオプションを使用しないこと、つまりコンソールに接続しないことに注意してください。また、rootロールを使用して直接接続することに注意してください。ここでもまたipadmおよびdladmコマンドを使用して、最初のネットワーク設定のクイック・チェックを実行します。

root@solaris:~# zlogin webzone
[Connected to zone 'webzone' pts/3]
Oracle Corporation      SunOS 5.11      11.1    September 2012
root@webzone:~# ipadm
NAME              CLASS/TYPE STATE        UNDER      ADDR
lo0               loopback   ok           --         --
   lo0/v4         static     ok           --         127.0.0.1/8
   lo0/v6         static     ok           --         ::1/128
root@webzone:~# dladm
LINK                CLASS     MTU    STATE    OVER
webint0             vnic      9000   unknown  ?
net0                vnic      1500   up       ?

リスト3

またIPアドレスは構成していませんが、使用可能なデータリンクが2つあります。zonecfgを使用してインタフェースを1つしか構成していないのに2つあるのは、2つ目のネットワーク・インタフェース(net0)が自動的に構成されるためです。zonecfgを使用してネットワークを何も構成していなくても、自動データリンクのnet0は構成されます。

ここで、このゾーンのIPインタフェースを構成しましょう。外部との通信用にインタフェースが1つ必要ですが、これにはnet0を使用します。静的IPアドレスを割り当てます(ただし、ここで必要に応じてDHCPも使用できることに注意してください)。

root@webzone:~# ipadm create-ip net0
root@webzone:~# ipadm
NAME              CLASS/TYPE STATE        UNDER      ADDR
lo0               loopback   ok           --         --
   lo0/v4         static     ok           --         127.0.0.1/8
   lo0/v6         static     ok           --         ::1/128
net0              ip         down         --         --

IPスタックとしてnet0と表示されていますが、まだIPアドレスはありません。では、IPアドレスを割り当てましょう。

root@webzone:~# ipadm create-addr -T static -a 192.168.1.225/24 net0
net0/v4
root@webzone:~# ipadm
NAME              CLASS/TYPE STATE        UNDER      ADDR
lo0               loopback   ok           --         --
   lo0/v4         static     ok           --         127.0.0.1/8
   lo0/v6         static     ok           --         ::1/128
net0              ip         ok           --         --
   net0/v4        static     ok           --         192.168.1.225/24

ここで、新しく作成したネットワーク上の大域ゾーンに対してpingを実行しましょう。

root@webzone:~# ping 192.168.1.222
ping: sendto Network is unreachable


大域ゾーンへのpingは成功しないため、ルーティング・テーブルが正しいかどうかチェックしましょう。

root@webzone:~# netstat -nr

Routing Table: IPv4
  Destination           Gateway           Flags  Ref     Use     Interface 
-------------------- -------------------- ----- ----- ---------- --------- 
127.0.0.1            127.0.0.1            UH        2          0 lo0       
192.168.1.0          192.168.1.225        U         3          1 net0      

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

ルーティングも正しく構成されています。

この問題は、実際にOracle Solarisの"デフォルト・セキュリティ保護"機能によって発生します。この機能により、手動で作成されたネットワーク・インタフェースに厳格なファイアウォールが適用されます。前のシステム構成手順で静的ネットワークを割り当てた場合にはこの問題が発生しないことに注意してください。

では、設定を調べて、ファイアウォール・サービスを無効にしましょう。ラボの外部で、セキュリティ・ポリシーに従うために、いくつかのルールを実装することに注意してください。

root@webzone:~# ipfstat -io
block out log all
pass out quick on lo0 all
pass out quick proto udp from any to any port = bootps
block in log all
pass in quick on lo0 all
pass in quick proto udp from any to any port = bootpc
root@webzone:~# svcadm disable svc:/network/ipfilter
root@webzone:~# ping 192.168.1.222
192.168.1.222 is alive

リスト4のように、webzonedbzoneの間の内部通信用にネットワークを構成することによって、webzoneのネットワークのセットアップを完了しましょう。

root@webzone:~# ipadm create-ip webint0
root@webzone:~# ipadm create-addr -a local=10.0.3.10/24 webint0/v4
root@webzone:~# ipadm
NAME              CLASS/TYPE STATE        UNDER      ADDR
lo0               loopback   ok           --         --
   lo0/v4         static     ok           --         127.0.0.1/8
   lo0/v6         static     ok           --         ::1/128
net0              ip         ok           --         --
   net0/v4        static     ok           --         192.168.1.225/24
webint0           ip         ok           --         --
   webint0/v4     static     ok           --         10.0.3.10/24

リスト4

リスト4で、今度はipadmコマンドを異なる形式(staticではなくlocal)で使用していることに注意してください。

また、WordPressのインストール用にホスト名を/etc/hostsに追加する必要があります。

root@webzone:~# echo '10.0.3.10 webzone' >> /etc/hosts
root@webzone:~# echo '10.0.3.11 dbzone' >> /etc/hosts
root@webzone:~# cat /etc/hosts

#
# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
# Internet host table
#
::1 webzone localhost 
127.0.0.1 webzone localhost loghost 
10.0.3.10 webzone
10.0.3.11 dbzone

webzoneへのパッケージの追加

webzoneインストールの最後の手順は、パッケージの追加です。個別のパッケージ・セットをwebzonedbzoneにインストールすることもできますが、簡素化するために、AMP(Apache、MySQL、PHP)パッケージのフルセットをwebzoneにインストールし、その後にwebzoneをクローン化してdbzoneを作成します。pkgコマンドを使用します。パッケージの依存関係はすべて構成済みであり、1つの簡単なコマンドを使用するだけで必要な作業がすべて完了することに注意してください。

root@webzone:~# pkg install amp
           Packages to install: 45
           Mediators to change:  1
       Create boot environment: No
Create backup boot environment: No
            Services to change:  2

DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
Completed                              45/45     4351/4351    93.7/93.7  845k/s

PHASE                                          ITEMS
Installing new actions                     5844/5844
Updating package state database                 Done 
Updating image state                            Done 
Creating fast lookup database                   Done 

インストールされた内容を確認しましょう。

root@webzone:~# pkg list *apache*
NAME (PUBLISHER)                                  VERSION                    IFO
web/server/apache-22                              2.2.22-0.175.1.0.0.24.0    i--
web/server/apache-22/module/apache-dtrace         0.3.1-0.175.1.0.0.24.0     i--
web/server/apache-22/module/apache-fcgid          2.3.6-0.175.1.0.0.24.0     i--
web/server/apache-22/module/apache-php5           5.2.17-0.175.1.0.0.18      i-r
web/server/apache-22/module/apache-php52          5.2.17-0.175.1.0.0.24.0    i--

root@webzone:~# pkg list *php*

NAME (PUBLISHER)                                  VERSION                    IFO
web/php-52                                        5.2.17-0.175.1.0.0.24.0    i--
web/php-52/extension/php-apc                      3.0.19-0.175.1.0.0.24.0    i--
web/php-52/extension/php-idn                      0.2.0-0.175.1.0.0.24.0     i--
web/php-52/extension/php-memcache                 2.2.5-0.175.1.0.0.24.0     i--
web/php-52/extension/php-mysql                    5.2.17-0.175.1.0.0.24.0    i--
web/php-52/extension/php-pear                     5.2.17-0.175.1.0.0.24.0    i--
web/php-52/extension/php-suhosin                  0.9.29-0.175.1.0.0.24.0    i--
web/php-52/extension/php-tcpwrap                  1.1.3-0.175.1.0.0.24.0     i--
web/php-52/extension/php-xdebug                   2.0.5-0.175.1.0.0.24.0     i--
web/php-common                                    11.1-0.175.1.0.0.24.0      i--
web/server/apache-22/module/apache-php5           5.2.17-0.175.1.0.0.18      i-r
web/server/apache-22/module/apache-php52          5.2.17-0.175.1.0.0.24.0    i--

root@webzone:~# pkg list *mysql*
NAME (PUBLISHER)                                  VERSION                    IFO
database/mysql-51                                 5.1.37-0.175.1.0.0.24.0    i--
database/mysql-51/library                         5.1.37-0.175.1.0.0.24.0    i--
database/mysql-common                             0.5.11-0.175.1.0.0.24.0    i--
library/apr-util-13/dbd-mysql                     1.3.9-0.175.1.0.0.24.0     i--
web/php-52/extension/php-mysql                    5.2.17-0.175.1.0.0.24.0    i--

残りの作業は、Webサーバー・サービスを起動して、その動作を確認することだけです。

root@webzone:~# svcadm enable apache22
root@webzone:~# svcs apache22
STATE          STIME    FMRI
online          9:12:18 svc:/network/http:apache22

Oracle Solarisデスクトップで、Firefoxブラウザを開いて、アドレス行にwebzoneのIPアドレス(192.168.1.225)を入力します。"It works!"というメッセージが示されたページが表示されます。

これで、webzoneの作成および構成は完了です。次に、それをクローン化してdbzoneを作成する必要があります。これを行うには、まず、webzoneを停止する必要があります。

root@webzone:~# exit

logout

[Connection to zone 'webzone' pts/3 closed]
root@solaris:~# zoneadm -z webzone shutdown

root@solaris:~# 

演習4:データベース・レイヤーの構成

次に、データベース・サーバー・ゾーンを作成します。このゾーンをインストールする代わりに、既存のゾーンをクローン化して、時間とディスク領域を節約します。前の演習のように、ネットワークをセットアップし、構成とプロファイルを作成してから、インストールの代わりにクローニング操作を実行する必要があります。

dbzone VNICの構成

データベース・ゾーンを、webzoneに内部的にのみ接続させます。このため、前に作成して仮想スイッチに接続される仮想NICを作成します。

root@solaris:~# dladm create-vnic -l vswitch0 dbint0
root@solaris:~# dladm
LINK                CLASS     MTU    STATE    OVER
net1                phys      1500   unknown  --
net0                phys      1500   up       --
vswitch0            etherstub 9000   unknown  --
webint0             vnic      9000   up       vswitch0
dbint0              vnic      9000   up       vswitch0

dbzoneの構成

このゾーンは、アプリケーションのデータベース部分として動作するため、dbzoneと呼ぶことにします。この構成では、ゾーンを配置する場所へのパス(/zones/dbzone)とゾーンのネットワーク・インタフェース(dbint0)を設定します。また、このラボの最初に作成したデータセット(rpool/mydata)をゾーン内部で使用できるように割り当てます。

root@solaris:~#  zonecfg -z dbzone
Use 'create' to begin configuring a new zone.
zonecfg:dbzone> create
create: Using system default template 'SYSdefault'
zonecfg:dbzone> set zonepath=/zones/dbzone
zonecfg:dbzone> add net
zonecfg:dbzone:net>set physical=dbint0

zonecfg:dbzone:net> end
zonecfg:dbzone> add dataset
zonecfg:dbzone:dataset> set name=rpool/mydata
zonecfg:dbzone:dataset> end
zonecfg:dbzone> verify

zonecfg:dbzone> commit
zonecfg:dbzone> exit

次に、dbzoneのゾーン・プロファイルを作成しましょう。

root@solaris:~# sysconfig create-profile -o /root/dbzone-profile.xml


表示されるダイアログ・ボックスに、以下のパラメータを入力します。

コンピュータ名:dbzone
ネットワーク接続:None(後でゾーン内からネットワークを構成します)
タイムゾーン:該当するタイムゾーンを選択(ヒント:国を選択する際は、たとえばUnited StatesのUといったように、最初の文字を入力します)
rootパスワード:solaris11
ユーザーの実際の名前:Zone User
ユーザーID:zuser
ユーザー・パスワード:oracle1

これら以外はデフォルトのままにして、[F2]キーまたは[ESC]+[2]キーを押して続行します。

クローニングによるdbzoneのインストール

新しく作成したプロファイルによってゾーンをインストールする代わりに、今回は、webzoneをクローン化してdbzoneを作成します。

root@solaris:~# zoneadm -z dbzone clone -c /root/dbzone-profile.xml webzone
Progress being logged to /var/log/zones/zoneadm.20130812T195010Z.dbzone.clone
Log saved in non-global zone as /zones/dbzone/root/var/log/zones/zoneadm.20130812T195010Z.dbzone.clone
root@solaris:~# zoneadm list -cv

  ID NAME             STATUS     PATH                           BRAND    IP    
   0 global           running    /                              solaris  shared
   - webzone          installed  /zones/webzone                 solaris  excl  
   - dbzone           installed  /zones/dbzone                  solaris  excl  

この場合、インストールにかかる時間が大幅に短縮され、元のゾーンをコピーするだけで済みます。この方法は、新しいインスタンスを迅速にプロビジョニングできるため、クラウド環境では非常に便利です。

また、仮想化テクノロジーによって領域を非常に効率的に使用できることも重要な点です。ここで、ディスクの使用状況を見てみましょう。

root@solaris:~# zfs list rpool/zones rpool/zones/webzone rpool/zones/dbzone
NAME                 USED  AVAIL  REFER  MOUNTPOINT
rpool/zones          619M  12.0G    33K  /zones
rpool/zones/dbzone   391K  12.0G    34K  /zones/dbzone
rpool/zones/webzone  619M  12.0G    33K  /zones/webzone

リスト5

リスト5から分かるように、使用されている領域は全体で619MBであるのに、2つのゾーンを合わせると1010MBになります。これが可能である理由は、ZFSを使用しているためです。このCopy-On-Write方式のファイル・システムでは、dbzonewebzoneの差分のみがディスクに格納されます。

dbzoneのセットアップ

では、dbzoneを調べて、いくつかの最終的な構成を行いましょう。まず、両方のゾーンを起動します。

root@solaris:~# zoneadm -z webzone boot
root@solaris:~# zoneadm -z dbzone boot
root@solaris:~# zoneadm list -cv

  ID NAME             STATUS     PATH                           BRAND    IP    
   0 global           running    /                              solaris  shared
   3 webzone          running    /zones/webzone                 solaris  excl  
   4 dbzone           running    /zones/dbzone                  solaris  excl  

両方のゾーンが動作していることが分かります。ここで、dbzoneにログインし、AMPパッケージの存在と、Apache Webサーバーが動作していることを確認することで、webzoneが完全にコピーされているかどうかを調べます。

root@solaris:~# zlogin dbzone
[Connected to zone 'dbzone' pts/2]
Oracle Corporation      SunOS 5.11      11.1    September 2012
root@dbzone:~# pkg list *apache*

NAME (PUBLISHER)                                  VERSION                    IFO
web/server/apache-22                              2.2.22-0.175.1.0.0.24.0    i--
web/server/apache-22/module/apache-dtrace         0.3.1-0.175.1.0.0.24.0     i--
web/server/apache-22/module/apache-fcgid          2.3.6-0.175.1.0.0.24.0     i--
web/server/apache-22/module/apache-php5           5.2.17-0.175.1.0.0.18      i-r
web/server/apache-22/module/apache-php52          5.2.17-0.175.1.0.0.24.0    i--

root@dbzone:~# pkg list *php*
NAME (PUBLISHER)                                  VERSION                    IFO
web/php-52                                        5.2.17-0.175.1.0.0.24.0    i--
web/php-52/extension/php-apc                      3.0.19-0.175.1.0.0.24.0    i--
web/php-52/extension/php-idn                      0.2.0-0.175.1.0.0.24.0     i--
web/php-52/extension/php-memcache                 2.2.5-0.175.1.0.0.24.0     i--
web/php-52/extension/php-mysql                    5.2.17-0.175.1.0.0.24.0    i--
web/php-52/extension/php-pear                     5.2.17-0.175.1.0.0.24.0    i--
web/php-52/extension/php-suhosin                  0.9.29-0.175.1.0.0.24.0    i--
web/php-52/extension/php-tcpwrap                  1.1.3-0.175.1.0.0.24.0     i--
web/php-52/extension/php-xdebug                   2.0.5-0.175.1.0.0.24.0     i--
web/php-common                                    11.1-0.175.1.0.0.24.0      i--
web/server/apache-22/module/apache-php5           5.2.17-0.175.1.0.0.18      i-r
web/server/apache-22/module/apache-php52          5.2.17-0.175.1.0.0.24.0    i--

root@dbzone:~# pkg list *mysql*
NAME (PUBLISHER)                                  VERSION                    IFO
database/mysql-51                                 5.1.37-0.175.1.0.0.24.0    i--
database/mysql-51/library                         5.1.37-0.175.1.0.0.24.0    i--
database/mysql-common                             0.5.11-0.175.1.0.0.24.0    i--
library/apr-util-13/dbd-mysql                     1.3.9-0.175.1.0.0.24.0     i--
web/php-52/extension/php-mysql                    5.2.17-0.175.1.0.0.24.0    i--

root@dbzone:~# svcs apache22
STATE          STIME    FMRI
online          4:25:11 svc:/network/http:apache22

webzoneとまったく同じように、すべてのパッケージが存在し、Apache Webサーバーが起動して動作しています。ここで、実際にはdbzoneにApacheは不要であるため、これを停止します。

root@webzone:~# svcadm disable apache22
root@dbzone:~# svcs apache22
STATE          STIME    FMRI
offline         6:39:24 svc:/network/http:apache22

また、ネットワークの構成も完了する必要があります。webzoneですでにファイアウォールを無効にしているため、今回は無効にする必要がないことに注意してください。

root@dbzone:~# ipadm 

NAME              CLASS/TYPE STATE        UNDER      ADDR
lo0               loopback   ok           --         --
   lo0/v4         static     ok           --         127.0.0.1/8
   lo0/v6         static     ok           --         ::1/128
root@dbzone:~# dladm
LINK                CLASS     MTU    STATE    OVER
dbint0              vnic      9000   up       ?
net0                vnic      1500   up       ?
root@dbzone:~# ipadm create-ip dbint0
root@dbzone:~# ipadm create-addr -a local=10.0.3.11/24 dbint0/v4
root@dbzone:~# ping 10.0.3.10
10.0.3.10 is alive
root@dbzone:~# ping webzone
webzone is alive
root@dbzone:~# ipadm

NAME              CLASS/TYPE STATE        UNDER      ADDR
dbint0            ip         ok           --         --
   dbint0/v4      static     ok           --         10.0.3.11/24
lo0               loopback   ok           --         --
   lo0/v4         static     ok           --         127.0.0.1/8
   lo0/v6         static     ok           --         ::1/128

Q:このゾーンで/etc/hostsをセットアップしていないのに、ホスト名でwebzoneをpingできるのはなぜですか。
A:/etc/hostはすでにwebzoneでセットアップされているため、webzoneの他の内容とともにクローン化されています。

最後の作業は、データベースの構成と起動です。データベース情報用のZFSデータセットをセットアップしたことを思い出してください。そのデータセットを使用するようにMySQLを構成する必要があります。

まず、mydata ZFSデータセットがこのゾーンに正しく委任されていることを確認します。

root@dbzone:~# zfs list
NAME                       USED  AVAIL  REFER  MOUNTPOINT
mydata                      31K  11.9G    31K  /mydata
rpool                     64.0M  11.9G    31K  /rpool
rpool/ROOT                63.9M  11.9G    31K  legacy
rpool/ROOT/solaris-0      63.9M  11.9G   618M  /
rpool/ROOT/solaris-0/var   261K  11.9G  28.7M  /var
rpool/VARSHARE              19K  11.9G    39K  /var/share
rpool/export              74.5K  11.9G    32K  /export
rpool/export/home         53.5K  11.9G    32K  /export/home
rpool/export/home/zuser   32.5K  11.9G  32.5K  /export/home/zuser

ここで、/mydataディレクトリの正しい所有権をセットアップし、それを使用するようにMySQLを構成します。

root@dbzone:~# chown -R mysql:mysql /mydata
root@dbzone:~# chmod -R 700 /mydata
root@dbzone:~# svccfg -s mysql:version_51 setprop mysql/data=/mydata
root@dbzone:~# svcadm refresh mysql:version_51
root@dbzone:~# svccfg -s mysql:version_51 listprop mysql/data
mysql/data astring     /mydata


最後に、MySQLを起動して、正常に動作することを確認しましょう。MySQLの起動には少し時間がかかる場合があるため、svcsコマンドを使用してMySQLが起動していることを確認しましょう。

root@dbzone:~# svcadm enable mysql
root@dbzone:~# svcs mysql
STATE          STIME    FMRI
online          4:26:21 svc:/application/database/mysql:version_51

root@dbzone:~# mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.37 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 


演習5:WordPressアプリケーションの構成

このラボにおける作業の最後の部分は、アプリケーション(今回はWordPress)の構成と実行です。

データベース・ゾーンでMySQLインスタンスにログインしたままで、WordPressに必要なデータベースを作成しましょう。

mysql> create database wp01;
Query OK, 1 row affected (0.01 sec)

webzoneホストからoracle1というパスワードを持つユーザーwordpressのアクセス権を追加します。

mysql> grant all privileges on wp01.* to 'wordpress'@'webzone' identified by 'oracle1';
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)

mysql> quit;

Bye

以上でデータベース・ゾーンに関する作業はすべて完了したので、このゾーンから大域ゾーンにログアウトします。

root@dbzone:~# exit
logout

[Connection to zone 'dbzone' pts/2 closed]
root@solaris:~# 

ここで、WordPressバイナリをwebzone内の格納場所にコピーしましょう。webzoneの構成時に作成したネットワーク接続を使用します。

root@solaris:~# scp /root/files/wordpress-3.6.zip zuser@192.168.1.225:
The authenticity of host '192.168.1.225 (192.168.1.225)' can't be established.
RSA key fingerprint is 68:20:37:5f:fe:d8:92:e0:b4:6f:2d:53:a0:3e:c6:74.
Are you sure you want to continue connecting (yes/no)? yes
Password: oracle1
wordpress-3.6.zip    100% |**********************************************************************************
***************************|  4371 KB    00:00    
root@solaris:~#

次に、webzoneにログインして、WordPressアプリケーションを抽出します。必ず、zuserの格納場所からアーカイブをコピーまたは移動してください。


root@solaris:~# zlogin webzone
[Connected to zone 'webzone' pts/2]
Oracle Corporation      SunOS 5.11      11.1    September 2012
root@webzone:~# pwd
/root
root@webzone:~# mv /home/zuser/wordpress-3.6.zip .
root@webzone:~# unzip wordpress-3.6.zip 
Archive:  wordpress-3.6.zip
   creating: wordpress/
  inflating: wordpress/wp-settings.php  
  inflating: wordpress/wp-cron.php   

(output omitted)

inflating: wordpress/wp-includes/Text/Diff.php  
  inflating: wordpress/wp-includes/update.php  
  inflating: wordpress/wp-includes/comment.php  
  inflating: wordpress/wp-config-sample.php  
root@webzone:~# 

ここで、MySQLデータベースを使用するようにWordPressを構成する必要があります。まず、構成ファイルをコピーし、次に、以下のような変更を加えます。

root@webzone:~# cd wordpress
root@webzone:~/wordpress# cp wp-config-sample.php wp-config.php
root@webzone:~/wordpress# vi wp-config.php 

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wp01');

/** MySQL database username */
define('DB_USER', 'wordpress');

/** MySQL database password */
define('DB_PASSWORD', 'oracle1');

/** MySQL hostname */
define('DB_HOST', 'dbzone');


ここで、WordPress配布ファイルをWebサーバーのドキュメント・ルートにコピーする必要があります。

root@webzone:~/wordpress# mkdir /var/apache2/2.2/htdocs/blog
root@webzone:~/wordpress# cp -r * /var/apache2/2.2/htdocs/blog
root@webzone:~/wordpress# ls /var/apache2/2.2/htdocs/blog/
index.php   wp-activate.php    wp-comments-post.php wp-cron.php       wp-load.php  wp-settings.php xmlrpc.php
license.txt wp-admin           wp-config.php        wp-includes       wp-login.php wp-signup.php
readme.html wp-blog-header.php wp-content           wp-links-opml.php wp-mail.php  wp-trackback.php

これで、ブラウザを使用してWordPressをインストールする準備が整いました。大域ゾーンのデスクトップからブラウザを起動して、URL(http://192.168.1.225/blog/wp-admin/install.php)を入力します。残りの作業は簡単です。図3のように、ブログ名("Oracle Solaris 11 Blog")、管理者のログイン名(デフォルトでは、admin)、パスワード(solaris1など)、および電子メール・アドレスを入力します。

図3

図3:WordPressのインストール画面

図4

図4:WordPressのインストールが成功した場合の画面

ここで、選択した資格証明によって新しいブログにログインします。

図5

図5:WordPressのログイン画面

ダッシュボードが表示されたら、ブラウザ・ウィンドウの上部にある「Oracle Solaris 11 Blog」をクリックして、ブログ・ウィンドウにアクセスします。

図6

図6:WordPressのダッシュボード

図7

図7:WordPressのブログ画面

演習6:ゾーンの監視

ゾーンによって(つまりクラウドによって)使用されているリソースを監視することは、問題のデバッグはもちろん、キャパシティ・プランニングや、費用発生時にも重要です。Oracle Solaris 11では、このような監視を簡素化する機能が追加されています。ここでは、それらについて説明します。

既存のコマンドに対するゾーン関連の機能拡張

Oracle Solaris 11の一部のコマンドでは、システムを調べる際に役立つ-Zパラメータを使用できるようになりました。ここで、いくつか実行してみましょう。以下の例が大域ゾーンから実行されていることと、読みやすくするために出力の一部が省略されていることに注意してください。

psコマンドでは、プロセスが属しているゾーンを確認できるようになりました。

root@solaris:~# ps -efZ
ZONE      UID   PID  PPID   C    STIME TTY         TIME CMD
  global     root     0     0   0   Aug 11 ?           0:04 sched
  global     root     5     0   0   Aug 11 ?           1:02 zpool-rpool
  global     root     6     0   0   Aug 11 ?           0:13 kmem_task
  global     root     1     0   0   Aug 11 ?           0:01 /usr/sbin/init
  dbzone     root 12762     1   0 06:39:26 ?           0:00 /usr/lib/pfexecd
 webzone     root 11549     1   0 06:38:20 ?           0:00 /usr/lib/utmpd
 webzone   daemon 11217     1   0 06:38:11 ?           0:00 /lib/crypto/kcfd

prstatコマンドでは、ゾーン関連情報のサマリーが表示されます。

root@solaris:~# prstat -Z
ZONEID    NPROC  SWAP   RSS MEMORY      TIME  CPU ZONE                        
     0      120 3103M  703M    34%   0:26:36 1.4% global                      
     4       29  306M  108M   5.3%   0:01:57 0.2% dbzone                      
     3       38 1182M  336M    17%   0:01:02 0.2% webzone                     

zonestatコマンド

zonestatと呼ばれる新しいコマンドがあります。これは、リスト6のように、ゾーンおよびネットワーク情報を調べる場合に非常に便利です。

root@solaris:~# zonestat 5 2

Collecting data for first interval...
Interval: 1, Duration: 0:00:05
SUMMARY                   Cpus/Online: 1/1   PhysMem: 2047M  VirtMem: 3071M
                    ---CPU----  --PhysMem-- --VirtMem-- --PhysNet--
               ZONE  USED %PART  USED %USED  USED %USED PBYTE %PUSE
            [total]  0.17 17.4% 1432M 69.9% 1899M 61.8%   212 0.00%
           [system]  0.01 1.67%  449M 21.9% 1019M 33.1%     -     -
             global  0.14 14.2%  747M 36.5%  572M 18.6%   212 0.00%
             dbzone  0.00 0.47%  100M 4.88%   99M 3.22%     0 0.00%
            webzone  0.00 0.99%  135M 6.61%  207M 6.77%     0 0.00%

Interval: 2, Duration: 0:00:10
SUMMARY                   Cpus/Online: 1/1   PhysMem: 2047M  VirtMem: 3071M
                    ---CPU----  --PhysMem-- --VirtMem-- --PhysNet--
               ZONE  USED %PART  USED %USED  USED %USED PBYTE %PUSE
            [total]  0.17 17.8% 1432M 69.9% 1899M 61.8%   936 0.00%
           [system]  0.02 2.44%  449M 21.9% 1019M 33.1%     -     -
             global  0.13 13.3%  748M 36.5%  572M 18.6%   936 0.00%
             dbzone  0.01 1.01%  100M 4.88%   99M 3.22%     0 0.00%
            webzone  0.00 0.96%  135M 6.61%  208M 6.77%     0 0.00%

リスト6

リスト7のように、zonestatをゾーン内から使用することもできます。リスト6とリスト7の違いが分かりますか。

root@solaris:~# zlogin webzone
[Connected to zone 'webzone' pts/2]
Oracle Corporation	SunOS 5.11	11.1	September 2012
root@webzone:~# zonestat 5 2
Collecting data for first interval...
Interval: 1, Duration: 0:00:05
SUMMARY                   Cpus/Online: 1/1   PhysMem: 2047M  VirtMem: 3071M
                    ---CPU----  --PhysMem-- --VirtMem-- --PhysNet--
               ZONE  USED %PART  USED %USED  USED %USED PBYTE %PUSE
            [total]  0.16 16.6% 1435M 70.1% 1901M 61.9%   212 0.00%
           [system]  0.15 15.8% 1297M 63.3% 1692M 55.1%     -     -
            webzone  0.00 0.75%  138M 6.74%  209M 6.81%     0 0.00%

Interval: 2, Duration: 0:00:10
SUMMARY                   Cpus/Online: 1/1   PhysMem: 2047M  VirtMem: 3071M
                    ---CPU----  --PhysMem-- --VirtMem-- --PhysNet--
               ZONE  USED %PART  USED %USED  USED %USED PBYTE %PUSE
            [total]  0.17 17.1% 1435M 70.1% 1901M 61.9%   628 0.00%
           [system]  0.16 16.1% 1297M 63.3% 1692M 55.1%     -     -
            webzone  0.01 1.02%  138M 6.74%  209M 6.81%     0 0.00%

root@webzone:~# exit

logout

[Connection to zone 'webzone' pts/2 closed]

リスト7

zonestatのマニュアル・ページを参照して、異なる出力タイプを試してください。

演習7:リソース管理の実行

クラウドではリソース管理が非常に重要です。たとえば、アプリケーションの不正動作を制御したり、CPU単位で課金したりする場合に必要になります。多数の機能のなかでも、Oracle Solaris ZonesやOracle Solarisネットワーク・スタックによっても、リソースを制御できます。制御できる項目は多岐にわたりますが、このラボでは、Oracle Solaris Zonesによる処理能力の制御について説明します。

リソース管理のないゾーンへの負荷の適用

まず、リソース管理が実施されていないOracle Solaris Zonesを見てみましょう。これは、負荷が"集中"している場合や、複数のインスタンスでリソースがすぐに必要な場合や共有する必要がある場合にメリットがある可能性があります。ただし、クラウドでは、ほとんどの場合、リソースを割り当てる必要があります。ここで、比較のためだけに、出力を調べてみましょう。

まず、現在の状態のシステムを調べます。vmstatおよびzonestatコマンドを使用すると、リスト8のように、プロセッサの負荷が分かります。

root@solaris:~# vmstat 5 5
 kthr      memory            page            disk          faults      cpu
 r b w   swap  free  re  mf pi po fr de sr s0 s1 s2 --   in   sy   cs us sy id
 0 0 0 1497124 759028 57 233 0  0  0  0  9 13  0  0  0  465 1795  817  2  4 94
 0 0 0 1085060 430068 7  11  0  0  0  0  0  0  0  0  0  463  408  376  1  2 97
 0 0 0 1085060 430068 0   0  0  0  0  0  0  0  0  0  0  457  443  373  0  2 98
 0 0 0 1085060 430068 0   0  0  0  0  0  0  0  0  0  0  455  392  370  1  1 98
 0 0 0 1085060 430068 0   0  0  0  0  0  0  0  0  0  0  456  412  368  0  2 98

root@solaris:~# zonestat 5 2
Collecting data for first interval...
Interval: 1, Duration: 0:00:05
SUMMARY                   Cpus/Online: 1/1   PhysMem: 2047M  VirtMem: 3071M
                    ---CPU----  --PhysMem-- --VirtMem-- --PhysNet--
               ZONE  USED %PART  USED %USED  USED %USED PBYTE %PUSE
            [total]  0.12 12.2%  848M 41.4% 1232M 40.1%   212 0.00%
           [system]  0.01 1.09%  307M 15.0%  812M 26.4%     -     -
             global  0.10 10.1%  347M 16.9%  196M 6.38%   212 0.00%
             dbzone  0.00 0.56% 90.9M 4.44% 87.0M 2.83%     0 0.00%
            webzone  0.00 0.48%  102M 4.98%  136M 4.44%     0 0.00%

Interval: 2, Duration: 0:00:10
SUMMARY                   Cpus/Online: 1/1   PhysMem: 2047M  VirtMem: 3071M
                    ---CPU----  --PhysMem-- --VirtMem-- --PhysNet--
               ZONE  USED %PART  USED %USED  USED %USED PBYTE %PUSE
            [total]  0.14 14.8%  848M 41.4% 1233M 40.1%   936 0.00%
           [system]  0.01 1.03%  307M 15.0%  813M 26.4%     -     -
             global  0.13 13.0%  347M 16.9%  196M 6.38%   936 0.00%
             dbzone  0.00 0.37% 90.9M 4.44% 87.0M 2.83%     0 0.00%
            webzone  0.00 0.40%  102M 4.98%  136M 4.44%     0 0.00%

リスト8

リスト8では、vmstatから、システムの大部分がアイドル状態であることが分かります。また、zonestatは、dbzonewebzoneの両方がCPUリソースをほとんど使用していないことを示しています。

webzoneで、CPUリソースを大量に消費する簡単なスクリプトを実行しましょう。3つのインスタンスを実行して、ある程度の測定可能な負荷をシステムに適用します。

root@solaris:~# zlogin webzone "bash -c 'while true ; do date > /dev/null ; done'" &

[1] 2376
root@solaris:~# zlogin webzone "bash -c 'while true ; do date > /dev/null ; done'" &
[2] 4352
root@solaris:~# zlogin webzone "bash -c 'while true ; do date > /dev/null ; done'" &
[3] 5820

システムへの影響を見てみましょう。

root@solaris:~# vmstat 5 5
kthr      memory            page            disk          faults      cpu
 r b w   swap  free  re  mf pi po fr de sr s0 s1 s2 --   in   sy   cs us sy id
 0 0 0 1458340 728048 57 257 0  0  0  0  9 12  0  0  0  465 1697  781  2  4 94
 5 0 0 1073088 420496 2991 25178 0 0 0 0 0  0  0  0  0  508 12344 572 42 58  0
 4 0 0 1072960 420404 3001 25325 0 0 0 0 0  0  0  0  0  488 12404 573 42 58  0
 4 0 0 1072920 420484 3003 25323 0 0 0 0 0  0  0  0  0  496 12488 609 42 58  0
 4 0 0 1072896 420400 2962 24986 0 0 0 0 0  0  0  0  0  508 12341 610 42 58  0

システム時間は、58という大きな値になっています。zonestatの結果も見てみましょう。

root@solaris:~# zonestat 5 2

Collecting data for first interval...
Interval: 1, Duration: 0:00:05
SUMMARY                   Cpus/Online: 1/1   PhysMem: 2047M  VirtMem: 3071M
                    ---CPU----  --PhysMem-- --VirtMem-- --PhysNet--
               ZONE  USED %PART  USED %USED  USED %USED PBYTE %PUSE
            [total]  0.99 99.9%  854M 41.7% 1241M 40.4%   212 0.00%
           [system]  0.07 7.82%  308M 15.0%  813M 26.4%     -     -
            webzone  0.80 80.5%  106M 5.18%  139M 4.54%     0 0.00%
             global  0.11 11.2%  349M 17.0%  200M 6.53%   212 0.00%
             dbzone  0.00 0.34% 90.9M 4.44% 87.0M 2.83%     0 0.00%

Interval: 2, Duration: 0:00:10
SUMMARY                   Cpus/Online: 1/1   PhysMem: 2047M  VirtMem: 3071M
                    ---CPU----  --PhysMem-- --VirtMem-- --PhysNet--
               ZONE  USED %PART  USED %USED  USED %USED PBYTE %PUSE
            [total]  1.00  100%  855M 41.7% 1242M 40.4%   936 0.00%
           [system]  0.05 5.46%  308M 15.0%  814M 26.5%     -     -
            webzone  0.83 83.0%  106M 5.18%  139M 4.55%     0 0.00%
             global  0.11 11.0%  349M 17.0%  201M 6.54%   936 0.00%
             dbzone  0.00 0.38% 90.9M 4.44% 87.0M 2.83%     0 0.00%

リスト9

リスト9から、webzoneが使用可能なCPUリソースの83%を使用していることがはっきりと分かります。

リソース制御を追加する前に、このスクリプトを停止しましょう。

root@solaris:~# fg 1
zlogin webzone "bash -c 'while true ; do date > /dev/null ; done'"

^C
root@solaris:~# fg 2
zlogin webzone "bash -c 'while true ; do date > /dev/null ; done'"
^C
root@solaris:~# fg 3
zlogin webzone "bash -c 'while true ; do date > /dev/null ; done'"
^C


CPUリソース制御の追加

では、CPUを半分しか使用できないようにwebzoneを制限しましょう。

root@solaris:~# zonecfg -z webzone
zonecfg:webzone> add capped-cpu
zonecfg:webzone:capped-cpu> set ncpus=0.5

zonecfg:webzone:capped-cpu> end
zonecfg:webzone> verify
zonecfg:webzone> commit
zonecfg:webzone> exit

リソース制限はゾーンの再起動後にのみ適用されるため、ここでゾーンを再起動しましょう。

root@solaris:~# zoneadm -z webzone reboot
root@solaris:~# zoneadm list -iv
  ID NAME             STATUS     PATH                           BRAND    IP    
   0 global           running    /                              solaris  shared
   2 dbzone           running    /zones/dbzone                  solaris  excl  
   3 webzone          running    /zones/webzone                 solaris  excl  

リスト10のように、同じテストをもう一度実施して、出力を調べましょう。


root@solaris:~# zlogin webzone "bash -c 'while true ; do date > /dev/null ; done'" &
[1] 4305
root@solaris:~# zlogin webzone "bash -c 'while true ; do date > /dev/null ; done'" &
[2] 4545
root@solaris:~# zlogin webzone "bash -c 'while true ; do date > /dev/null ; done'" &

[3] 4747

root@solaris:~# vmstat 5 5
 kthr      memory            page            disk          faults      cpu
 r b w   swap  free  re  mf pi po fr de sr s0 s1 s2 --   in   sy   cs us sy id
 0 0 0 1419676 695904 171 1164 0 0 0  0  8 12  0  0  0  468 2298  838  3  6 90
 0 0 0 1013684 350316 1289 11358 0 0 0 0 0  0  0  0  0  482 5726  508 23 33 44
 0 0 0 1013684 350236 1248 11121 0 0 0 0 0  0  0  0  0  484 5577  510 23 32 45
 0 0 0 1013684 350224 1264 11361 0 0 0 0 0  0  0  0  0  475 5732  508 23 32 45
 1 0 0 1013692 350256 1292 11464 0 0 0 0 0  0  0  0  0  486 5769  505 23 32 45

root@solaris:~# zonestat 5 2
Collecting data for first interval...
Interval: 1, Duration: 0:00:05
SUMMARY                   Cpus/Online: 1/1   PhysMem: 2047M  VirtMem: 3071M
                    ---CPU----  --PhysMem-- --VirtMem-- --PhysNet--
               ZONE  USED %PART  USED %USED  USED %USED PBYTE %PUSE
            [total]  0.64 64.9%  919M 44.9% 1296M 42.2%   212 0.00%
           [system]  0.05 5.83%  375M 18.3%  871M 28.3%     -     -
            webzone  0.47 47.9%  103M 5.05%  136M 4.46%     0 0.00%
             global  0.10 10.7%  349M 17.0%  201M 6.54%   212 0.00%
             dbzone  0.00 0.39% 90.9M 4.44% 87.0M 2.83%     0 0.00%

Interval: 2, Duration: 0:00:10
SUMMARY                   Cpus/Online: 1/1   PhysMem: 2047M  VirtMem: 3071M
                    ---CPU----  --PhysMem-- --VirtMem-- --PhysNet--
               ZONE  USED %PART  USED %USED  USED %USED PBYTE %PUSE
            [total]  0.65 65.9%  920M 44.9% 1296M 42.2%   936 0.00%
           [system]  0.03 3.26%  375M 18.3%  871M 28.3%     -     -
            webzone  0.48 48.3%  103M 5.06%  136M 4.45%     0 0.00%
             global  0.13 13.9%  349M 17.0%  201M 6.55%   936 0.00%
             dbzone  0.00 0.42% 90.9M 4.44% 87.0M 2.83%     0 0.00%

リスト10

リスト10から、リソース制御によってwebzoneのCPU使用率が制限されたことが分かります。この演習を完了するために、スクリプトを停止し、webzoneのCPUリソース制限を解除しましょう(リソース変更を適用するために最後にwebzoneを再起度することを忘れないでください)。

root@solaris:~# fg 1
zlogin webzone "bash -c 'while true ; do date > /dev/null ; done'"
^C
root@solaris:~# fg 2
zlogin webzone "bash -c 'while true ; do date > /dev/null ; done'"

^C
root@solaris:~# fg 3
zlogin webzone "bash -c 'while true ; do date > /dev/null ; done'"
^C

root@solaris:~# zonecfg -z webzone
zonecfg:webzone-1> remove capped-cpu
zonecfg:webzone-1> verify

zonecfg:webzone-1> commit
zonecfg:webzone-1> exit
root@solaris:~# zoneadm -z webzone reboot

ゾーンには、これ以外にも、さまざまなリソース制御設定を適用できます。他のオプションについては、マニュアル・ページまたはドキュメントを参照してください。

演習8:可用性の確保

Oracle Solarisは、アプリケーションの可用性を確保するための多数の方法を提供します。単にハードウェアに組み込まれている信頼性、可用性、保守性(RAS)機能だけを利用することもできますし、Oracle Solaris Clusterが備えるすべての機能を活用して高可用性環境を実装することもできます。Oracle Solarisでは、あらゆるレベルの可用性が実現されます。ここでは、Oracle Solarisのサービス管理フレームワークについて簡単に説明します。

簡単な例として、リスト11のように、Apache Webサーバーに関連付けられたプロセスを調べましょう。

root@webzone:~# svcs -p apache22
STATE          STIME    FMRI
online          5:05:46 svc:/network/http:apache22
                5:05:46    20538 httpd
                5:05:47    20539 httpd
                5:05:48    20540 httpd
                5:05:48    20541 httpd
                5:05:48    20542 httpd
                5:05:48    20543 httpd
                5:05:48    20544 httpd

リスト11

ここで、リスト12のように、httpdプロセスを停止して、サービスの障害をシミュレートし、何が起こるか見てみましょう。


root@webzone:~# pkill httpd
root@webzone:~# svcs -p apache22
STATE          STIME    FMRI
online          5:28:01 svc:/network/http:apache22
                5:28:01    20585 httpd
                5:28:01    20586 httpd
                5:28:02    20587 httpd
                5:28:02    20588 httpd
                5:28:02    20589 httpd
                5:28:02    20590 httpd
                5:28:02    20591 httpd

リスト12

Apacheのhttpdプロセスは、まだ存在しています。リスト12をよく見ると、プロセスIDがリスト11から変更されていることと、サービスが停止後に自動的に再起動されていることが分かります。これは、サービス管理フレームワークの標準的な機能であり、Oracle Solarisがクラウドのサービスの可用性を維持する方法の一端を示しています。

演習9:環境の保護

セキュリティは常に重要ですが、共有環境と"オープン"なネットワークを持つクラウド領域では、環境の保護がさらに重要になります。

Oracle Solarisは、多数の異なるレイヤーで環境を保護する機能を備えています。データのZFS暗号化を使用することもできますし、データリンク保護によってネットワークを堅牢にすることもできます。ここでは、不変ゾーンという読取り専用環境を作成するOracle Solaris独自の機能について説明します。

webzoneの不変ゾーンへの変換

まず、webzoneを不変ゾーン(読取り専用環境)に変換しましょう。これは、構成の変更によって簡単に行うことができます。変更を適用するには、ゾーンを再起動する必要があります。


root@solaris:~# zonecfg -z webzone
zonecfg:webzone> set file-mac-profile=fixed-configuration
zonecfg:webzone> verify
zonecfg:webzone> commit
zonecfg:webzone> exit

root@solaris:~# zoneadm -z webzone reboot

必要な作業はこれだけです。これで、読取り専用環境が作成されました。

ダメージ・テストの実施

読取り専用環境内から実行できることについて見てみましょう。

root@solaris:~# zlogin webzone
[Connected to zone 'webzone' pts/2]
Oracle Corporation	SunOS 5.11	11.1	September 2012
root@webzone:~# touch /etc/a_file

touch: cannot create /etc/a_file: Read-only file system
root@webzone:~# touch /var/tmp/a_file
root@webzone:~# touch /tmp/a_file
root@webzone:~# pkg install emacs

pkg install: Could not complete the operation on /var/pkg/lock: read-only filesystem.
root@webzone:~# rm /usr/bin/vi

rm: /usr/bin/vi not removed: Read-only file system
root@webzone:~# useradd larry

/usr/lib/passmgmt: Password file(s) busy.  Try again later
/usr/lib/passmgmt: Password file(s) busy.  Try again later
/usr/lib/passmgmt: Password file(s) busy.  Try again later
UX: useradd: ERROR: Cannot update system - login cannot be created.
root@webzone:~# svcadm disable apache22
root@webzone:~# svcs apache22
STATE          STIME    FMRI
disabled        8:56:10 svc:/network/http:apache22
root@webzone:~# exit
logout

[Connection to zone 'webzone' pts/2 closed]

しかし、webzoneに変更を加える必要がある場合は、どうすればいいでしょうか。その場合は、ゾーンを読取り/書込みモードで起動できます。ただし、これは、大域ゾーン内からのみ実行できることに注意してください。そのゾーンに影響を与える大域ゾーンから更新を実行する場合にも、同様のことが発生します。


root@solaris:~# zoneadm -z webzone reboot -w
root@solaris:~# zlogin -C webzone
[Connected to zone 'webzone' console]

Hostname: webzone
webzone console login: zuser
Password: oracle1
Last login: Tue Aug 13 09:39:27 from 192.168.1.222
Oracle Corporation      SunOS 5.11      11.1    September 2012
zuser@webzone:~$ su -
Password: solaris11

Aug 14 12:02:57 webzone su: 'su root' succeeded for zuser on /dev/console
Oracle Corporation      SunOS 5.11      11.1    September 2012
root@webzone:~# touch /etc/a_file
root@webzone:~# rm /etc/a_file
root@webzone:~# exit
logout
zuser@webzone:~$ exit
logout

webzone console login: ~.
[Connection to zone 'webzone' console closed]

最後に、ゾーンを通常のモードに戻しましょう。

root@solaris:~# zonecfg -z webzone
zonecfg:webzone> clear file-mac-profile
zonecfg:webzone> verify
zonecfg:webzone> commit
zonecfg:webzone> exit

root@solaris:~# zoneadm -z webzone reboot

まとめ

以上で、このラボは完了です。このラボでは、Oracle Solarisがクラウド・インフラストラクチャの非常に優れた基盤となることについて説明しました。また、アプリケーションの迅速なデプロイ、柔軟なネットワークの構成、およびリソースの制御を容易に実行できることや、Oracle Solarisがサービスの動作を維持するしくみについて学習しました。さらに、読取り専用仮想環境の実装方法についても確認しました。これまでの作業を終えて、まだ時間に余裕がある場合は、以下のセクションを参照して、ぜひさらに多くの機能について学習を進めてください。

追加の演習

ラボを完了した後は、ぜひ以下の演習にも挑戦してみてください。

  • いくつかのネットワーク・リソース管理の割当てとそのテストの方法を確認してください。
  • もう一度webzoneのクローン化を試みて、2つのWebサーバーのロードバランサを構成してください。

参考資料

また、以下のリソースも参照してください。

リビジョン1.0、2013年11月22日

フォロー先:
ブログ | Facebook | Twitter | YouTube

false