グローバルゾーン上に各ノングローバルゾーンに対応するクラスタアプリケーションを構築します。本節の作業は各ノングローバルゾーンに対して実施してください。
“16.3.2 グローバルゾーン上のクラスタアプリケーションの作成”で作業用アプリケーションを作成した場合はRMSを停止し、作成した作業用クラスタアプリケーションを削除します。クラスタアプリケーションのみ削除し、リソースの削除は実施しないでください。
ノングローバルゾーン、およびノングローバルゾーンに構成したクラスタアプリケーションをグローバルゾーンから制御するためのCmdlineリソースを作成します。
ノングローバルゾーン内のアプリケーション監視を行う場合(ただしシングルノードクラスタ運用を除く)
Cmdlineリソースを作成します。
Cmdlineの作成の「作成方法」で「パス入力」を選択し、Startスクリプト、Stopスクリプト、Checkスクリプトはそれぞれ以下のように設定してください。
Startスクリプト
/opt/SMAW/bin/hvzone -c -z <zone_name> -a <app_name> {-s|-n} -t <timeout> -b {Solaris8|Solaris9}
Stopスクリプト
/opt/SMAW/bin/hvzone -u -z <zone_name> -a <app_name> {-s|-n} -t <timeout> -b {Solaris8|Solaris9}
Checkスクリプト
/opt/SMAW/bin/hvzone -m -z <zone_name> -a <app_name> {-s|-n} -t <timeout> -b {Solaris8|Solaris9}
上記の違いは-c, -u, -mのオプション部分のみです。<zone_name>、<app_name>には制御対象のゾーン名とノングローバルゾーンで設定したクラスタアプリケーション名をそれぞれ指定します。
<timeout>には、シャットダウン処理のタイムアウト値を秒単位で指定します。Offline処理の際、このスクリプトはRMSの停止、ノングローバルゾーンの停止を行ないますが、ここで指定した時間が経過してもその処理が終了しない場合、zoneadmのhaltコマンド(zoneadm -z <zone_name> halt)によりノングローバルゾーンを停止させます。
ノングローバルゾーンをクラスタノード間で共有する場合、-sオプションを指定してください。共有しない場合、-nオプションを指定してください。
以下に例を示します。この例では、グローバルゾーンで、ゾーン名をzone1、ノングローバルゾーンのクラスタアプリケーション名をuserApp_0、タイムアウト値を200秒、ノングローバルゾーンをクラスタノード間で共有する構成としています。
Solaris 8コンテナを制御する場合には、最後にオプションで-b Solaris8を追加してください。
Solaris 9コンテナを制御する場合には、最後にオプションで-b Solaris9を追加してください。
以下に例を示します。この例では、Solaris 9コンテナで、ゾーン名をzone1、ノングローバルゾーンのクラスタアプリケーション名をuserApp_0、タイムアウト値を200秒、ノングローバルゾーンをクラスタノード間で共有する構成としています。
Startスクリプト
/opt/SMAW/bin/hvzone -c -z zone1 -a userApp_0 -s -t 200 -b Solaris9
Stopスクリプト
/opt/SMAW/bin/hvzone -u -z zone1 -a userApp_0 -s -t 200 -b Solaris9
Checkスクリプト
/opt/SMAW/bin/hvzone -m -z zone1 -a userApp_0 -s -t 200 -b Solaris9
その後、スクリプトの属性を設定します。「Flag」ボタンをクリックし、以下の値を設定してください。
Flag | 概要 |
ALLEXITCODES | “Yes”に変更してください。 |
AUTORECOVER | シングルノードクラスタ運用の場合、"Yes"に設定してください。“Yes”の場合、以下のリソースは設定しないでください。なお、以下のリソースは複数ノード間でIPアドレスを引き継ぐために使用されるため、シングルノードクラスタでは不要です。
|
STANDBYCAPABLE | ノングローバルゾーンをクラスタノード間で共有しない場合、”Yes”に変更してください。 |
TIMEOUT | デフォルト値は300秒です。ノングローバルゾーンのシステム起動シーケンスが全て完了し、ノングローバルゾーン内に定義されたクラスタアプリケーションがOnline状態となるまでにかかる時間よりも大きな値を設定してください。目安は900秒です。 |
ノングローバルゾーン内のアプリケーション監視を行わない場合、または、シングルノードクラスタ運用の場合
start_zone.shスクリプト、stop_zone.shスクリプト、check_zone.shスクリプトの配置
スクリプトファイルをCmdlineリソース毎に作成します。また、Cmdlineリソースを使用するすべてのノードに対してスクリプトファイルを作成します。
以降は、以下の場合の例です。内容は要件に応じて変更してもかまいません。
Startスクリプト:/var/tmp/PCL/rmstools/start_zone.sh
Stopスクリプト:/var/tmp/PCL/rmstools/stop_zone.sh
Checkスクリプト:/var/tmp/PCL/rmstools/check_zone.sh
なお、Solaris 8コンテナまたはSolaris 9コンテナを制御する場合にはコメントにしたがってstart_zone.shの内容を編集してください。
スクリプトファイルの作成
# vi /var/tmp/PCL/rmstools/start_zone.sh
(以下のStartスクリプトファイルの内容を貼り付ける) # vi /var/tmp/PCL/rmstools/stop_zone.sh
(以下のStopスクリプトファイルの内容を貼り付ける) # vi /var/tmp/PCL/rmstools/check_zone.sh
(以下のCheckスクリプトファイルの内容を貼り付ける) # chmod +x /var/tmp/PCL/rmstools/start_zone.sh
# chmod +x /var/tmp/PCL/rmstools/stop_zone.sh
# chmod +x /var/tmp/PCL/rmstools/check_zone.sh
Startスクリプト
#!/bin/sh MYZONE=$1 zoneadm -z $MYZONE list -p | grep :configured: if [ $? -eq 0 ]; then zoneadm -z $MYZONE attach -F || exit $? fi zoneadm -z $MYZONE list -p | grep :running: if [ $? -eq 0 ]; then zoneadm -z $MYZONE reboot RET=$? else # Remove # of the below line if MYZONE is Solaris 8 container # /usr/lib/brand/solaris8/s8_p2v $MYZONE # Remove # of the below line if MYZONE is Solaris 9 container # /usr/lib/brand/solaris9/s9_p2v $MYZONE zoneadm -z $MYZONE boot RET=$? fi exit $RET
Stopスクリプト
#!/bin/sh MYZONE=$1 RET=0 RET2=0 zoneadm -z $MYZONE list -p | grep :running: if [ $? -eq 0 ]; then zoneadm -z $MYZONE halt RET=$? fi zoneadm -z $MYZONE list -p | grep :installed: if [ $? -eq 0 ]; then zoneadm -z $MYZONE detach RET2=$? fi if [ $RET -eq 0 ]; then exit $RET2 fi exit $RET
Checkスクリプト
#!/bin/sh # Return Offline if zlogin to the NGZ does not end in 30 seconds (Please change if needed) TIMEOUT=30 MYZONE=$1 zoneadm -z $MYZONE list -p | grep :running: > /dev/null 2>&1 RET=$? if [ $RET -ne 0 ]; then exit $RET fi /usr/sbin/zlogin $MYZONE "/usr/bin/ls >/dev/null 2>&1" 2>/dev/null & PID=$! i=0 while [ $i -lt $TIMEOUT ] do ps -p $PID > /dev/null 2>&1 if [ $? -ne 0 ]; then wait $PID exit $? fi sleep 1 i=`expr $i + 1` done exit 1
Cmdlineリソースの作成
Cmdlineの作成の「作成方法」で「パス入力」を選択し、Startスクリプト、Stopスクリプト、Checkスクリプトをそれぞれ以下のように設定してください。(ゾーン名をzone1とした場合)
Startスクリプト
/var/tmp/PCL/rmstools/start_zone.sh zone1
Stopスクリプト
/var/tmp/PCL/rmstools/stop_zone.sh zone1
Checkスクリプト
/var/tmp/PCL/rmstools/check_zone.sh zone1
その後、スクリプトの属性を設定します。「Flag」ボタンをクリックし、以下の値を設定してください。
Flag | 概要 |
---|---|
AUTORECOVER |
|
共有IPゾーンのノングローバルゾーンを使用し、かつ、サーバ間でノングローバルゾーンのイメージを共有しない場合、グローバルゾーンで引継ぎIPアドレスのためのリソースを作成します。手順については、“13.2.5 グローバルゾーン上のクラスタアプリケーション再設定”の“16.2.5.3 共有IP制御用Cmdlineリソースの作成”を参照してください。
注意
Solaris 8コンテナ環境、および Solaris 9コンテナ環境では、引継ぎIPアドレスにIPv6アドレスを使用することはできません。
あらかじめグローバルゾーンに登録していたGdsリソース、Glsリソース、Fsystemリソースに加えて「3.5.2 ノングローバルゾーン制御用Cmdlineリソースの作成」で作成したCmdlineリソースを加えて、対象のノングローバルゾーンに対応するクラスタアプリケーションを作成してください。
クラスタアプリケーションを作成するには、ノングローバルゾーンが停止している必要があります。
ノングローバルゾーンが動作中の場合は、以下の手順でクラスタアプリケーションの制御対象となるノングローバルゾーンを、全てのクラスタノードで停止してから、クラスタアプリケーションを作成してください。
# zlogin zone-a shutdown -i0 -g0 -y
クラスタアプリケーションの作成手順は“6.7.2.1 スタンバイ運用のクラスタアプリケーション作成”に従いますが、以下の点が異なります。
クラスタアプリケーションの属性
ウォームスタンバイの場合、“StandbyTransitions”を必ず“ClearFaultRequest|StartUp|SwitchRequest”に設定してください。