Sun Java System Application Server Enterprise Edition 8.1 2005Q2 高可用性 (HA) 管理ガイド

- Previous: 第 1 章 Application Server の高可用性 (HA) 機能
- Next: 第 3 章 高可用性データベースの管理

# 第 2 章 高可用性 (HA) データベースのインストールと設定

この章では、次のトピックを扱います。

- 「高可用性データベースの概要」

- 「HADB の設定の準備」

- 「インストール」

- 「高可用性の設定」

- 「HADB のアップグレード」

# 高可用性データベースの概要

この節では、高可用性データベース (HADB) を紹介したあと、Application Server で使用するために HADB を設定および構成する方法について説明します。

この節では、次のトピックについて説明します。

- 「HADB と Application Server」

- 「HADB サーバーのアーキテクチャー」

- 「HADB ノード」

## HADB と Application Server

HADB は、アプリケーションサーバー層とは独立に実行および管理することのできる、水平方向にスケーラブルなデータベースです。HADB は、負荷分散、フェイルオーバー、および状態復元機能により、最大 99.999% のサービスおよびデータの可用性をサポートするように設計されています。

Application Server は、HADB を使用して、HTTP およびステートフルセッション Bean (SFSB) のセッションデータを格納します。セッション持続性のメカニズムがないと、Web または EJB コンテナがフェイルオーバーしたときに、HTTP や SFSB のセッションの状態データが失われます。

状態管理を Application Server と切り離しておくことには、大きな利点があります。Application Server インスタンスは、状態レプリケーションを外部の高可用性状態サービスに委任する、スケーラブルで高性能な Java™ 2 Platform, Enterprise Edition (J2EE™ プラットフォーム) コンテナとしての動作に CPU サイクルを消費します。この疎結合のアーキテクチャーのために、アプリケーションサーバーインスタンスを容易にクラスタに追加したり、クラスタから削除したりすることができます。HADB の状態レプリケーションサービスを独立に拡大縮小して、最適な可用性とパフォーマンスを得ることができます。

## HADB サーバーのアーキテクチャー

高可用性とは、アップグレードのための予定された停止や、ハードウェアまたはソフトウェアの障害によって引き起こされた予期しない停止があったとしても可用性が高いことを意味します。HADB は、単純なデータモデルと、冗長性のある、スケーラブルな高性能テクノロジに基づいています。HADB は、高性能なエンタープライズアプリケーションサーバー環境内で、すべてのタイプのセッション状態持続性を実現するための理想的なプラットフォームを提供します。

次の図は、4 つのアクティブノードと 2 つのスペアノードを備えたデータベースのアーキテクチャーを示しています。ノード 0 および 1 はミラーノードのペアであり、ノード 2 および 3 も同様です。

##### 図 2–1 HADB のアーキテクチャー

HADB は、データの断片化とレプリケーションを通してデータの高可用性を達成します。データベース内のすべてのテーブルが分割され、フラグメントと呼ばれる、ほぼ同じサイズのサブセットが作成されます。断片化は、データベースのノード間にデータを均等に分散させるハッシュ関数に基づいています。各フラグメントは 2 回、すなわちデータベースとミラーノードに格納されます。これにより、フォルトトレランスと、データのすばやい復旧が保証されます。さらに、ノードに障害が発生した場合や、ノードが停止した場合は、そのノードが再度アクティブになるまでスペアノードが処理を引き継ぐことができます。

HADB ノードは、互いをミラー化する、2 つのデータ冗長ユニット (DRU) から構成されます。各 DRU は、アクティブノードとスペアノードの半分から構成され、データの完全なコピーを 1 つ持っています。フォールトトレランスを保証するために、1 つの DRU をサポートするコンピュータは、電源 (無停電電源装置の使用を推奨)、処理装置、およびストレージに関して完全に自立している必要があります。1 つの DRU で停電が発生した場合は、電源が復旧するまで、もう一方の DRU 内のノードが引き続き要求を処理することができます。

セッション持続性のメカニズムがないと、ある Web または EJB コンテナが別のコンテナにフェイルオーバーしたときに、非活性化されたセッション状態を含む HTTP や SFSB のセッションの状態が失われます。HADB を使用してセッション持続性を実現することにより、この状況が克服されます。HADB は、状態情報を、独立してはいるが、適切に統合された持続的記憶領域層に格納および取得します。

セッションデータが削除されると、HADB は領域を再生します。HADB は、セッションデータレコードを固定サイズのブロックに配置します。ブロックのすべてのレコードが削除されると、そのブロックは解放されます。ブロックの各レコードはランダムに削除される場合があり、それによってブロック内にホールが作成されます。ブロック内に新しいレコードが挿入され、隣接する領域が必要になると、ホールが削除されてブロックはいっぱいになります。

以上が、アーキテクチャーの簡単な概要です。詳細については、『Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Deployment Planning Guide 』を参照してください。

## HADB ノード

データベースノードは、一連のプロセス、共有メモリーの専用領域、および 1 つ以上の二次ストレージデバイスで構成されます。データベースは、セッションデータを格納、更新、および取得します。各ノードにはミラーノードがあるため、ノードはペアで作成されます。さらに、可用性を最大にするために、各 DRU に 1 つずつ、合計 2 つ以上のスペアノードが含まれています。それにより、ノードに障害が発生した場合は、そのノードが修復されている間、スペアが処理を引き継ぐことができます。

ノードトポロジの別の形態については、『Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Deployment Planning Guide』の第 3 章「Selecting a Topology」を参照してください。

## 新機能と機能強化

Sun Java System Application Server Enterprise Edition 8.1 で提供される HADB のバージョンには、多くの新機能と機能強化が導入されています。

管理システム内の基礎となるコンポーネントが変更され、それにより HADB 管理が機能強化されています。古い `hadbm` インタフェース関数には、マイナーな変更が加えられています。また、これらの変更により、SSH/RSH への依存性も解消されています。

管理エージェントサーバープロセス (`ma`) はドメインを構成し、データベース設定をリポジトリ内に保持します。このリポジトリ情報は、すべてのエージェントに分配されます。

詳細については、次の項目を参照してください。

- 「全般的な改善点」

- 「具体的な変更項目」

### 全般的な改善点

このバージョンの HADB では、全般的に次の点が改善されています。

- HADB に SSH/RSH は必要なくなりました。

- HADB 管理のための管理者パスワードにより、セキュリティーが強化されています。

- 将来のバージョンへの自動オンラインアップグレードが可能になりました。

- 単一ホストへの依存性が解消されています。

- データベースの異種構成がサポートされています。デバイスパスと履歴パスを個別に設定することができます。

- 複数のプラットフォームを均一に管理できます。

### 具体的な変更項目

このバージョンの HADB では、以前のバージョンから次の項目が変更されています。

- ネットワーク構成に UDP マルチキャストが必要になりました。

- 管理エージェント (`ma`) を、すべての HADB ホストで実行することが必要になりました。

- ドメイン管理のための新しい `hadbm` コマンドは次のとおりです。`hadbm createdomain、hadbm deletedomain、hadbm extenddomain、hadbm reducedomain、hadbm listdomain、hadbm disablehost`。パッケージ管理のための新しいコマンドは次のとおりです。`hadbm registerpackage、hadbm unregisterpackage、hadbm listpackage`。

- すべての `hadbm` コマンドに、次の新しいオプションが追加されました。

  - `adminpassword`

  - `adminpasswordfile`

  - no-adminauthentication

  - `agent`

  - `javahome`

  `hadbm create` の変更点は次のとおりです。

  - 新規オプション:

    - `no-clear`

    - `no-cleanup`

    - `package`

    - `packagepath`

    - `agent`

    拡張されたオプション:

    - `hosts` (ドメインにホストを登録する)

    - `set`

    削除されたオプション:

    - `inetd`

    - `inetdsetupdir`

    - `configpath`

    - `installpath`

    - `set TotalDataDevideSizePerNode`

    - `set managementProtocol`

    変更点: `devicesize` はオプションになり、必須ではなくなりました。

  `hadbm startnode` および `hadbm restartnode` コマンドの `startlevel` オプションに、新しい値 `clear` が追加されました。

  `hadbm addnodes` の変更点は次のとおりです。新規オプション: `set`、`historypath`、`devicepath`。`inetdsetupdir` オプションは削除されました。

  `hadbm get` および `hadbm set` の変更点は次のとおりです。新しい属性 `historypath` (履歴ファイルの異種パス) および `packagename` が追加されました。削除された属性は次のとおりです。`managementProtocol`、`TotalDeviceSizePerNode`、`installpath`、および `syslogging`。

## HADB に対するカスタマサポートの使用

HADB の問題についてカスタマサポートに電話する前に、次の情報をできるだけ多く収集してください。

- システム使用のプロファイル:

  - アクティブな並行ユーザーの数

  - アクティブでないユーザーの数

  - 1 秒あたりにシステムにログインするユーザーの数

  - 平均のセッションサイズ

  - セッション状態のタイムアウト期間 (`SessionTimeout` 値)

  - ユーザー 1 人あたり、1 秒あたりのトランザクションの比率

  マシンのプロパティー:

  - RAM

  - CPU の数

  - CPU 速度

  - オペレーティングシステムのバージョン

  - 物理ディスクの数

  - 合計のディスクサイズ

  - 使用可能なディスク容量

  - データ転送容量

  ネットワークのプロパティー:

  - 転送容量

  - 1 ノードあたりのホスト名 (ネットワークインタフェース) の数

  HADB データ:

  - 履歴ファイル

  - `dbconfigpath/`databasename`/`nodeno ディレクトリに格納されている、`cfg` および `meta` ファイル。`dbconfigpath` は、管理エージェント設定ファイルの変数 `ma.server.dbconfigpath` で定義されています。

  - バージョン情報 (`hadbm --version`)

# HADB の設定の準備

ここで説明する内容は次のとおりです。

- 「前提条件」

- 「共有メモリーとセマフォの設定」

- 「ネットワーク冗長性の設定」

- 「システムクロックの同期」

- 「ファイルシステムのサポート」

  これらのタスクを実行したあと、第 3 章「高可用性データベースの管理」を参照してください。

  詳細については、『Sun Java System Application Server Enterprise Edition 8.1 2005Q2 リリースノート』を参照してください。

## 前提条件

HADB の設定および構成を行う前に、環境が次の要件を満たしていることを確認してください。

- IPv4 が有効になっていること。HADB は IPv4 のみをサポートしています。HADB に使用するインタフェースでは、IPv6 を無効にしてください。

- ネットワーク (ルーター、スイッチ、およびホストのネットワークインタフェース) が、ユーザーデータグラムプロトコル (UDP) マルチキャスト用に構成されている必要があります。HADB ホストが複数のサブネットにまたがっている場合は、サブネット間で UDP マルチキャストメッセージを転送するように、サブネット間のルーターを設定してください。

- HADB ホスト間、または HADB ホストと Application Server ホストの間に配置されているすべてのファイアウォールを、すべての UDP トラフィック (通常のトラフィックとマルチキャストトラフィックの両方) を許可するように設定してください。

- `hadbm createdomain`、`hadbm extenddomain`、`hadbm create,`、または `hadbm` `addnodes` コマンドに含まれているホストには、DHCP (Dynamic Host Configuration Protocol) によって割り当てられた動的な IP アドレスを使用しないでください。

## ネットワーク冗長性の設定

冗長性のあるネットワークを設定すると、単一のネットワーク障害が発生した場合でも、HADB を使用可能なままにできます。冗長性のあるネットワークを設定するには、次の 2 つの方法があります。

- Solaris 9 では、ネットワークマルチパスを設定できます。

- Windows Server 2003 を除くすべてのプラットフォームでサポートされている、二重ネットワークを設定します。

### ネットワークマルチパスの設定

ネットワークマルチパスを設定する前に、『IP Network Multipathing Administration Guide』の「ネットワークマルチパスの管理」を参照してください。

#### すでに IP マルチパスを使用している HADB ホストマシンを設定するには

1. ネットワークインタフェース障害検出時間を設定します。

   HADB でマルチパスのフェイルオーバーを適切にサポートするには、`/etc/default/mpathd` 内の `FAILURE_DETECTION_TIME` パラメータで指定されているネットワークインタフェース障害検出時間が 1 秒 (1000 ミリ秒) を超えないようにする必要があります。元の値がこの値を超えている場合は、このファイルを編集して、このパラメータの値を 1000 に変更します。

       FAILURE_DETECTION_TIME=1000

   変更を有効にするには、次のコマンドを使用します。

       pkill -HUP in.mpathd

2. HADB で使用する IP アドレスを設定します。

   『IP Network Multipathing Administration Guide』で説明されているように、マルチパスを使用するには、物理ネットワークインタフェースをマルチパスインタフェースグループにグループ化する必要があります。このようなグループ内の各物理インタフェースには、次の 2 つの IP アドレスが関連付けられています。

   - データの送信に使用される物理インタフェースアドレス。

   - Solaris の内部でのみ使用されるテストアドレス。

   `hadbm create --hosts` を使用するときに、マルチパスグループの物理インタフェースアドレスを 1 つだけ指定します。

##### 例 2–1 マルチパスの設定

host1 および host2 という名前の2 つのホストマシンがあるとします。それぞれに 2 つの物理ネットワークインタフェースがある場合は、その 2 つのインタフェースを 1 つのマルチパスグループとして設定します。各ホストで、`ifconfig -a` を実行します。

host1 の出力は次のようになります。

    bge0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>
    mtu 1500 index 5 inet 129.159.115.10 netmask ffffff00 broadcast 129.159.115.255
    groupname mp0

    bge0:1: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER>
    mtu 1500 index 5 inet 129.159.115.11 netmask ffffff00 broadcast 129.159.115.255

    bge1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>
    mtu 1500 index 6 inet 129.159.115.12 netmask ffffff00 broadcast 129.159.115.255
    groupname mp0

    bge1:1: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER>
    mtu 1500 index 6 inet 129.159.115.13 netmask ff000000 broadcast 129.159.115.255

host2 の出力は次のようになります。

    bge0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>
    mtu 1500 index 3 inet 129.159.115.20 netmask ffffff00 broadcast 129.159.115.255
    groupname mp0

    bge0:1: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER>
    mtu 1500 index 3 inet 129.159.115.21 netmask ff000000 broadcast 129.159.115.255

    bge1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>
    mtu 1500 index 4 inet 129.159.115.22 netmask ffffff00 broadcast 129.159.115.255
    groupname mp0

    bge1:1: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER>
    mtu 1500 index 4 inet 129.159.115.23 netmask ff000000 broadcast 129.159.115.255

この例では、両方のホスト上の物理ネットワークインタフェースが `bge0` および `bge1` のあとに表示されています。『IP Network Multipathing Administration Guide』で説明されているように、`bge0:1` および `bge1:1` のあとに表示されているのはマルチパステストインタフェースです。これは、`ifconfig` の出力では「非推奨」として指定されています。

この環境で HADB を設定するには、各ホストから 1 つの物理インタフェースアドレスを選択します。この例では、HADB は host1 の129.159.115.10 と、host2 の 129.159.115.20 の IP アドレスを使用しています。ホストあたり 1 つのデータベースノードを含むデータベースを作成するには、コマンド `hadbm create --host` を使用します。次に例を示します。

    hadbm create --host 129.159.115.10,129.159.115.20

ホストあたり 2 つのデータベースノードを含むデータベースを作成するには、次のコマンドを使用します。

    hadbm create --host 129.159.115.10,129.159.115.20,
    129.159.115.10,129.159.115.20

どちらの場合も、マシン上のどちらのインタフェースをエージェントが使用するべきかを指定するために、host1 と host2 で別のパラメータを使用してエージェントを構成する必要があります。そのため、host1 では次のパラメータを使用します。

    ma.server.mainternal.interfaces=129.159.115.10

また、host2 では次のパラメータを使用します。

    ma.server.mainternal.interfaces=129.159.115.20

`ma.server.mainternal.interfaces` 変数については、「設定ファイル」を参照してください。

### 二重ネットワークの設定

HADB が単一のネットワーク障害に耐えられるようにするには、オペレーティングシステム (たとえば、Solaris) でサポートされているならば IP マルチパスを使用します。Windows Server 2003 では、二重ネットワークを使用して HADB を構成しないでください。このオペレーティングシステムは、二重ネットワークでは正常に動作しません。

オペレーティングシステムに IP マルチパスが設定されておらず、HADB ホストに 2 枚の NIC が実装されている場合は、二重ネットワークを使用するように HADB を設定できます。すべてのホストについて、各ネットワークインタフェースカード (NIC) の IP アドレスを別の IP サブネットに配置する必要があります。

データベース内では、すべてのノードを単一のネットワークに接続するか、またはすべてのノードを 2 つのネットワークに接続する必要があります。

注 –

サブネット間のルーターは、サブネット間で UDP マルチキャストメッセージを転送するように設定する必要があります。

HADB データベースを作成するときは、–hosts オプションを使用して、各ノードに対して 2 つ (各 NIC IP アドレスに対して 1 つ) の IP アドレスまたはホスト名を指定します。各ノードについて、1 つ目の IP アドレスは net-0 上に、2 つ目の IP アドレスは net-1 上にあります。構文は次のようになります。同じノードに対するホスト名は正符号 (+) で区切ります。

    --hosts=node0net0name+node0net1name
    ,node1net0name+node1net1name
    ,node2net0name+node2net1name
    , ...

たとえば、次の引数では 2 つのノードが作成され、それぞれに 2 つのネットワークインタフェースを持ちます。これらのノードの作成に、次のホストオプションが使用されます。

    --hosts 10.10.116.61+10.10.124.61,10.10.116.62+10.10.124.62

これにより、ネットワークアドレスが次のように設定されます。

- node0 には、`10.10.116.61` と `10.10.124.61`。

- node1 には、`10.10.116.62` と `10.10.124.62`。

`10.10.116.61` と `10.10.116.62`、および `10.10.124.61` と `10.10.124.62` がそれぞれ同じサブネット上にあることに注目してください。

この例の場合、管理エージェントは同じサブネットを使用する必要があります。そのため、設定変数 `ma.server.mainternal.interfaces` を、たとえば、`10.10.116.0/24` に設定する必要があります。この設定は、この例の両方のエージェントに使用できます。

## 共有メモリーとセマフォの設定

HADB をインストールする前に、共有メモリーとセマフォを設定する必要があります。この手順は、使用しているオペレーティングシステムによって異なります。

### Solaris で共有メモリーとセマフォを設定するには

1. ルートとしてログインします。

2. 共有メモリーを設定します。

   `shmmax` の値を、HADB ホストマシンの物理メモリーのサイズに設定します。共有メモリーセグメントの最大サイズは、HADB データベースバッファープールのサイズより大きくする必要があります。たとえば、主記憶が 2G バイト (16 進数で 0x8000000) のマシンの場合は、`/etc/system` ファイルに次の行を追加します。

       set shmsys:shminfo_shmmax=0x80000000
        set shmsys:shminfo_shmseg=20

   Solaris 9 以降では、`shmsys:shminfo_shmseg` は廃止されています。

   `shminfo_shmmax` をシステムの合計メモリーに設定します (16 進数の表記では、示されている値 `0x80000000` が 2G バイトのメモリーを表します)。

   注 –

   記憶域サイズに対して 16 進数の値を用いて `shmsys:shminfo_shmmax` の値を指定します。ホストのメモリーを確認するには、次のコマンドを使用します。

       prtconf | grep Memory

3. セマフォを設定します。

   `/etc/system` ファイルを確認して、セマフォ設定のエントリがないかどうか調べます。このファイルには、すでに `semmni`、`semmns`、および `semmnu` エントリが含まれている可能性があります。次に例を示します。

       set semsys:seminfo_semmni=10
       set semsys:seminfo_semmns=60
       set semsys:seminfo_semmnu=30

   エントリが存在する場合は、これらの値にそれぞれ、16、128、および 1000 を追加します。したがって、上の例のエントリは、次のように変更されます。

       set semsys:seminfo_semmni=26
       set semsys:seminfo_semmns=188
       set semsys:seminfo_semmnu=1030

   これらのエントリが `/etc/system` ファイルに含まれていない場合は、ファイルの最後に次のエントリを追加します。

       set semsys:seminfo_semmni=16
       set semsys:seminfo_semmns=128
       set semsys:seminfo_semmnu=1000

   コンピュータで最大 16 の HADB ノードを実行するには、この値で十分です。16 を超えるノードのセットアップについては、『Sun Java System Application Server Enterprise Edition 8.1 2005Q1 Performance Tuning Guide』の「HADB」の章を参照してください。

4. マシンを再起動します。

### Linux で共有メモリーを設定するには

1. ルートとしてログインします。

2. ファイル `/etc/sysctl.conf` を編集します。

3. `kernel.shmax` および `kernel.shmall` パラメータを設定します。

   `kernel.shmax` パラメータは、共有メモリーセグメントの最大サイズをバイト単位で定義します。`kernel.shmall` パラメータは、システムで一度に使用できるページ内の共有メモリーの合計容量を設定します。これらの両方のパラメータの値を、マシンの物理メモリーの総量に設定します。この値は、10 進数のバイト数で指定します。たとえば、物理メモリーが 512M バイトのマシンの場合は、次のように指定します。

       kernel.shmmax=536870912
        kernel.shmall=536870912

4. マシンを再起動します。次のコマンドを使用します。

   `sync; sync; reboot`

### Windows の場合の手順

Windows では、特別なシステム設定は必要ありません。ただし、既存の J2SE インストールを使用する場合は、`JAVA_HOME` 環境変数を J2SE がインストールされている場所に設定します。

## システムクロックの同期

HADB はシステムクロックに基づくタイムスタンプを使用するため、HADB ホストでクロックを同期化する必要があります。HADB はシステムクロックを使用して、タイムアウトの管理や、履歴ファイルに記録されるイベントへのタイムスタンプを行います。HADB は分散システムであるため、トラブルシューティングを行うには、すべての履歴ファイルをまとめて分析する必要があります。そのため、すべてのホストのクロックが同期化されていることが重要です。

稼働中の HADB システムでは、システムクロックを調整しないでください。それを行うと、オペレーティングシステムやその他のソフトウェアコンポーネントに問題が発生し、それにより HADB ノードのハングアップや再起動などの問題が次々に引き起こされる場合があります。クロックを前に戻すと、クロックが調整されたときに一部の HADB サーバープロセスがハングアップする場合があります。

クロックを同期化するには、次のようにします。

- Solaris では、`xntpd` (ネットワークタイムプロトコルデーモン) を使用します。

- Linux では、`ntpd` を使用します。

- Windows では、Windows の `NTPTime` を使用します。

HADB で 1 秒を超えるクロック調整が検出されると、ノードの履歴ファイルにログ記録されます。次に例を示します。

    NSUP INF 2003-08-26 17:46:47.975 Clock adjusted.
     Leap is +195.075046 seconds.

## ファイルシステムのサポート

この節では、特定のファイルシステムでの HADB のいくつかの制限について説明します。

### Red Hat Enterprise Linux

Red Hat Enterprise Linux 3.0 では、HADB は ext2 および ext3 ファイルシステムをサポートしています。Red Hat Enterprise Linux 2.1 では、HADB は ext2 ファイルシステムをサポートしています。

### Veritas File System

Solaris 上で Veritas File System を使用している場合、HADB は履歴ファイルに `WRN: Direct disk I/O mapping failed` というメッセージを書き込みます。このメッセージは、HADB がデータおよびログデバイスに対するダイレクト I/O (入出力) を作動させられないことを示しています。ダイレクト I/O によって、ディスクページ書き込みの CPU コストが削減されます。また、オペレーティングシステムで「ダーティー」データページを管理するためのオーバーヘッドも削減されます。

Veritas File System でダイレクト I/O を使用するには、次のいずれかの手順を実行します。

- オプション `mincache=direct` でマウントされたファイルシステム上に、データデバイスとログデバイスを作成します。このオプションは、このファイルシステムで作成されたすべてのファイルに適用されます。詳細については、`mount_vxfs(1M)` コマンドを参照してください。

- Veritas Quick 入出力ユーティリティーを使用して、ファイルシステムファイルに対する raw 入出力を行います。詳細については、『VERITAS File System 4.0 Administrator’s Guide for Solaris』を参照してください。

注 –

これらの設定は、Sun Java System Application Server ではテストされていません。

# インストール

一般に、HADB は、Application Server と同じシステム (共存トポロジ)、または別のホスト (分離層トポロジ) のどちらにもインストールできます。これらの 2 つのオプションの詳細については、『Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Deployment Planning Guide』の第 3 章「Selecting a Topology」を参照してください。ただし、`asadmin configure-ha-cluster` コマンドを使用して高可用性を設定できるようにするには、HADB 管理クライアントをインストールする必要があります。Java Enterprise System インストーラを使用している場合は、ノードが別の層にインストールされている場合でも、管理クライアントをインストールするために HADB インスタンス全体をインストールする必要があります。

## HADB のインストール

シングルまたはデュアル CPU システムでは、システムに少なくとも 2G バイトのメモリーがあれば、HADB と Application Server の両方をインストールできます。メモリーが不足している場合は、HADB を別のシステムにインストールするか、または追加のハードウェアを使用します。`asadmin ha-configure-cluster` コマンドを使用するには、HADB と Application Server の両方をインストールする必要があります。

各 HADB ノードには 512M バイトのメモリーが必要なため、2 つの HADB ノードを実行するにはマシンに 1G バイトのメモリーが必要です。マシンのメモリーが不足している場合は、各ノードを別のマシンに設定します。たとえば、次のシステムに 2 つのノードをインストールすることができます。

- メモリーがそれぞれ 512M バイト〜 1G バイトの、2 つのシングル CPU システム

- メモリーが 1G 〜 2G バイトの、シングルまたはデュアル CPU システム

  HADB は、Java Enterprise System インストーラまたは Application Server のスタンドアロンインストーラのどちらでもインストールできます。どちらのインストーラでも、「コンポーネントの選択」ページで HADB (Java ES では High Availability Session Store と呼ばれる) をインストールするオプションを選択します。ホストでのインストールを完了します。Application Server のスタンドアロンインストーラを使用していて、2 つの別々のマシンで HADB を実行すること選択した場合は、両方のマシンで同じインストールディレクトリを選択する必要があります。

### デフォルトのインストールディレクトリ

このマニュアルの全体にわたって、HADB_install_dir は、HADB をインストールするディレクトリを表します。デフォルトのインストールディレクトリは、HADB を Java Enterprise System の一部としてインストールするかどうかによって異なります。Java Enterprise System の場合、デフォルトのインストールディレクトリは `/opt/SUNWhadb/4` です。スタンドアロンの Application Server インストーラの場合は、`/opt/SUNWappserver/hadb/4` になります。

## ノードスーパーバイザープロセスの権限

ノードスーパーバイザープロセス (NSUP) は、「I’m alive」メッセージを互いに交換することにより、HADB の可用性を保証します。NSUP 実行可能ファイルは、できるだけ迅速に応答できるように、root 権限を持っている必要があります。`clu_nsup_srv` プロセスは CPU リソースを大量に消費せず、フットプリントも小さいため、リアルタイムプライオリティーで実行してもパフォーマンスには影響しません。

注 –

Java Enterprise System インストーラを使用した場合は、NSUP の権限が自動的に正しく設定されるため、それ以上の操作は必要ありません。ただし、スタンドアロン Application Server の (ルートでない) インストーラを使用する場合は、データベースを作成する前に、この権限を手動で設定する必要があります。

### 権限が不足している場合の症状

NSUP 実行可能ファイルの権限が正しく設定されていない場合は、次のようなリソース枯渇の症状がみられることもあります。

- パフォーマンスの問題や、HADB 履歴ログ内の `HIGH LOAD` メッセージ。

- 誤ったネットワークパーティションや、ノードの再起動。その前に、HADB 履歴ファイルに「Process blocked for x seconds」という警告が記録されます。

- トランザクションの中止や、その他の例外。

### 制限事項

NSUP がリアルタイムプライオリティーを設定できない場合、Solaris および Linux では EPERM に `errno` が設定されます。Windows の場合は、「Could not set realtime priority」という警告が発行されます。`ma.log` ファイルにエラーが書き込まれ、プロセスはリアルタイムプライオリティーがない状態で継続されます。

次の場合は、リアルタイムプライオリティーを設定できません。

- HADB が Solaris 10 の非大域ゾーンにインストールされている場合

- Solaris 10 で、`PRIV_PROC_LOCK_MEMORY` (プロセスが物理メモリー内のページをロックできる) 特権または `PRIV_PROC_PRIOCNTL` 特権、あるいはその両方が無効になっている場合

- ユーザーが setuid アクセス権を無効にした場合

- ユーザーがソフトウェアを tar ファイルとしてインストールした場合 (Application Server での、ルートでないインストールオプション)

### ノードスーパーバイザープロセスに root 権限を許可するには

1. ルートとしてログインします。

2. 作業用ディレクトリを HADB_install_dir`/lib/server` に変更します。

   NSUP 実行可能ファイルは `clu_nsup_srv` です。

3. 次のコマンドを使用して、ファイルの `suid` ビットを設定します。

   `chown root clu_nsup_srv`

4. 次のコマンドを使用して、ファイルの所有者をルートに設定します。

   `chmod u+s clu_nsup_srv`

   これにより、`clu_nsup_srv` プロセスがルートとして起動され、プロセス自身にリアルタイムプライオリティーを許可できるようになります。

   セキュリティーへの影響を回避するために、リアルタイムプライオリティーはプロセスが起動されるとすぐに設定され、優先順位が変更されたらプロセスは実効 UID に戻ります。ほかの HADB プロセスは、標準の優先順位で実行されます。

# 高可用性の設定

この節では、高可用性クラスタを作成し、HTTP セッション持続性をテストするための手順について説明します。

ここで説明する内容は次のとおりです。

- 「前提条件」

- 「HADB 管理エージェントの起動」

- 「高可用性のためのクラスタの設定」

- 「高可用性のためのアプリケーションの設定」

- 「クラスタの再起動」

## 前提条件

HADB を設定する前に、次の手順を実行します。

### 高可用性のためにシステムを準備するには

1. Application Server インスタンスとロードバランサプラグインをインストールします。

   詳細については、『Java Enterprise System インストールガイド』(Java ES を使用している場合)、または『Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Installation Guide』(Application Server のスタンドアロンインストーラを使用している場合) を参照してください。

2. Application Server ドメインおよびクラスタを作成します。

   詳細については、『Sun Java System Application Server Enterprise Edition 8.1 2005Q2 管理ガイド』を参照してください。

3. Web サーバーソフトウェアをインストールおよび設定します。

   詳細については、「負荷分散のための Web Server の設定」を参照してください。

4. 負荷分散をセットアップおよび設定します。

   詳細については、「HTTP 負荷分散の設定」を参照してください。

## HADB 管理エージェントの起動

管理エージェント (`ma`) は、HADB ホストで管理コマンドを実行するとともに、HADB ノードスーパーバイザープロセスが失敗した場合は再起動することによってその可用性を保証します。

本稼働配備の場合は、管理エージェントをサービスとして起動し、その可用性を保証します。この節では、管理エージェントをデフォルトの設定でサービスとして起動するための手順について簡単に説明します。

管理エージェントをテストまたは評価のためにコンソールモードで起動する手順や、その設定のカスタマイズに関する情報などの詳細については、「HADB 管理エージェントの使用法」を参照してください。

この節では、Java Enterprise System を使用している場合に、管理エージェントをデフォルトの設定でサービスとして起動する方法について説明します。

### Solaris または Linux で Java Enterprise System を使用して管理エージェントを起動するには

1. ファイル `/etc/init.d/ma-initd` への次のソフトリンクを作成します。

       /etc/rc0.d/K20ma-initd
       /etc/rc1.d/K20ma-initd
       /etc/rc2.d/K20ma-initd
       /etc/rc3.d/S99ma-initd
       /etc/rc5.d/S99ma-initd
       /etc/rcS.d/K20ma-initd

2. マシンを再起動します。

   エージェントの自動起動および停止を解除するには、これらのリンクを削除するか、リンク名中の文字 K とS を小文字に変更します。

### Windows で Java Enterprise System を使用して管理エージェントを起動するには

1. コマンドウィンドウを開きます。

2. 次のコマンドを入力します。`HADB_install_dir\bin\ma -i`.

   これにより、管理エージェントがデフォルトの設定でインストールされ、起動されます。

##### 次の手順

管理エージェントを停止してサービスから削除 (登録解除) するには、次のコマンドを使用します。`HADB_install_dir\bin\ma -r`

### Solaris または Linux でスタンドアロンの Application Server を使用して管理エージェントを起動するには

1. シェルで、カレントディレクトリを HADB_install_dir `/bin` に変更します。

2. シェルスクリプト `ma-initd` を編集します。

   スクリプト内の HADB_ROOT と HADB_MA_CFG のデフォルト値を、実際のインストールを反映するように置き換えます。

   - HADB_ROOT は HADB インストールディレクトリ HADB_install_dir です。

   - HADB_MA_CFG は管理エージェント設定ファイルのある場所です。詳細については、「管理エージェント設定のカスタマイズ」を参照してください。

3. `ma-initd` をディレクトリ `/etc/init.d` にコピーします。

4. ファイル `/etc/init.d/ma-initd` への次のソフトリンクを作成します。

       /etc/rc0.d/K20ma-initd
       /etc/rc1.d/K20ma-initd
       /etc/rc2.d/K20ma-initd
       /etc/rc3.d/S99ma-initd
       /etc/rc5.d/S99ma-initd
       /etc/rcS.d/K20ma-initd

### Windows でスタンドアロンの Application Server を使用して管理エージェントを起動するには

1. コマンドウィンドウを開きます。

2. 次のコマンドを入力します。`HADB_install_dir\bin\ma -i ma.cfg`

   これで、プロセスが失敗するか、またはマシンが再起動した場合は、管理エージェントが自動的に再起動されます。

##### 次の手順

管理エージェントを停止してサービスから削除 (登録解除) するには、次のコマンドを使用します。`HADB_install_dir\bin\ma -r ma.cfg`

## 高可用性のためのクラスタの設定

この節の操作を開始する前に、1 つ以上の Application Server クラスタが作成されている必要があります。クラスタの作成方法については、「クラスタを作成するには」を参照してください。

ドメイン管理サーバーが稼働しているマシンで、次のコマンドを使用して、HADB を使用するようにクラスタを設定します。

`asadmin configure-ha-cluster --user admin --hosts hadb_hostname ,hadb_hostname --devicesize 256 clusterName`

hadb_hostname を HADB が稼働しているマシンのホスト名に、clusterName をクラスタの名前に置き換えます。1 つのマシンだけを使用している場合は、そのホスト名を 2 回指定する必要があります。

この簡単な例により、同じマシン上で HADB の 2 つのノードが実行されます。本稼働の設定では、複数のマシンを使用することをお勧めします。

## 高可用性のためのアプリケーションの設定

管理コンソールで、「アプリケーション」>「エンタープライズアプリケーション」の下のアプリケーションを選択します。可用性を有効にするチェックボックスをチェックし、「保存」をクリックします。

## クラスタの再起動

管理コンソールでクラスタを再起動するには、「クラスタ」>「cluster-name」を選択します。「インスタンスの停止」をクリックします。インスタンスが停止されたら、「インスタンスの起動」をクリックします。

あるいは、次の `asadmin` コマンドを使用します。

    asadmin stop-cluster --user admin cluster-name
    asadmin start-cluster --user admin cluster-name

これらのコマンドの詳細については、stop-cluster(1)およびstart-cluster(1)を参照してください。

## Web Server の再起動

Web Server を再起動するには、次の Web Server コマンドを入力します。

    web_server_root/https-hostname/reconfig

web_server_root を Web Server のルートディレクトリに、hostname をホストマシンの名前に置き換えます。

## ロードバランサとして機能している Web Server インスタンスをクリーンアップするには

1. 次に示すように、ロードバランサ設定を削除します。

   `asadmin delete-http-lb-ref --user admin --config MyLbConfig FirstCluster`

   `asadmin delete-http-lb-config --user admin MyLbConfig`

2. 新しい Web Server インスタンスを作成した場合は、次の方法で削除できます。

   1. Web Server の管理コンソールにログオンします。

   2. インスタンスを停止します。

      インスタンスを削除します。

# HADB のアップグレード

HADB は、ソフトウェアのアップグレードによっても中断されることのない「常時有効な」サービスを提供するように設計されています。この節では、データベースをオフラインにしたり、可用性の低下を招いたりすることなく、新しいバージョンの HADB にアップグレードする方法について説明します。

以下の節では、HADB インストールをアップグレードする方法について説明します。

- 「HADB をより新しいバージョンにアップグレードするには」

- 「HADB パッケージの登録」

- 「HADB パッケージの登録の解除」

- 「管理エージェントの起動スクリプトの置き換え」

## HADB をより新しいバージョンにアップグレードするには

1. 新しいバージョンの HADB をインストールします。

2. 「HADB パッケージの登録の解除」の説明に従って、既存の HADB インストールの登録を解除します。

3. 「HADB パッケージの登録」の説明に従って、新しい HADB バージョンを登録します。

   HADB パッケージを HADB 管理ドメインに登録すると、HADB パッケージのアップグレードや変更が容易になります。管理エージェントは、ソフトウェアパッケージが配置されている場所や、ドメイン内のホストに関するバージョン情報を常時監視します。デフォルトのパッケージ名は、V の文字で始まり、`hadbm` プログラムのバージョン番号が含まれた文字列です。

4. データベースが使用するパッケージを変更します。

   次のコマンドを入力します。

       hadbm set PackageName=package

   ここで、package は、新しい HADB パッケージのバージョン番号です。

5. 必要に応じて、管理エージェントの起動スクリプトを置き換えます。

   詳細については、「管理エージェントの起動スクリプトの置き換え」を参照してください。

## HADB パッケージの登録

`hadbm registerpackage` コマンドを使用して、管理ドメイン内のホストにインストールされている HADB パッケージを登録します。HADB パッケージはまた、`hadbm create` を使用してデータベースを作成するときにも登録できます。

`hadm registerpackage` コマンドを使用する前に、ホストリスト内のすべてのホストですべての管理エージェントが設定および実行されていること、管理エージェントのリポジトリが更新用に使用できること、および同じパッケージ名ですでに登録されているソフトウェアパッケージがないことを確認してください。

コマンド構文は次のとおりです。

`hadbm registerpackage `--packagepath=`path [`-- hosts`=hostlist] [`-- adminpassword`=password | `-- adminpasswordfile`=file] [`-- agent`=maurl]` [[package-name ]]

package-name オペランドがパッケージの名前です。

次の表は、特殊な `hadbm registerpackage` コマンドオプションを示しています。ほかのコマンドオプションについては、「セキュリティーオプション」および 「汎用オプション」を参照してください。

表 2–1 `hadbm registerpackage` のオプション

オプション | 説明
--- | ---
--hosts=hostlist -H | コンマで区切られているか、または二重引用符で囲まれ空白で区切られている、ホストのリスト。
--packagepath=path -L | HADB ソフトウェアパッケージへのパス。

たとえば、次のコマンドは、ソフトウェアパッケージ v4 をホスト host1、host2、および host3 に登録します。

    hadbm registerpackage
    --packagepath=hadb_install_dir/SUNWHadb/4.4
    --hosts=host1,host2,host3 v4

応答は次のようになります。

`Package successfully registered.`

`--hosts` オプションを省略した場合は、ドメイン内で有効になっているすべてのホストにそのパッケージが登録されます。

## HADB パッケージの登録の解除

`hadbm unregisterpackage` コマンドを使用して、管理ドメインに登録されている HADB パッケージを削除します。

`hadbm unregisterpackage` コマンドを使用する前に、ホストリスト内のすべてのホストですべての管理エージェントが設定および実行されていること、管理エージェントのリポジトリが更新用に使用できること、パッケージが管理ドメインに登録されていること、および登録を解除しようとしているパッケージで動作するように設定された既存のデータベースがないことを確認してください。

コマンド構文は次のとおりです。

    hadbm unregisterpackage
    --hosts=hostlist
    [--adminpassword=password | --adminpasswordfile= file]
    [--agent= maurl]
    [package-name ]

package-name オペランドがパッケージの名前です。

`--hosts` オプションについては、前述した 「HADB パッケージの登録」を参照してください。`--hosts` オプションを省略した場合は、パッケージが登録された、有効になっているホストがホストリストのデフォルトになります。ほかのコマンドオプションについては、「セキュリティーオプション」および 「汎用オプション」を参照してください。

##### 例 2–2 HADB の登録解除の例

ドメイン内の特定のホストからソフトウェアパッケージ v4 の登録を解除するには、次のコマンドを実行します。

`hadbm unregisterpackage --hosts=host1,host2,host3 v4`

応答は次のようになります。

`Package successfully unregistered.`

## 管理エージェントの起動スクリプトの置き換え

新しいバージョンの HADB をインストールすると、`/etc/init.d/ma-initd` にある管理エージェントの起動スクリプトの置き換えが必要になる場合があります。ファイル HADB_install_dir`/lib/ma-initd` の内容を確認してください。古い `ma-initd` ファイルと異なっている場合は、古いファイルを新しいファイルに置き換えます。

- Previous: 第 1 章 Application Server の高可用性 (HA) 機能
- Next: 第 3 章 高可用性データベースの管理

- © 2010, Oracle Corporation and/or its affiliates