ネットワークの構成

ネットワーク経由でTimesTenデータをレプリケートする場合は、いくつかの問題について考慮する必要があります。

ネットワーク帯域幅要件

TimesTen Classicレプリケーションに必要なネットワーク帯域幅は、レプリケートしているデータの量および頻度によって異なります。

ここでは、データ範囲の上位と下位、およびTimesTenデータベース間でデータをレプリケートするために必要なネットワーク帯域幅を特徴付けるトランザクションのタイプについて説明します。

表4-1は、レプリケート・レコードのサイズを計算するためのガイドラインを示しています。

表4-1 レプリケートされたレコードのサイズ

レコード・タイプ サイズ

開始トランザクション

48バイト

更新

116バイト

+18バイト(更新された列ごとに)

+古い列値のサイズ

+新しい列値のサイズ

+主キーまたは一意キーのサイズ

削除

104バイト

+主キーまたは一意キーのサイズ

挿入

104バイト

+主キーまたは一意キーのサイズ

+挿入された行のサイズ

トランザクションはレプリケート対象のデータベース間をバッチで送信されます。マスター・データベースのトランザクション・ログ・バッファにデータがなくなった場合、または現在のバッチがほぼ256KBである場合にバッチが作成されます。「データベース間の更新のコピー」を参照してください。

WAN環境でのレプリケーション

TimesTen ClassicレプリケーションではTCP/IPプロトコルを使用していますが、このプロトコルはWAN環境用には最適化されていません。WANでのレプリケーションのパフォーマンスは、サードパーティのTCPスタック製品を使用して向上できます。

TCPスタックの交換を実行できない場合は、CREATE ACTIVE STANDBY PAIR文またはCREATE REPLICATION文にCOMPRESS TRAFFIC属性を設定して、TCP/IPプロトコルで処理する必要があるネットワーク通信量を削減します。「レプリケートの通信量の圧縮」を参照してください。

パフォーマンスを向上させるためにTCP/IPカーネル・パラメータを変更する方法については、『Oracle TimesTen In-Memory Databaseインストレーション、移行およびアップグレード・ガイド』AIXの前提条件またはLinuxの前提条件を参照してください。

ROUTE句を使用したネットワーク・インタフェースの構成

レプリケーション・スキームでは、データベースが存在するホストの名前を指定する必要があります。そのホスト名は、オペレーティング・システムによって1つ以上のIPアドレスに変換されます。

レプリケーション要素でデータベースのホストを指定する場合は、hostnameコマンドによって返される名前を常に使用する必要があります(レプリケーションでは、それと同じホスト名を使用して、現在のホストがレプリケーション・スキームに含まれていることを確認するためです)。現在のホストが含まれないレプリケーション・スキームは作成できません。

データベース名を指定するときに、オペレーティング・システムのhostnameコマンドが返すホスト名を指定する必要はありますが、ROUTE句を使用することで、別のインタフェース(デフォルト以外)でトラフィックを送受信するようにレプリケーションを構成できます。

ホストに(IPアドレスが異なる)複数のネットワーク・インタフェースがある場合は、レプリケーションでデフォルトのインタフェースを使用しないかぎり、使用するインタフェースをROUTE句で指定する必要があります。また、各インタフェースに対して優先順位を指定する必要もあります。レプリケーションでは、まず優先順位が最も高いアドレスを使用して接続が試行され、その接続を確立できなかった場合は、接続が確立されるまで優先順に残りのアドレスが試されます。あるIPアドレスを使用しているときにホストへの接続が失敗すると、ROUTE句で複数のアドレスが指定されている場合は、別のIPアドレスへの再接続(フォールバック)が試行されます。

ROUTE句の構文は次のようになります。

ROUTE MASTER FullDatabaseName SUBSCRIBER FullDatabaseName
  {{MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost}
    PRIORITY Priority} [...]

ノート:

ROUTE句のアドレスは、ホスト名またはIPアドレスのいずれかとして指定できます。ただし、あるホスト名に対して複数のIPアドレスが構成されているホストの場合は、意図したIPアドレスのみをレプリケーションで確実に使用するために、IPアドレスを使用してROUTE句を構成する必要があります。

  • アクティブ・スタンバイ・ペアでROUTE句を使用する場合、各マスター・データベースは他のマスター・データベースのサブスクライバであり、各読取り専用サブスクライバは両方のマスター・データベースのサブスクライバです。これは、両方のディレクトリに1つのルートを指定するには、CREATE ACTIVE STANDBY PAIR文に2の倍数でROUTE句が含まれている必要があることを意味します。

  • 二重のマスターを定義するクラシック・レプリケーション・スキームでROUTE句を使用する場合、各マスター・データベースはもう1つのマスター・データベースのサブスクライバになります。これは、両方のディレクトリに1つのルートを指定するには、CREATE REPLICATION文に2の倍数でROUTE句が含まれている必要があることを意味します。

次の例は、アクティブ・スタンバイ・ペアに対して複数のネットワーク・インタフェースを構成する方法を示しています。

ホストhost1にはホスト名host1fastでアクセス可能な2つ目のインタフェースが構成されており、host2にはIPアドレス192.168.1.100でアクセス可能な2つ目のインタフェースが構成されている場合、次のようにすると、2つ目のインタフェースをレプリケーション・スキームで使用するように指定できます。

CREATE ACTIVE STANDBY PAIR dsn1, dsn2
 ROUTE MASTER dsn1 ON "host1" SUBSCRIBER dsn2 ON "host2"
    MASTERIP "host1fast" PRIORITY 1
    SUBSCRIBERIP "192.168.1.100" PRIORITY 1
 ROUTE MASTER dsn2 ON "host2" SUBSCRIBER dsn1 ON "host1"
    MASTERIP "192.168.1.100" PRIORITY 1
    SUBSCRIBERIP "host1fast" PRIORITY 1;

次の例は、クラシック・レプリケーション・スキームに対して複数のネットワーク・インタフェースを構成する方法を示しています。

ホストhost1にはホスト名host1fastでアクセス可能な2つ目のインタフェースが構成されており、host2にはIPアドレス192.168.1.100でアクセス可能な2つ目のインタフェースが構成されている場合、次のようにすると、2つ目のインタフェースをレプリケーション・スキームで使用するように指定できます。

CREATE REPLICATION repscheme
 ELEMENT e1 TABLE ttuser.tab
    MASTER dsn1 ON host1
    SUBSCRIBER dsn2 ON host2
 ELEMENT e2 TABLE ttuser.tab
    MASTER dsn2 ON host2
    SUBSCRIBER dsn1 ON host1
 ROUTE MASTER dsn1 ON host1 SUBSCRIBER dsn2 ON host2
    MASTERIP host1fast PRIORITY 1
    SUBSCRIBERIP "192.168.1.100" PRIORITY 1
 ROUTE MASTER dsn2 ON host2 SUBSCRIBER dsn1 ON host1
    MASTERIP "192.168.1.100" PRIORITY 1
    SUBSCRIBERIP host1fast PRIORITY 1;

また、インタフェースが複数あるレプリケーション・ホストでは、プライマリ・インタフェースに障害が発生したり、そのインタフェースと受信ホストとの間の接続が切断した場合に備えて、1つ以上のインタフェースをバックアップとして使用するようにレプリケーションを構成できます。ROUTE句を使用すると、それぞれのマスターおよびサブスクライバに対して複数のインタフェースを指定し、優先順位に従ってレプリケーションで使用することができます。

マスター・ホストのレプリケーションが、優先順位の最も高いMASTERIPにバインドできなかった場合は、ただちに次の優先順位のMASTERIPアドレスを使用して接続が試行されます。ただし、サブスクライバへの接続がなんらかの理由で失敗した場合は、次に優先順位の高いMASTERIPアドレスを試す前に、それぞれのSUBSCRIBERIPアドレスを優先順に使用して接続が試行されます。

次の例は、アクティブ・スタンバイ・ペアのネットワーク優先度を構成する方法を示しています。

ホストhost1に2つのネットワーク・インタフェース(IPアドレスは192.168.1.100192.168.1.101)が構成され、ホストhost2に2つのインタフェース(IPアドレスは192.168.1.200192.168.1.201)が構成されている場合は、まずIPアドレス192.168.1.100および192.168.200を使用してトラフィックの送受信を行い、その接続に障害が発生したときはIPアドレス192.168.1.101または192.168.1.201を試行するようにレプリケーションを設定できます。

CREATE ACTIVE STANDBY PAIR dsn1, dsn2
 ROUTE MASTER dsn1 ON "host1" SUBSCRIBER dsn2 ON "host2"
   MASTERIP "192.168.1.100" PRIORITY 1
   MASTERIP "192.168.1.101" PRIORITY 2
   SUBSCRIBERIP "192.168.1.200" PRIORITY 1
   SUBSCRIBERIP "192.168.1.201" PRIORITY 2;

次の例は、クラシック・レプリケーション・スキームに対してネットワーク優先度を構成する方法を示しています。

ホストhost1に2つのネットワーク・インタフェース(IPアドレスは192.168.1.100192.168.1.101)が構成され、ホストhost2に2つのインタフェース(IPアドレスは192.168.1.200192.168.1.201)が構成されている場合は、まずIPアドレス192.168.1.100および192.168.200を使用してトラフィックの送受信を行い、その接続に障害が発生したときはIPアドレス192.168.1.101または192.168.1.201を試行するようにレプリケーションを設定できます。

CREATE REPLICATION repscheme
 ELEMENT e TABLE ttuser.tab
   MASTER dsn1 ON host1
   SUBSCRIBER dsn2 ON host2
 ROUTE MASTER dsn1 ON host1 SUBSCRIBER dsn2 ON host2
   MASTERIP "192.168.1.100" PRIORITY 1
   MASTERIP "192.168.1.101" PRIORITY 2
   SUBSCRIBERIP "192.168.1.200" PRIORITY 1
   SUBSCRIBERIP "192.168.1.201" PRIORITY 2;

ROUTE句を使用しない場合のネットワーク・インタフェースの構成

ROUTE句を使用しない場合に各ホストについて正しいホスト名とIPアドレスが使用されるように、レプリケーションを構成できます。

ROUTE句の使用なしでのUNIXまたはLinux上にあるデータベース・ホストの指定

データベース・ホストと、レプリケーションに使用するネットワーク・インタフェースを指定するには、可能な場合は、レプリケーション・スキームのROUTE句を使用する必要があります。

ただし、ROUTE句を使用しないレプリケーション・スキーム構成がある場合は、複数のネットワーク・インタフェースがあるレプリケーション・ホスト用にオペレーティング・システムおよびDNSファイルを構成できます。

ホストに(IPアドレスが異なる)複数のネットワーク・インタフェースがあり、レプリケーションがROUTE句で構成されていない場合、TimesTen Classicレプリケーションでは、gethostbynameコールによって返される順序と同じ順序でIPアドレスへの接続が試行されます。最初のアドレスを使用して接続が試行され、その接続を確立できなかった場合は、接続が確立されるまで順番に残りのアドレスが試行されます。TimesTen Classicレプリケーションでは、ホストへの新しい接続を確立するたびに、この同じ順序が使用されます。あるIPアドレスでホストへの接続が失敗すると、TimesTen Classicレプリケーションでは前述の方法と同じ方法でホストの別のIPアドレスへの再接続(フォールバック)が試行されます。

UNIXまたはLinuxプラットフォームで複数のIPアドレスを使用するようにホストを構成するには、2つの基本的な方法があります: DNSまたは/etc/hostsファイルです。

ノート:

ネットワーク・インタフェース・カード(NIC)が複数ある場合は、/etc/host.confファイルでmulti onを指定してください。指定しないと、gethostbynameは複数のアドレスを返すことができません。

たとえば、マシンに2つのNICがある場合は、/etc/hostsファイルに次の構文を使用します。

127.0.0.1  localhost
IP_address_for_NIC_1  official_hostname optional_alias
IP_address_for_NIC_2  official_hostname optional_alias

ホスト名official_hostnameは、hostnameコマンドによって返される名前です。

/etc/hostsファイルを編集する場合は、次のことに注意してください。

  • /etc/hostsファイルを変更するには、rootとしてログインする必要があります。

  • 1つのIPアドレスにつき使用できるのは1行のみです。

  • 各行には複数の別名を含めることができます。

  • 同じホスト名に対して複数のIPアドレスがある場合、IPアドレスは連続した行に入力する必要があります。

  • ホスト名は最大30文字です。

たとえば、UNIXまたはLinuxプラットフォームにある/etc/hostsファイルの次のエントリは、2つのIPアドレスがあるHost1というサーバーを示します。

127.0.0.1        localhost
10.10.98.102     Host1
192.168.1.102    Host1

DNSに同じ構成を指定する場合、ドメイン・ゾーン・ファイルに次のように入力します。

Host1     IN     A     10.10.98.102
          IN     A     192.168.1.102

いずれの場合も、レプリケーション・スキームでホスト名としてHost1を指定するだけで、レプリケーションでは接続の確立時に最初の使用可能なIPアドレスが使用されます。

複数のIPアドレスが使用される環境では、レプリケーション接続を特定のIPアドレスに制限するために、1つのIPアドレスに複数のホスト名を割り当てることもできます。たとえば、/etc/hostsファイルに次のように入力できます。

127.0.0.1        localhost
10.10.98.102     Host1
192.168.1.102    Host1 RepHost1

または、DNSゾーン・ファイルに次のように入力できます。

Host1     IN     A     10.10.98.102
          IN     A     192.168.1.102
RepHost1  IN     A     192.168.1.102

レプリケーション接続をこのホストのIPアドレス192.168.1.102に制限する場合は、レプリケーション・スキームにホスト名としてRepHost1を指定できます。別の方法として、レプリケーション・スキームの構成に使用するCREATE ACTIVE STANDBY PAIR文またはCREATE REPLICATION文で、ホスト名として単にIPアドレスを指定する方法をあげることができます。

ノート:

レプリケーション・スキームでのデータベース・ホストの指定は一貫している必要があります。あるデータベースにIPアドレスを使用してホストを指定した後、同じデータベースまたは別のデータベースにそのホスト名は使用しないでください。

TimesTenデーモンおよびサブデーモンのユーザー指定アドレス

デフォルトでは、TimesTenのメイン・デーモン、すべてのサブデーモン、およびすべてのエージェントは、使用可能な任意のアドレスを使用してソケット上でリクエストをリスニングします。

timesten.confファイルを変更してlisten_addrオプションを設定すると、エージェントとデーモン間の通信用アドレスを指定できます。

『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』TimesTenデーモン属性の管理を参照してください。

マシンに2つのNICがあり、NICのアドレスがそれぞれ10.10.10.10010.10.11.200であるとします。ループバック・アドレスは127.0.0.1です。ループバック・アドレスをレプリケーション・エージェントに適用する場合は次のことに注意してください。

  • timesten.confファイルのlisten_addrオプションを設定しなかった場合、すべてのプロセスがデーモンおよびエージェントと対話できます。

  • listen_addr10.10.10.100に設定した場合、ローカル・ホストまたは10.10.10ネットのすべてのプロセスが10.10.10.100のデーモンおよびエージェントと対話できます。10.10.11ネット上のプロセスでは、10.10.10.100のデーモンおよびエージェントと対話できません。

  • listen_addr127.0.0.1に設定した場合、ローカル・ホストのプロセスのみがデーモンおよびエージェントと対話できます。他のホストのプロセスでは、デーモンおよびエージェントと対話できません。

レプリケートされたデータベースのローカル・ホストの識別

通常、TimesTen Classicレプリケーションでは、レプリケーション構成に含まれるホストは、オペレーティング・システムの一般的なホスト名の解決方法で識別できます。

ただし、ホスト名の構成が一般的でない場合、レプリケーション・スキームに指定されたホスト名とローカル・ホストが一致しているかどうかをTimesTenで判別できないことがまれにあります。このような状態でttRepStartまたはttAdmin -repStartを使用してレプリケーションを開始しようとすると、エラー8191「This store is not involved in a replication scheme」を受信することになります。

この場合は、ttHostNameSet組込みプロシージャを使用して、現在のデータベースが、レプリケーション・スキームで指定されているデータベースであることをTimesTenに明示的に示すことができます。『Oracle TimesTen In-Memory Databaseリファレンス』ttHostNameSetを参照してください。