Sun Java System Application Server 9.1 高可用性 (HA) 管理ガイド

HADB の設定の準備

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

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

HADB の最新情報については、『Sun Java System Application Server 9.1 リリースノート』を参照してください。

前提条件と制限

HADB の設定および構成を行う前に、ネットワークおよびハードウェアの環境が『Sun Java System Application Server 9.1 リリースノート』に記載されている要件を満たしていることを確認してください。また、特定のファイルシステム (Veritas など) では制限があります。詳細については、リリースノートを参照してください。

HADB では、共有メモリーセグメントの作成およびアタッチ時に、Intimate Shared Memory (SHM_SHARE_MMU フラグ) を使用します。このフラグを使用すると、原則的に共有メモリーセグメントが物理メモリーにロックされ、ページアウトされる心配がなくなります。その結果、HADB の共有メモリーは、ローエンドのマシンでのインストールに影響しやすい物理メモリーにロックされます。Application Server と HADB を同じマシンに配置するときは、推奨メモリー量を確保する必要があります。

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

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

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

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

Procedureすでに 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 つのインタフェースをマルチパスグループとして設定します。各ホストで、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 --hosts を使用します。次に例を示します。


hadbm create --hosts 129.159.115.10,129.159.115.20

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


hadbm create --hosts 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

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

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

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

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

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

ホストで HADB 以外のアプリケーションを実行する場合は、これらのアプリケーションが使用する共有メモリーおよびセマフォーを計算し、HADB で必要な値に追加します。各ホストで動作する HADB ノードが最大 6 つの場合は、この節で推奨している値で十分です。値を増やす必要があるのは、6 つを超える HADB ノードを動作させる場合、または追加の共有メモリーおよびセマフォーを必要とするアプリケーションがホストで動作している場合だけです。

セマフォーの数が少なすぎる場合、HADB がエラーになって次のエラーメッセージが表示されることがあります。「デバイスに空き容量がありません」。これは、データベースの起動時や実行時に発生する可能性があります。

ProcedureSolaris で共有メモリーとセマフォーを設定する

セマフォーは、グローバルなオペレーティングシステムリソースであるため、設定は、HADB だけでなく、ホストで稼働しているすべてのプロセスに依存します。Solaris では、/etc/system ファイルを編集してセマフォーを設定します。

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

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

    • shminfo_shmmax を設定します。この値は、ホスト上の単一共有メモリーセグメントの最大サイズを指定します。16 進数表現で、この値を HADB ホストマシンの RAM の合計サイズ (ただし 2G バイト以下) に設定します。

      たとえば、RAM が 2G バイトの場合は、/etc/system ファイルで次のように値を設定します。


      set shmsys:shminfo_shmmax=0x80000000

      注 –

      ホストマシンのメモリーを確認するには、次のコマンドを使用します。


      prtconf | grep Memory

    • Solaris 8 以前では、shminfo_shmseg (プロセスあたり接続可能な共有メモリーセグメントの最大数) を設定します。ホストあたりのノード数の 6 倍に値を設定します。ホストあたりに 6 ノード以下の場合は、次の行を /etc/system ファイルに追加します。


      set shmsys:shminfo_shmseg=36

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

    • shminfo_shmmni (システム全体の共有メモリーセグメントの最大数) を設定します。各 HADB ノードは 6 つの共有メモリーセグメントを 割り当てるため、HADB に必要な値は、ホストあたりのノード数の 6 倍以上にしてください。Solaris 9 では、ホストあたりに 6 ノード以下の場合は、デフォルト値を変更する必要はありません。

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

    /etc/system ファイルを確認して、たとえば次のようなセマフォー設定のエントリがないかどうか調べます。


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

    エントリが存在する場合は、次に示すように値を増やします。

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

    • seminfo_semmni (セマフォー識別子の最大数) を設定します。各 HADB ノードにはセマフォー識別子が 1 つ必要です。Solaris 9 では、ホストあたりに 6 ノード以下の場合は、デフォルト値を変更する必要はありません。次に例を示します。


      set semsys:seminfo_semmni=10
    • seminfo_semmns (システム全体のセマフォーの最大数) を設定します。各 HADB ノードにはセマフォーが 8 つ必要です。Solaris 9 の場合、またはホストあたりに 6 ノード以下の場合は、デフォルト値を変更する必要はありません。次に例を示します。


      set semsys:seminfo_semmns=60
    • seminfo_semmnu (システム中の undo 構造体の最大数) を設定します。各接続 (設定変数 NumberOfSessions、デフォルト値は 100) には undo 構造体が 1 つ必要です。ホストあたりに 6 ノード以下の場合は、600 に設定します。


      set semsys:seminfo_semmnu=600
  4. マシンをリブートします。

ProcedureLinux で共有メモリーを設定する

Linux では、共有メモリー設定を設定する必要があります。デフォルトのセマフォー設定を調整する必要はありません。

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

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

    Redhat Linux では、sysctl.conf を変更してカーネルパラメータを設定することもできます。

  3. kernel.shmax および kernel.shmall の値を次のように設定します。


    echo MemSize > /proc/sys/shmmax
    echo MemSize > /proc/sys/shmall

    ここで、MemSize はバイト数です。

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

    たとえば、両方の値を 2G バイトに設定するには、次のように指定します。


    echo 2147483648 > /proc/sys/kernel/shmmax
    echo 2147483648 > /proc/sys/kernel/shmall
  4. 次のコマンドを使用してマシンを再起動します。

    sync; sync; reboot

Windows の場合の手順

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

システムクロックの同期

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

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

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

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

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