Solaris のシステム管理 (資源管理とネットワークサービス)

第 2 章 Web キャッシュサーバーの管理

この章では、Solaris NCA (ネットワークキャッシュとアクセラレータ) の概要について説明します。また、NCA を使用するための手順と、NCA に関する参考資料も示します。

NCA (ネットワークキャッシュとアクセラレータ) (概要)

Solaris NCA (ネットワークキャッシュとアクセラレータ) は、HTTP 要求時にアクセスされる Web ページのカーネル内キャッシュを保持することにより、Web サーバーのパフォーマンスを向上します。このカーネル内キャッシュはシステムメモリーを使用するため、通常は Web サーバーによって処理される HTTP 要求のパフォーマンスを大幅に向上します。HTTP 要求時に Web ページがシステムメモリー内に保持されているため、カーネルと Web サーバー間のオーバーヘッドが減少し、Web サーバーのパフォーマンスが向上します。NCA にはソケットインタフェースが用意されており、どのような Web サーバーでも最小限の変更で NCA と通信できます。

要求されたページがカーネル内キャッシュから取得された場合 (キャッシュヒット時) は、パフォーマンスが飛躍的に向上します。要求されたページがキャッシュ内になく、Web サーバーから取得する必要がある場合 (キャッシュミス時) でも、パフォーマンスは大幅に改善されます。

NCA は、専用の Web サーバー上で実行するようにします。NCA が動作するサーバー上で他の大きいプロセスを実行すると、問題が起きることがあります。

NCA はすべてのキャッシュヒットを記録するロギング機能を提供します。ログはパフォーマンスを向上させるためにバイナリ形式で格納されます。ncab2clf コマンドを使用すると、バイナリ形式のログを共通ログ形式 (CLF) に変換できます。

Solaris 9 リリースには、次のような機能強化が実施されています。

NCA の新機能

このリリースでは、Web サーバーに複数の AF_NCA ソケットを開くことができます。複数のソケットを使用すると、1 つのサーバーで複数の Web サーバーを実行できます。

さらに、新しく /etc/nca/ncaport.conf 構成ファイルが使用できるようになりました。このファイルによって、NCA で使用する IP アドレスやポートを管理することができます。Web サーバーによっては、AF_NCA ソケットを直接にサポートしない場合があります。AF_NCA ソケットをサポートしないサーバーでは、この /etc/nca/ncaport.conf ファイルと NCA ソケットユーティリティライブラリを使って、AF_INET ソケットを AF_NCA ソケットに変換します。

Web キャッシュサーバーの管理 (作業マップ)

次の表に、NCA を使用するために必要な手順を示します。

作業 

説明 

参照先 

NCA の利用を計画する 

NCA を有効にする前に解決すべき事項をリストする 

NCA の利用を計画する

NCA を有効にする 

Web サーバー上の Web ページのカーネル内キャッシュを有効にするための手順を実行する 

Web ページのキャッシングを有効にする方法

NCA を無効にする 

Web サーバー上の Web ページのカーネル内キャッシュを無効にするための手順を実行する 

Web ページのキャッシングを無効にする方法

NCA ロギングを管理する 

NCA ロギング処理を有効または無効にするための手順を実行する 

NCA ロギングを有効または無効にする方法

NCA ソケットライブラリをロードする 

AF_NCA ソケットがサポートされていない場合に NCA を使用するための手順を実行する 

NCA ソケットユーティリティライブラリのロード方法

NCA の利用を計画する

この節では、NCA サービスを開始する前に解決しておく必要のある事項について説明します。

NCA を使用するためのシステム要件

NCA をサポートするには、システムは次の要件を満たす必要があります。

この製品は、専用の Web サーバー上で実行するようにします。NCA を実行しているサーバー上で別の大きいプロセスを実行すると、問題が生じることがあります。

NCA ロギング

NCA サービスでは、Web アクティビティを記録するように設定できます。通常、Web サーバーのロギングが有効になっているときには NCA のロギングも有効にします。

ライブラリ置き換えによる door サーバーデーモンのサポート

多くの Web サーバーは AF_INET ソケットを使用します。デフォルトでは、NCA は AF_NCA ソケットを使用します。この状況に対応するために、置き換え用のライブラリが用意されています。新しいライブラリは標準ソケットライブラリ libsocket.so の前にロードされます。bind() ライブラリ呼び出しには新しいライブラリ ncad_addr.so の用意するライブラリが呼び出されます。/etc/nca/ncakmod.conf ファイル内で状態が有効に設定されていれば、Solaris 9 リリースに付属している Apache は、このライブラリを呼び出すように設定されています。IWS または Netscape サーバーで新しいライブラリを使用する場合は、NCA ソケットユーティリティライブラリのロード方法 を参照してください。

複数インスタンスのサポート

NCA がインストールされているシステムでは、複数の Web サーバーを実行することがよくあります。たとえば、1 つのサーバーで、外部からのアクセス用の Web サーバーと Web 管理サーバーの両方をサポートする場合があります。これらのサーバーを別にするには、それぞれのサーバーが別のポートを使用するように設定します。

Web ページのキャッシュ管理 (手順)

この節では、サービスを有効または無効にするための手順を示します。

Web ページのキャッシングを有効にする方法

  1. スーパーユーザーになります。

  2. インタフェースを登録します。

    /etc/nca/nca.if ファイルに各物理インタフェースの名前を指定します。詳細は、nca.if(4) のマニュアルページを参照してください。


    # cat /etc/nca/nca.if
    hme0
    hme1

    インタフェースごとに、対応する hostname.interface-name ファイルが必要です。また、/etc/hosts ファイル内に hostname.interface-name の内容と一致するエントリが必要です。すべてのインタフェースで NCA 機能を使用可能にするには、nca.if ファイル内でアスタリスク (*) を指定します。

  3. ncakmod カーネルモジュールを有効にします。

    /etc/nca/ncakmod.conf 内の status エントリを enabled に変更します。


    # cat /etc/nca/ncakmod.conf
    #
    # NCA Kernel Module Configuration File
    #
    status=enabled
    httpd_door_path=/var/run/nca_httpd_1.door
    nca_active=disabled

    詳細は、ncakmod.conf(4) のマニュアルページを参照してください。

  4. (省略可能) NCA ロギングを有効にします。

    /etc/nca/ncalogd.conf 内の status エントリを enabled に変更します。


    # cat /etc/nca/ncalogd.conf
    #
    # NCA Logging Configuration File
    #
    status=enabled
    logd_path_name="/var/nca/log"
    logd_file_size=1000000

    logd_path_name エントリに示されているパスを変更すると、ログファイルの格納場所を変更できます。ログファイルには raw デバイスとファイルのどちらでも指定できます。NCA ログファイルのパス例については、次項の例を参照してください。構成ファイルの詳細は、ncalogd.conf(4) のマニュアルページを参照してください。

  5. (省略可能) 複数インスタンスのサポートのためのポートを定義します。

    /etc/nca/ncaport.conf ファイルにポート番号を追加します。次の例では、NCA はすべての設定済み IP アドレスについて、ポート 80 を監視します。


    # cat /etc/nca/ncaport.conf
    #
    # NCA Kernel Module Port Configuration File
    #
      .
      .
    ncaport=*/80
    
  6. IA のみ: 仮想メモリーサイズを増やします。

    eeprom コマンドを使用して、システムの kernelbase を設定します。


    # eeprom kernelbase=0x90000000
    # eeprom kernelbase
    kernelbase=0x90000000

    2 行目の eeprom コマンドを実行すると、パラメータが設定済みかどうかを確認できます。


    注 -

    kernelbase を設定すると、ユーザープロセスが使用できる仮想メモリー領域が 3G バイト未満に減少します。このため、システムは ABI に準拠しなくなります。システムをブートすると、そのことを警告するメッセージがコンソールに表示されます。ほとんどのプログラムは、実際には 3G バイトの仮想アドレス空間を必要としません。3G バイト以上の仮想アドレス空間を必要とするプログラムは、NCA を無効に設定したシステム上で実行する必要があります。


  7. サーバーを再起動します。

例 – NCA ログファイルとして raw デバイスを使用する

ncalogd.conf ファイル内の logd_path_name 文字列で、NCA ログファイルの格納先として raw デバイスを指定できます。raw デバイスを使用する利点としては、アクセス時のオーバーヘッドが小さいため、サービスを高速に実行できることが挙げられます。

NCA サービスはファイル内に記述されているすべての raw デバイスに対して、対応するファイルシステムがないことを確認します。このテストは、アクティブなファイルシステムを誤って上書きしてしまわないように実行されます。

このテストでファイルシステムが検出されないようにするには以下のコマンドを実行します。このコマンドは、ファイルシステムとして構成されている任意のディスクパーティション上のファイルシステム部分を破棄します。この例では、/dev/rdsk/c0t0d0s7 が古いファイルシステムを持つ raw デバイスです。


# dd if=/dev/zero of=/dev/rdsk/c0t0d0s7 bs=1024 count=1

上記の dd コマンドを実行すると、ncalogd.conf ファイルに raw デバイスを追加できるようになります。


# cat /etc/nca/ncalogd.conf
#
# NCA Logging Configuration File
#
status=enabled
logd_path_name="/dev/rdsk/c0t0d0s7"
logd_file_size=1000000

例 – NCA ロギング用に複数のファイルを使用する

ncalogd.conf ファイル内の logd_path_name 文字列で、NCA ログファイルの格納先として複数のファイルを指定できます。最初のファイルが満杯になると、2 番目のファイルが使用されます。以下の例では、最初に /var/nca/log ファイルを書き込みに使用し、次に raw パーティションを使用する方法を示します。


# cat /etc/nca/ncalogd.conf
#
# NCA Logging Configuration File
#
status=enabled
logd_path_name="/var/nca/log /dev/rdsk/c0t0d0s7"
logd_file_size=1000000

Web ページのキャッシングを無効にする方法

  1. スーパーユーザーになります。

  2. ncakmod カーネルモジュールを無効にします。

    /etc/nca/ncakmod.conf 内の status エントリを disabled に変更します。


    # cat /etc/nca/ncakmod.conf
    # NCA Kernel Module Configuration File
    #
    status=disabled
    httpd_door_path=/var/run/nca_httpd_1.door
    nca_active=disabled

    詳細は、ncakmod.conf(4) のマニュアルページを参照してください。

  3. NCA ロギングを無効にします。

    /etc/nca/ncalogd.conf 内の status エントリを disabled に変更します。


    # cat /etc/nca/ncalogd.conf
    #
    # NCA Logging Configuration File
    #
    status=disabled
    logd_path_name="/var/nca/log"
    logd_file_size=1000000

    詳細は、ncalogd.conf(4) のマニュアルページを参照してください。

  4. サーバーを再起動します。

NCA ロギングを有効または無効にする方法

NCA が有効になっていると必要に応じて NCA のログ処理のオン/オフを切り換えることができます。詳細は Web ページのキャッシングを有効にする方法 を参照してください。

  1. スーパーユーザーになります。

  2. NCA ロギングのオン/オフを切り換えます。

    ロギングを永続的に無効にする場合は、/etc/nca/ncalogd.conf 内の statusdisabled に変更し、システムをリブートする必要があります。詳細は、ncalogd.conf(4) のマニュアルページを参照してください。

    1. ロギングを停止します。


      # /etc/init.d/ncalogd stop
      
    2. ロギングを開始します。


      # /etc/init.d/ncalogd start
      

NCA ソケットユーティリティライブラリのロード方法

この手順は、AF_NCA ソケットを直接サポートしていない Web サーバーに対してのみ使用します。

Web サーバーの起動スクリプトに、ライブラリをプリロードするための 1 行を追加します。次のような行を追加します。


LD_PRELOAD=/usr/lib/ncad_addr.so /usr/bin/httpd

NCA サービスに新しいポートを追加する方法

  1. スーパーユーザーになります。

  2. 新しいポートを追加します。

    /etc/nca/ncaport.conf に、新しいポートのエントリを追加します。次の例では、IP アドレス 192.168.84.71 に対してポート 8888 を追加しています。詳細は、ncaport.conf(4) のマニュアルページを参照してください。


    # cat /etc/nca/ncaport.conf
    #
    # NCA Kernel Module Port Configuration File
    #
      .
      .
    ncaport=*/80
    ncaport=192.168.84.71/8888
    
  3. 新しい Web インスタンスを起動します。

    Web サーバーが NCA でアドレスを使用するには、先にそのアドレスが NCA のポート設定のファイルに入っている必要があります。Web サーバーが実行中である場合は、新しいアドレスの定義後にその Web サーバーを再起動する必要があります。

Web ページのキャッシング (リファレンス)

この節では、NCA を使用するために必要なファイルとコンポーネントについて説明します。また、NCA が Web サーバーと通信する方法についても説明します。

NCA ファイル

NCA 機能をサポートするにはいくつかのファイルが必要です。ほとんどのファイルは ASCII 形式ですが、バイナリ形式のファイルもあります。次の表に必要なファイルの一覧を示します。

表 2-1 NCA ファイル

ファイル名 

機能 

/dev/nca

NCA デバイスのパス名 

/etc/hostname.*

サーバー上で構成されているすべての物理インタフェースについてホスト名が記述されているファイル 

/etc/hosts

サーバーに対応付けられるすべてのホスト名が記述されているファイル。NCA が機能するには、このファイルの各エントリが、対応する /etc/hostname.* ファイル内のエントリと一致していなければならない

/etc/init.d/ncakmod

NCA サーバーを起動するスクリプト。このスクリプトは、サーバーのブート時に実行される 

/etc/init.d/ncalogd

NCA ロギングを開始するスクリプト。このスクリプトは、サーバーのブート時に実行される 

/etc/nca/nca.if

NCA が実行されるすべてのインタフェースが記述されているファイル。詳細は nca.if(4) のマニュアルページを参照

/etc/nca/ncakmod.conf

NCA 用のすべての構成パラメータが記述されているファイル。詳細は ncakmod.conf(4) のマニュアルページを参照

/etc/nca/ncalogd.conf

NCA ロギング用のすべての構成パラメータが記述されているファイル。詳細は、ncalogd.conf(4) のマニュアルページを参照

/etc/nca/ncaport.conf

NCA で使用する IP アドレスとポートが記述されているファイル。詳細は、ncaport.conf(4) のマニュアルページを参照

/usr/bin/ncab2clf

ログファイル内のデータを共通ログ形式に変換するために使用されるコマンド。詳細は ncab2clf(1) のマニュアルページを参照

/usr/lib/net/ncaconfd

ブート時に複数のインタフェース上で NCA が実行するように設定するために使用されるコマンド。詳細は ncaconfd(1M) のマニュアルページを参照

/usr/lib/nca_addr.so

AF_INET ソケットの代わりに AF_NCA ソケットを使用するライブラリ。このライブラリは AF_INET ソケットを使用する Web サーバー上で使用する。詳細は ncad_addr(4) のマニュアルページを参照

/var/nca/log

ログファイルのデータを保持するファイル。バイナリ形式のファイルなので編集できない 

/var/run/nca_httpd_1.door

ドアパス名 

NCA アーキテクチャ

NCA が機能するためには、次のコンポーネントが必要です。

カーネルモジュール ncakmod は、Web ページのキャッシュをシステムメモリー内に保持します。このモジュールは、ソケットインタフェースを介して Web サーバー httpd と通信します。プロトコルファミリータイプは PF_NCA です。

また、カーネルモジュールは、すべての HTTP キャッシュヒットを記録するログ機能も備えています。NCA ロギングは、HTTP データをバイナリ形式でディスクに書き込みます。NCA には、バイナリログファイルを共通ログ形式 (CLF) に変換するユーティリティが用意されています。

次の図に、通常のデータフローと、NCA が有効になっている場合のデータフローを示します。

図 2-1 NCA サービスのデータフロー

このフロー図は、カーネル内の NCA 層を介して行われるクライアント要求のデータフローを示しています。

NCA から httpd への要求フロー

以下に、クライアントと Web サーバー間の要求フローを示します。

  1. クライアントから Web サーバーに対して HTTP 要求が発行されます。

  2. ページがキャッシュ内にある場合は、カーネル内キャッシュの Web ページが返されます。

  3. ページがキャッシュ内にない場合は、Web サーバーに要求が送信され、ページが取得または更新されます。

  4. ページがキャッシュされているかどうかは、HTTP 応答で使用される HTTP プロトコルのセマンティクスによって異なります。そのあと、ページがクライアントに返されます。HTTP 要求ヘッダーに Pragma:No-cache が含まれている場合、ページはキャッシュされません。