Glynn Foster著
svcbundle
について説明し、開発者と管理者がsvcbundleを使用して、より迅速に、アプリケーションをSMFに統合する方法を示します。2012年10月公開
Oracle Solaris 11でsvcbundle
が導入されたことにより、マニフェストとプロファイルの作成がさらに容易になり、Service Management Facility(SMF)と統合する際に使用されるXMLファイル形式の完全な知識を必要とすることなく、アプリケーションの自動再起動のメリットを活かすことができます。
|
Oracle Solaris 10で初めて導入されたSMFは、システムやアプリケーション・サービスを管理するためのオペレーティング・システムの機能であり、Oracle Solarisの以前のリリースや他のUNIXオペレーティング・システムで一般的だった、従来のinit
スクリプトによる起動メカニズムに取って代わるものです。 SMFは、ハードウェアやソフトウェアのどれが故障しても、必要なシステム・サービスとアプリケーション・サービスが稼働し続けるようにすることで、システムの可用性を改善します。 SMFは、より広範なOracle Solarisの予測的自己修復機能のコンポーネントの1つです。
この記事では、Oracle Solaris 11.1で新たに導入されたsvcbundle
ユーティリティについて説明し、このユーティリティを使用して、アプリケーションをSMFにより迅速に統合する方法を示します。 SMFに精通していない場合は、先行記事として、" Introducing the Basics of Service Management Facility (SMF) on Oracle Solaris 11"および" Advanced Administration with the Service Management Facility (SMF) on Oracle Solaris 11"を参照することをお勧めします。
SMFの根幹には、サービス・バンドルという概念があります。これは、XMLベースのファイルで、サービスまたはサービスのインスタンスに関するすべて(その構成を含む)を記述するために使用します。記述後、SMF構成リポジトリにインポートして、実行中のシステムで使用します。 サービス・バンドルは、Oracle Solarisにサービスを提供するために使用しますが、カスタム構成をさまざまな種類のシステムに提供する場合にも役立ちます。
SMFで使用されるサービス・バンドルのタイプには、マニフェストとプロファイルの2つがあります。
/lib/svc/manifest
内にあり、システムの再起動中に自動的にSMF構成リポジトリにインポートされます。または、svc:/system/manifest-import:default
サービスを再起動すると、手動でインポートできます。/etc/svc/profiles
内にあり、システムの再起動中に適用されます。または、マニフェストの場合と同様に、svc:/system/manifest-import:default
サービスを再起動することで、手動で適用できます。svcbundle
を使用したアプリケーションのSMFへの統合"How to Migrate Control of System Services from Scripts to the Service Management Facility"では、/usr/share/lib/xml/dtd/service_bundle.dtd.1
にあるXML DTDに従って、SMFマニフェストを最初から作成する(または既存のシステム・マニフェストからコピーして変更する)方法について説明します。 ただし、Oracle Solaris 11.1では、XMLファイル形式の知識がなくても、使いやすい新たなsvcbundle
コマンドライン・ユーティリティを利用すれば、SMFマニフェストまたはシステム・プロファイルを作成できます。
svcbundle
を使用すると、一般的なシナリオでマニフェストまたはシステム・プロファイルを作成でき、任意でインストールできます。 そのため、svcbundle
は数多くのシンプルな想定のもとで、一般的なシナリオに対処します。
svc.startd
とともに使用します。svc:/milestone/multi-user
サービスの依存性の自動管理により、システム・ブート・プロセスでサービスが早く起動してしまうことがなくなります。start
およびrestart
のexecメソッドのタイムアウトは、デフォルトの60
秒になります。マニフェストまたはプロファイルの各種要素の定義に使用する、一連の名前と値のペアをsvcbundle
で指定します。たとえば、サービス・インスタンス名、有効または無効にするか、さまざまなプロパティ値、start、stop、refreshの各メソッド、どのサービス・タイプにするかなどを指定します。 また、このユーティリティは、従来のRC(実行制御)スクリプトを容易にSMFに変換するのに役立ちます。
多くのコマンドライン・ユーティリティと同様に、例で示した方がわかりやすいため、svcbundle
を使用した2つの例を紹介します。
svcbundle
を使用したSMFマニフェストの作成この例では、svcbundle
を使用して、再起動時にNagiosを自動的に起動するためのSMFマニフェストを作成します。 Nagiosは現在、Oracle Solaris 11パッケージ・リポジトリに同梱されていないため、まず、http://www.nagios.orgからダウンロードして、シンプル・インストールを実行する必要があります。
この例では、Nagiosを/usr/local/nagios
プレフィックスにインストールし、Nagiosインストールを認識するようにApache Webサーバー構成ファイルを変更しました。 次に示すように、-d
オプションを使用して、構成ファイルの場所を指定することで、Nagiosデーモンを直接起動できます。
# /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg
図1に示すように、ブラウザでhttp://localhost/nagios
にナビゲートすると、Nagiosが正常に実行されていることを確認できます。
図1 Nagios
Nagiosインストールが稼働したら、次のステップでは、このアプリケーションをSMFに統合することで、何らかのソフトウェアに障害が発生した場合にシステムがブートまたは再起動する際にNagiosが起動するようにします。 それには、svcbundle
を使用して、そのSMFマニフェストを次のように生成します。
# svcbundle -o nagios.xml -s service-name=application/nagios -s model=daemon \ -s start-method="/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg"
リスト1に示す例では、3つの名前と値のペアを定義しています。 -s service-name
オプションをapplication/nagios
と定義します。その結果、svc:/application/nagios:default
というサービスになります。 -s model
オプションをdaemon
と定義して、SMFがこのサービスのプロセスを追跡するようにします。 また、-s start-method
オプションには、Nagiosデーモンを起動するために先だって使用したものと同じ値を定義します。 -o
オプションで定義されているように、このマニフェストをファイルnagios.xml
に出力します。 SMFは、生成されたマニフェストを自動的に検証します。
# cat nagios.xml <?xml version="1.0" ?> <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'> <!-- Manifest created by svcbundle (2012-Sep-11 00:19:49+1200) --> <service_bundle type="manifest" name="application/nagios"> <service version="1" type="service" name="application/nagios"> <!-- The following dependency keeps us from starting until the multi-user milestone is reached. --> <dependency restart_on="none" type="service" name="multi_user_dependency" grouping="require_all"> <service_fmri value="svc:/milestone/multi-user"/> </dependency> <exec_method timeout_seconds="60" type="method" name="start" exec="/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg" /> <!-- The exec attribute below can be charged to a command that SMF should execute to stop the service. See smf_method(5) for more details. --> <exec_method timeout_seconds="60" type="method" name="stop" exec=":kill"/> <!-- The exec attribute below can be changed to a command that SMF should execute when the service is refreshed. Services are typically refreshed when their properties are changed in the SMF repository. See smf_method(5) for more details. It is common to retain the value of :true which means that SMF will take no action when the service is refreshed. Alternatively, you may wish to provide a method to reread the SMF repository and act on any configuration changes. --> <exec_method timeout_seconds="60" type="method" name="refresh" exec=":true"/> .... </service> </service_bundle>
リスト1 マニフェストの例
次のステップでは、svc:/system/manifest-import:default
サービスを再起動することで、このマニフェストを取得して、/lib/svc/manifest/site
にインストールします。 また、Apache構成を変更したため、svc:/network/http:apache22
サービスも再起動します。
# svcadm restart apache22 # cp nagios.xml /lib/svc/manifest/site # svcadm restart manifest-import # svcs nagios STATE STIME FMRI online 2:13:01 svc:/application/nagios:default # ps -ef | grep nagios nagios 25743 1 0 00:50:43 ? 0:06 /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg
-i
オプションを-o
オプションの代わりに使用して、生成されたSMFマニフェストをシステムに直接インストールし、svc:/system/manifest-import:default
サービスを自動的に再起動することもできます。
これは、svcbundle
を使用して簡単なSMFマニフェストを素早く生成する方法を示すシンプルな例です。 さらにカスタマイズする場合は、生成後にこのテンプレート・マニフェストを変更できます。
svcbundle
を使用したSMFシステム・プロファイルの作成この例では、svcbundle
を使用してSMFシステム・プロファイルを生成し、svc:/network/dns/client
サービス内のネーム・サーバー・アドレス構成をカスタマイズします。 それには、次に示すように、service-property
およびbundle-type
の名前と値のペアを使用する必要があります。
# svcbundle -o nameserver-config.xml -s service-name=network/dns/client \ -s bundle-type=profile -s service-property="config:nameserver:net_address:192.168.0.1"
svcbundle
のデフォルトのバンドル・タイプはmanifest
なので、bundle-type
をprofile
と定義します。 サービスおよびサービス・インスタンス構成プロパティは、プロパティ・グループ、プロパティ名、プロパティ・タイプ、および値の4つをコロン区切りで使用して定義します。 リスト2では、service-property
の名前と値をconfig:nameserver:net_address:192.168.0.1
と定義します。
# cat nameserver-config.xml <?xml version="1.0" ?> <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'> <!-- Manifest created by svcbundle (2012-Sep-11 02:33:16+1200) --> <service_bundle type="profile" name="network/dns/client"> <service version="1" type="service" name="network/dns/client"> <property_group type="application" name="config"> <propval type="net_address" name="nameserver" value="192.168.0.1"/> </property_group> </service> </service_bundle>
リスト2 プロファイルの例
前のSMFマニフェストと同様に、このSMFシステム構成プロファイルを取得して、システムにインストールする必要があります。 それには、プロファイルを/etc/svc/profile/site/
にコピーして、svc:/system/manifest-import:default
サービスを再起動します。
# cp nameserver-config.xml /etc/svc/profile/site # svcadm restart manifest-import # svcprop -p config/nameserver dns/client 192.168.0.1
前の例と同様に、-i
オプションを使用して、プロファイルをシステムに直接インストールすることもできます。
これは、サービスの1つのプロパティのみを設定する簡単な例です。 今回、svcbundle
は、1つのサービスまたはサービス・インスタンスのみのシステム構成プロファイルの作成をサポートしていますが、これらの初期プロファイルの作成後に、より複雑なプロファイルを構築できます。
Oracle Solaris 11でシステム・サービスやアプリケーションを管理している場合は、SMFを使用すると、サービスの自動再起動、サービス構成の統合、障害管理フレームワークへの統合など、多数のメリットを活かすことができます。 新しいツール、svcbundle
を使用すると、SMFマニフェストを作成して、重要なサービスとアプリケーションをSMFフレームワークに統合できます。 また、システム・プロファイルを作成して、データセンター環境にインストールされた複数のOracle Solarisシステム全体にカスタマイズを行うことが可能です。
Glynn Fosterは、Oracle SolarisのPrincipal Product Managerであり、Image Packaging System(IPS)やService Management Facility(SMF)などのテクノロジー領域に取り組んでいます。 Glynnは、Sun Microsystemsの買収に伴い、2010年にオラクルに入社しました。
リビジョン1.0、2012年10月22日 |