StepbystepS10Zoneのソース
#freeze
[[Solarisステップbyステップページに戻る>stepbystep]]
目次
#contentsx
----
** Solaris 10 Zone [#yc9ecd22]
***1.Zones 概要 [#y47c81ad]
1)Zones の概念
~Solaris Zonesは、物理的にひとつのserver上に、複数の仮想serverを実現する画期的な新機能です。
~つまり、serverがひとつしかなくても、複数の仮想serverによって、複数のシステムを独立、分離した
~状態で運用することが可能です。それぞれの仮想serverは、設定、セキュリティ、管理、システムリソース
~を含め、お互いに影響を与え合うことなく動作します。この機能により、ユーザは、多数のマシンに対する
~コストや管理の複雑さから解放され、より大規模でスケーラビリティを備えたserver machine上で、
~複数のシステムを統合的に運用することが可能になるのです。
~この仮想serverをzoneと呼びます。各zoneは、他のzoneから隔離されておりお互いを意識することは
~ありません。各々のzoneは、異なるroot passwordを持ち、各zoneのroot userは、自分のzoneの
~外側に対しては何もすることができません。
~
~
2)global zone と non-global zone
~zoneには、"global zone"と "non-global zone"の2種類があります。
~Solars10をインストールしたその環境がglobal zone、
~その上に構築される仮想serverがnon-global zoneです。
~
- 特徴
-- "global zone"
~non-global zoneを定義、インストール、管理、アンインストールし、
~ハードウェアのbootができる唯一の環境。
~すべてのzoneのプロセスやファイルにアクセスすることができます。
-- "non-global zone"
~他のzoneの存在を全く認識しません。non-global zone自身の、
~host name, file system,IP addressなどを持ちます。
~global zoneの上に、複数のnon-global zoneを作成することができます。
3)Zones 開発エピソード
Andrew Tucker -- Solaris Zones Architect のコメントより抜粋
「Zonesの元々のアイディアは、数年前に、我々がサーバの統合について
顧客と話をしていた時に始まりました。その時点で、Solaris OSには、いくつかの
リソース管理機能、例えば、管理者が異なるアプリケーションに対して、どのように
CPUを割当てるかを制御できるようにする、といった機能が追加されていました。
顧客は、自分たちのサーバの利用率を向上させることに、とても興味はあったのだど、
ひとつのマシン上で複数のアプリケーションを"stack"したり、統合することができな
かった。その原因のうちいくつかは、リソース割当てに関するものだったが、多くの
ところは、アプリケーションを、configuration, security, そして administrationの
点においても独立させる必要があったからでした。
これらの問題を解決するために、開発したのがZonesなのです。」
*** 2.zoneの作成 (zonecfg) [#n42edd77]
non-global zoneを作成する手順を説明します。
<index>
設定項目、オペレーションは、次の順番になっています。
1.zone name 2)
2.create 3)
3.zone path 4)
4.inherit-pkg-dir 5)-7)
5.file system 8)-12)
6.autoboot value 13)
7.network virtual interface 14)-17)
8.resource pool 18)
9.zone-wide resource control 19)-22)
10.comment 23)-27)
11.export 28)
12.verify 29)
13.commit 30)
14.exit 31)
<step by step>
説明を読みながら、ご自分の環境でオペレーションをお試しください。
~準備)あらかじめ、superuserになるか、Primary Administrator roleになっておきます。
1)現在のzone設定について状況を確認します。
# zoneadm list -vc
次の表示より、ユーザーが何もしなくても、システムがglobal zoneとして
既に、稼働状態にあることがわかります。
ID NAME STATUS PATH
0 global running /
以下、この環境へ新たにnon-global zoneを作成する手順を説明します。
2)最初に、zone nameを登録します。
~command lineに、次のように入力します。
~ここでは、myzone という名前のnon-global zoneを登録します。
~各zone nameはuniqueでなければなりません。
# zonecfg -z myzone
~新しいzoneを定義する都度、次のようなシステムメッセージが
~表示されます。エラーメッセージではありません。
myzone: No such zone configured
Use 'create' to begin configuring a new zone.
3)新しいzone(ここでは myzone)の作成を行います。
プロンプトに作業対象となるzone nameが表示されます。
zonecfg:myzone> create
4)myzoneのzone pathを設定します。
~zone pathには、各non-gloal zoneのrootとなるpathで、
~global zoneに実存するpathを割り当てます。
~ここでは、例として、/export/home/myzone に設定します。
zonecfg:myzone> set zonepath=/export/home/myzone
5) shared file system の設定を行います。
~"inherit-pkg-dir"とは、packaged softwareを含むディレクトリを
~non-global zoneでも使用できるよう、共有するためにmountする
~shared file systemです。
~ユーザが任意のディレクトリを設定できるようになっているほか、
~default inherit-pkg-dir resources として、次の4つが、
~あらかじめシステムにより設定されています。
/lib
/platform
/sbin
/usr
~mount optionは、read-only loopback file system (LOFS)固定に
~なっておりユーザが指定する必要はありません。
zonecfg:myzone> add inherit-pkg-dir
6) inherit-pkg-dirの設定プロンプトに変わります。
~global zoneにある/opt/sfwを、read-onlyモードでmyzoneにmount
~します。
zonecfg:myzone:inherit-pkg-dir> set dir=/opt/sfw
~[注]zone's packaging databaseが、inherit-pkg-dirに登録された
~packaged softwareを保持するので、zoneadmでnon-global zoneが
~インストールされた後には、これらのpackaged softwareを修正したり、
~削除することはできません。
7) shared file system の設定を終了します。
zonecfg:myzone:inherit-pkg-dir> end
~[注]5)?7)までの設定は、shared file systemの数だけ、
~繰り返し行うことができます。
8)今度は、file systemを登録します。
~"fs"とは、各non-global zoneで自由に設定できる仮想file systemで、
~read-writeに用いられます。各non-global zoneは、複数のfsを持つことが
~可能であり、他のnon-global zoneからは完全に独立しています。
~global zoneに実在するpathをnon-global zoneの任意のmount point(path)に
~設定し作成します。
~fsには、loopback file system (LOFS)を始め、様々なoptionがあります。
zonecfg:myzone> add fs
9)file system設定のプロンプトに変わります。
~myzone側のfile systemのmount pointとして、ここでは/usr/localを
~指定します。(/usr/localはmyzoneのpathとなります。)
zonecfg:myzone:fs> set dir=/usr/local
10)9)で設定したmount point /usr/localへ、global zoneのfile systemに実存する/opt/localをmountします。
~これで、myzoneにて、/usr/local file systeを読み書きできるようになります。
zonecfg:myzone:fs> set special=/opt/local
11)このfile systemの typeを指定します。
~このように、global zoneに実在するfile systemを、新たに仮想file system
~として、non-global zoneで利用する場合には、loopback file system(lofs)を
~設定します。
zonecfg:myzone:fs> set type=lofs
12)file system の設定を終了します。
zonecfg:myzone:fs> end
endを実行するとfile systemの設定モードを抜けます。
~[注]8)?12)までの設定は、file systemの数だけ、
~繰り返し行うことができます。
13)autoboot valueの設定。
~デフォルトはfalseですが、ここではglobal zoneがbootしたら
~myzoneも自動的にbootするよう、trueに設定します。
zonecfg:myzone> set autoboot=true
14) network virtual interfaceを登録します。
~[注]14)?17)の設定には、myzone専用として割り当て可能な新しい
~IP addressが必要となります。
~もし、利用可能なIP addressがあいていない場合は、
~トライアルが目的のオペレーションなので、これらのステップは
~省略しても構いません。
~但し、実環境でzoneを使用する場合には、必ず設定を行ってください。
~各々のzoneは、globalもnon-globalも、networkへの接続が必要で、
~それぞれ専用のIP addressを持つ必要があります。
zonecfg:myzone> add net
15) IPaddressを設定します。
~(例)として、111.111.111.111を使用しました
zonecfg:myzone:net> set address=111.111.111.111
16) 15)で設定したIPaddressに対応する physical device typeをnetwork interfaceにセットします。
~ここでは、hme0とします。
~[注] physical device の確認の方法。
~コマンドラインにて
# ifconfig -a
出力例:
lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1
inet xxx.xxx.xxx.xxx netmask ffff0000
hme0: flags=1000863<UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
inet xxx.xxx.xxx.xxx netmask ffff0000 broadcast xxx.xxx.xxx.xxx
zonecfg:myzone:net> set physical=hme0
17) network virtual interfaceの設定を終了します。
zonecfg:myzone:net> end
~[注]14)?17)までの設定は、network interfaceの数だけ、
~繰り返し行うことができます。
18)resource poolとの関連づけを行います。
~(例)として、default poolと結びつけます。
~[注]resource poolsは、Resource Managementのひとつで、
~system resoureceを分割管理し、各々のworkloadがお互いに
~影響を与え合わないようにする機能です。
~詳細は、後日、このコーナーで紹介する予定です。
~そのときに、zoneとの関連を明らかにしていきます。
zonecfg:myzone> set pool=pool_default
19) zone-wide resource controlを設定します。
zonecfg:myzone> add rctl
20) ここでは、CPU resourceを示すzone.cpu-sharesを登録します。
zonecfg:myzone:rctl> set name=zone.cpu-shares
21) zone.cpu-sharesに設定値を与えます。
~()内のパラメータは順に、privilege, share limit, 負荷が、敷居値に
~達したときのactionとなっています。
zonecfg:myzone:rctl> add value (priv=privileged,limit=20,action=deny)
22) resource controlの設定を終了します。
zonecfg:myzone:rctl> end
23) attrというresourece typeを使用してcommentの登録をします。
zonecfg:myzone> add attr
24) commentという名称をname設定します。
zonecfg:myzone:attr> set name=comment
25) typeには、stringを設定します。
zonecfg:myzone:attr> set type=string
26) zoneの説明コメントのための値を設定します。
zonecfg:myzone:attr> set value="This is my work zone."
27) commentの設定を終了します。
zonecfg:myzone:attr> end
28) ここまでの設定を確認することができます。
~当オペレーションは省略可能です。
zonecfg:myzone:attr> export
次のように設定値が表示されます。(例)
zonecfg:myzone> export
create -b
set zonepath=/export/home/myzone
set autoboot=true
set pool=pool_default
add inherit-pkg-dir
set dir=/lib
end
add inherit-pkg-dir
set dir=/platform
end
add inherit-pkg-dir
set dir=/sbin
end
add inherit-pkg-dir
set dir=/usr
end
add inherit-pkg-dir
set dir=/opt/sfw
end
add fs
set dir=/usr/local
set special=/opt/local
set type=lofs
end
add rctl
set name=zone.cpu-shares
add value (priv=privileged,limit=20,action=deny)
end
add attr
set name=comment
set type=string
set value="This is my work zone."
end
29) ここまでに登録した設定の整合性を、システムが検証します。
zonecfg:myzone> verify
30) 設定をメモリからstable storageへ書き込みます。
zonecfg:myzone> commit
31) zonecfgを終了します。
zonecfg:myzone> exit
~これで一連の、non-global zone設定オペレーションが完了し、
~zonecfgモードから抜けます。
32) command lineにて、1)で行ったzoneの状況確認
オペレーションを再度実行します。
# zoneadm list -vc
~1)と比較すると、myzoneという名称のnon-global zoneが
~追加登録されていることが分かります。
ID NAME STATUS PATH
0 global running /
- myzone configured /export/home/myzone
以上が、non-global zone作成の為の基本的な流れです。
~補足)今回作成したnon-global zone(myzone)は、次回の説明オペレーションで
~ 使用するので、このままの状態にしておいてください。
~ ユーザは、logoutしても問題ありません。
~ 事情により、non-global zoneを削除したい場合は、次のオペレーション
~ を行ってください。
~ ここでは、確認を求めてから削除するオペレーションを紹介します。
# zonecfg -z myzone delete
次の表示に対し、yを入力してください
Are you sure you want to delete zone myzone (y/[n])? y
~32)のオペレーションで、myzoneが削除されていることが確認できます。
*** 3.zoneの起動 (zoneadm) [#ab5f0544]
~non-global zoneをinstall,bootする手順を説明します。
~<step by step>以下の
~オペレーションは、global zoneのコマンドラインにて実行してください。
<index>
この章の設定項目、オペレーションは、次の順番になっています。
1.Install a zone 1)-2)
2.Boot a zone 3)-4)
3.Reboot a zone 5)-7)
4.Halt a zone 8)-9)
5.Uninstall a zone 10)-11)
~<step by step>
~ 説明を読みながら、ご自分の環境でオペレーションをお試しください。
~準備1)あらかじめ、superuserになるか、Primary Administrator roleに
~ なっておきます。
~準備2)前回作成したmyzoneで設定した次の4つのdirectoryが、
~ global zoneに存在しなければ、作成しておきます。
/export/home/myzone (permission 700)
/opt/sfw
/opt/local
/usr/local
~ [注]既に存在すればこのステップは必要ありません。
# mkdir /export/home/myzone; mkdir /opt/sfw; mkdir /opt/local; mkdir /usr/local
# chmod 700 /export/home/myzone
~復習)現在のzone設定について状況を確認します。
# zoneadm list -vc
~前回作成したmyzoneというnon-global zoneが、configuredの状態に
~なっています。
ID NAME STATUS PATH
0 global running /
- myzone configured /export/home/myzone
1)既にconfiguredの状態になっているmyzoneに、実際の環境を
~ 反映させるためにinstallを行います。
# zoneadm -z myzone install
~次のようなメッセージが出力されます。
~myzoneのroot pathの下に、zoneのroot file systemに必要なファイルと
~ディレクトリが作成されます。
~なお、このオペレーションが完了するのに、30分?1時間以上かかる
~場合があります。
~ [注]'pool_default'は、現時点ではactiveになっていないので、
~ WARNINGメッセージが出力されます.
~ これ以降のオペレーションでも、同様のWARNINGが検出されますが
~ この章では無視してください。
zoneadm: zone 'myzone': WARNING: pools facility not active;
zone will not be bound pool_default'.
Preparing to install zone <myzone>.
Creating list of files to copy from the global zone.
Copying <2397> files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <1016> packages on the zone.
Initializing package <527> of <1016>: percent complete: 51%
===> install完了時に最後の2行は、次のように変わります。
Initialized <1016> packages on zone.
Successfully initialized zone <myzone>.
~ [注]もし、エラーメッセージが出力され、zoneのinstallに失敗した
~ 場合には、コマンドラインにて"zoneadm list -vc"を実行し、
~ myzoneのSTATUSを確認します。もし、STATUSがconfiguredの
~ ままならcommand実行中に不具合が発生した可能性があるので
~ 1)のオペレーションを再度行ってください。。
~ STATUSがincompleteの場合は次のオペレーションによりuninstallを
~ 実行した後、installオペレーションで出力されたメッセージに
~ 従って修正を行った後、再度1)のオペレーションを行います。
~ uninstallの方法は、下記10)を参照してください。
2)install後のzoneのSTATUSを確認します。
# zoneadm list -vc
~前回作成したmyzoneというnon-global zoneが、installedの状態に
~なっています。
ID NAME STATUS PATH
0 global running /
- myzone installed /export/home/myzone
3)bootすることにより、zoneをrunningの状態にします。
~ zoneのbootはここで紹介したinstalled STATUSの他に
~ ready STATUSからでも可能です。
# zoneadm -z myzone boot
4)boot後のzone設定について、状況を確認します。
# zoneadm list -vc
~下記のように、表示されます。(例)
~STATUSがinstalledからrunningの状態になっています。
~また、myzoneに対して、固有のzoneID(ここでは1)がシステムにより
~割り当てられます。
ID NAME STATUS PATH
0 global running /
1 myzone running /export/home/myzone
~以上が、non-global zoneを起動するまでの基本的な流れです。
~以降に、non-global zoneを必要に応じて、reboot, halt, uninstallするための
~オペレーションを記します。
~次章「4.zoneへのlogin」へ進む場合には、uninstallは実行しないでください。
~もし、uninstallした場合には、再度install, bootオペレーションが必要となります。
5)rebootの方法。
~ 現状のSTATUSがrunningになっていることを確認します。
# zoneadm list -vc
ID NAME STATUS PATH
0 global running /
1 myzone running /export/home/myzone
6)rebootを実行します。しばらくすると、コマンドプロンプトが戻ってきます。
# zoneadm -z myzone reboot
7)現状のSTATUSが再びrunningになっていることを確認します。
# zoneadm list -vc
ID NAME STATUS PATH
0 global running /
2 myzone running /export/home/myzone
~ [注]global zoneのIDは、常に0で固定ですが、non-global zoneは、
~ bootの都度、新しいIDがシステムにより自動的に割り当てられます。
8)haltの方法。
# zoneadm -z myzone halt
9)halt後のzone設定について、状況を確認します。
# zoneadm list -vc
~下記のようにSTATUSがrunningからinstalledに戻っています。
~また、zoneIDも取り消されています。
ID NAME STATUS PATH
0 global running /
- myzone installed /export/home/myzone
10)Uninstallの方法。
~ 必ず、zoneがinstalled STATUSの状態で実行してください。
~ (running のままだとエラーになります。)
# zoneadm -z myzone uninstall -F
11)現在のzoneの状態を確認します。
# zoneadm list -vc
次のように、install前の状態に戻っています。
ID NAME STATUS PATH
0 global running /
- myzone configured /export/home/myzone