cluster.oracle.iniファイルによるOracle Clusterware管理の構成

cluster.oracle.iniファイルの情報は、TimesTenデータベース、TimesTenプロセス、ユーザー・アプリケーションおよび仮想IPアドレスを管理するOracle Clusterwareリソースの作成に使用されます。cluster.oracle.iniという初期化ファイルをテキスト・ファイルとして作成します。

ノート:

cluster.oracle.iniファイルで使用できるすべての属性の詳細は、Oracle ClusterwareのTimesTen構成属性を参照してください。

ttCWAdmin -createコマンドはこのファイルを読み取って構成情報を参照するので、このテキスト・ファイルの場所はttCWAdminによってアクセス可能かつ読取り可能であることが必要でます。ttCWAdminユーティリティを使用して、Oracle Clusterwareで管理されているクラスタ内のTimesTenアクティブ・スタンバイ・ペアを管理します。

このファイルは、アクティブ・データベースのホストにあるTimesTenデーモン・ホーム・ディレクトリに置くことをお薦めします。ただし、ttCWAdmin -createコマンドを実行するホストと同じホストにある任意のディレクトリまたは共有ドライブにこのファイルを置くこともできます。

このファイルのデフォルトの場所は、timesten_home/confディレクトリです。このファイルを別の場所に置く場合は、-ttclusteriniオプションを指定して場所のパスを識別します。

cluster.oracle.iniファイルのエントリ名は、sys.odbc.iniファイルの既存のシステムDSNと同じである必要があります。たとえば、[basicDSN]は、「基本的な可用性の構成」で説明されているcluster.oracle.iniファイル内のエントリ名です。また、[basicDSN]は、各ホスト上のsys.odbc.iniファイル内のDataStoreおよびData Source Nameデータ・ストア属性である必要があります。たとえば、host1にあるDSN basicDSNsys.odbc.iniファイルは次のようになります。

[basicDSN]
DataStore=/path1/basicDSN
LogDir=/path1/log
DatabaseCharacterSet=AL32UTF8
ConnectionCharacterSet=AL32UTF8

host2にあるbasicDSNsys.odbc.iniファイルには異なるパスを指定できますが、その他すべての属性は同じである必要があります。

[basicDSN]
DataStore=/path2/basicDSN
LogDir=/path2/log
DatabaseCharacterSet=AL32UTF8
ConnectionCharacterSet=AL32UTF8

次の項では、cluster.oracle.iniファイルのサンプル構成を示します。

基本的な可用性の構成

この例では、サブスクライバを持たないアクティブ・スタンバイ・ペアを示します。

アクティブ・データベースのホストは最初のMasterHostで定義されており(host1)、スタンバイ・データベースのホストはリストの2つ目のMasterHost (host2)です。リスト内の各ホストはカンマで区切ります。必要に応じて、読みやすくするために空白を含めることができます。

[basicDSN]
MasterHosts=host1,host2

次の例では、host3にある、1つのサブスクライバを持つアクティブ・スタンバイ・ペアのcluster.oracle.iniファイルを示します。

[basicSubscriberDSN]
MasterHosts=host1,host2
SubscriberHosts=host3

高度な可用性の構成

高度な可用性を実現するには、予備のマスター・ホストまたはサブスクライバ・ホストを構成します。これらのホストは、アクティブ・スタンバイ・ペア・レプリケーション・スキームで使用されるマスター・ホストまたはサブスクライバ・ホストが予期しないシャットダウンやリカバリ不能なエラーの発生により置換えが必要になるまで、アイドル状態に維持されます。

「基本的な可用性の構成」で説明されているように、cluster.oracle.iniファイル内のMasterHosts属性により、マスター・ノードとして使用されるホストを構成します。アクティブ・スタンバイ・ペア・レプリケーション・スキームでは、2つのマスター・ホストのみ必要です(1つはアクティブ、もう1つはスタンバイになります)。障害が発生すると、停止しなかったホストがアクティブになり(まだアクティブでない場合)、停止したホストはリカバリ後にスタンバイになります。ただし、停止したホストをリカバリできず、cluster.oracle.iniファイルで3つ以上のホストをマスター・ホストとして指定している場合、リスト内の次のマスター・ホストがリカバリ不能なマスター・ポストを置き換えるようにインスタンス化されます。

たとえば、次の例は複数マスター・ホストの構成を示します。最初の2つのマスター・ホスト(host1host2)はアクティブとスタンバイになります。次の2つのマスター・ホスト(host3host4)は、リカバリ不能な障害が発生した場合にhost1またはhost2のいずれかと入れ替えるために使用できます。

MasterHosts=host1,host2,host3,host4

3つ以上のホストを構成する場合、TimesTenリソースを管理するOracle Clusterwareリソースのみで使用される2つの仮想IP (VIP)アドレスも構成する必要があります。これらのVIPアドレスを使用することにより、レプリケーションを管理するTimesTen内部プロセスは、リカバリ不能なホスト・エラーにより発生するいずれのマスター・ホスト変更の影響も受けなくなります。

ノート:

「仮想IPアドレスを管理するためのOracle Clusterwareリソースの作成」で説明されているように、これらのVIPアドレス(高度な可用性で使用される)を管理するOracle Clusterwareリソースは、ttCWAdmin -createVIPsコマンドを使用して作成されます。

これらのVIPアドレスは、Oracle Clusterwareで使用するために定義されている他のいずれのVIPアドレスまたはユーザー・アプリケーションにより使用されるいずれのVIPアドレスとも異なる必要があります。さらに、アプリケーションがこれらのVIPアドレスを使用すると、マスター・ホストで障害(リカバリ可能またはリカバリ不可能)が発生したときにアプリケーションでエラーが発生することがあります。ユーザー・アプリケーションは、クライアント・フェイルオーバーの方法として、またはアクティブ・データベースとスタンバイ・データベースが切り替わったときに自身を隔離するための方法として、これらのVIPアドレスを使用することはできません。

2つのVIPアドレスをMasterVIPパラメータに指定します。アクティブ・スタンバイ・ペアのレプリケーション・スキームの各マスター・ホストに1つずつです。TimesTenクラスタに指定されたVIPアドレスは、Oracle Clusterwareですでに定義および使用されているVIPアドレスとは異なる必要があります。特に、Oracle Clusterwareのインストール時に指定されたVIPアドレスをTimesTenで使用することはできません。

MasterVIP=192.168.1.1, 192.168.1.2

次のパラメータも、cluster.oracle.iniファイル内で高度な可用性に関連付けられます。

  • MasterHostsに類似するSubscriberHostsは、サブスクライバ・データベースを含むことができるホストの名前をリストします。

  • MasterVIPに類似するSubscriberVIPは、サブスクライバ・ノードを管理するためにTimesTenが内部で使用できるVIPアドレスを提供します。

  • VIPInterfaceは、パブリック・ネットワーク・アダプタの名前です。

  • VIPNetMaskは、仮想IPアドレスのネットマスクを定義します。

次の例では、アクティブ・データベースおよびスタンバイ・データベースのホストは、それぞれhost1およびhost2です。リカバリ不能なエラーが発生した場合にインスタンス化できるホストは、host3およびhost4です。サブスクライバ・ノードはありません。VIPInterfaceは、パブリック・ネットワーク・アダプタの名前です。VIPNetMaskは、仮想IPアドレスのネットマスクを定義します。

[advancedDSN]
MasterHosts=host1,host2,host3,host4
MasterVIP=192.168.1.1, 192.168.1.2
VIPInterface=eth0
VIPNetMask=255.255.255.0

次の例では、単一のサブスクライバがhost4上に構成されます。SubscriberHostsには、マスター・データベースのフェイルオーバーに使用できる追加のホストが1つと、サブスクライバ・データベースのフェイルオーバーに使用できる追加のノードが1つ定義されます。MasterVIPおよびSubscriberVIPは、マスター・データベースおよびサブスクライバ・ホストに対して定義されている仮想IPアドレスを指定します。

[advancedSubscriberDSN]
MasterHosts=host1,host2,host3
SubscriberHosts=host4,host5
MasterVIP=192.168.1.1, 192.168.1.2
SubscriberVIP=192.168.1.3
VIPInterface=eth0
VIPNetMask=255.255.255.0

追加のマスター・ノードが次のようになっていることを確認します。

アクティブ・スタンバイ・ペアでのキャッシュ・グループの包含

アクティブ・スタンバイ・ペアが1つ以上のAWTまたは読取り専用キャッシュ・グループをレプリケートする場合、CacheConnect属性をyに設定します。

この例では、CacheConnect属性をyに設定します。この例では、高度な可用性の構成で、1つのサブスクライバがあるアクティブ・スタンバイ・ペアを指定します。アクティブ・スタンバイ・ペアによって、1つ以上のキャッシュ・グループがレプリケートされます。

[advancedCacheDSN]
MasterHosts=host1,host2,host3
SubscriberHosts=host4, host5
MasterVIP=192.168.1.1, 192.168.1.2
SubscriberVIP=192.168.1.3
VIPInterface=eth0
VIPNetMask=255.255.255.0
CacheConnect=y

アプリケーション・フェイルオーバーの実装

Oracle Clusterwareと統合されたTimesTenでは、アクティブ・スタンバイ・ペアの任意のデータベースにリンクされたTimesTenアプリケーションのフェイルオーバーを簡素化できます。

TimesTenは、Oracle ClusterwareおよびTimesTenと同じホストにある、ダイレクト・モードのアプリケーションとクライアント/サーバー・モードのアプリケーションの両方を管理できます。

TimesTenアプリケーションのフェイルオーバーに必要なcluster.oracle.iniファイルの属性は、次のとおりです。

  • AppName: Oracle Clusterwareで管理されるアプリケーションの名前。

  • AppStartCmd: アプリケーションを起動するコマンドライン。

  • AppStopCmd: アプリケーションを停止するコマンドライン。

  • AppCheckCmd: AppNameで指定されたアプリケーションのステータスを確認するアプリケーションを実行するためのコマンドライン。

  • AppType: アプリケーションのリンク先となるデータベースを定義します。使用可能な値は、ActiveStandbyDualMasterSubscriber (all)およびSubscriber[index]です。

AppFailureThresholdDatabaseFailoverDelayAppScriptTimeoutなど、構成可能なオプションの属性が複数あります。表A-3は、すべてのオプション属性とそのデフォルト値の一覧および説明を示しています。

TimesTenアプリケーション・モニター・プロセスは、ユーザー指定のスクリプトまたはAppCheckCmdで指定されたプログラムを使用して、アプリケーションを監視します。アプリケーションのステータスを確認するスクリプトは、成功の場合は0を返し、失敗の場合は0以外を返すように記述されている必要があります。0(ゼロ)以外の値が検出されると、Oracle Clusterwareは、障害が発生したアプリケーションをリカバリするためのアクションを実行します。

この例では、サブスクライバを持たないアクティブ・スタンバイ・ペアに対して構成されている高度な可用性を示します。readerアプリケーションは、スタンバイ・データベースのデータを問い合せるアプリケーションです。AppStartCmdAppStopCmdおよびAppCheckCmdには、startstopおよびcheckコマンドなどの引数を含めることができます。

ノート:

AppStartCmdAppStopCmdおよびAppCheckCmdの値に引用符を使用しないでください。

[appDSN]
MasterHosts=host1,host2,host3,host4
MasterVIP=192.168.1.1, 192.168.1.2
VIPInterface=eth0
VIPNetMask=255.255.255.0
AppName=reader
AppType=Standby
AppStartCmd=/mycluster/reader/app_start.sh start
AppStopCmd=/mycluster/reader/app_stop.sh stop
AppCheckCmd=/mycluster/reader/app_check.sh check

2つ以上のアプリケーションのフェイルオーバーを構成できます。AppNameを使用してアプリケーションを指定し、AppName属性のすぐ後に続くAppTypeAppStartCmdAppStopCmdおよびAppCheckCmdの値を指定します。読みやすくするために空白行を含めることができます。たとえば:

[app2DSN]
MasterHosts=host1,host2,host3,host4
MasterVIP=192.168.1.1, 192.168.1.2
VIPInterface=eth0
VIPNetMask=255.255.255.0

AppName=reader
AppType=Standby
AppStartCmd=/mycluster/reader/app_start.sh
AppStopCmd=/mycluster/reader/app_stop.sh
AppCheckCmd=/mycluster/reader/app_check.sh

AppName=update
AppType=Active
AppStartCmd=/mycluster/update/app2_start.sh
AppStopCmd=/mycluster/update/app2_stop.sh
AppCheckCmd=/mycluster/update/app2_check.sh

AppTypeDualMasterに設定すると、アプリケーションはアクティブ・ホストとスタンバイ・ホストの両方で起動します。アクティブ・ホストでアプリケーションが停止すると、そのホスト上のアクティブ・データベースおよびその他すべてのアプリケーションがスタンバイ・ホストにフェイルオーバーします。AppFailureIntervalAppRestartAttemptsおよびAppUptimeThreshold属性を設定することによって、障害間隔、再起動の試行回数および稼働時間のしきい値を構成できます。これらの属性にはデフォルト値があります。たとえば:

[appDualDSN]
MasterHosts=host1,host2,host3,host4
MasterVIP=192.168.1.1, 192.168.1.2
VIPInterface=eth0
VIPNetMask=255.255.255.0
AppName=update
AppType=DualMaster
AppStartCmd=/mycluster/update/app2_start.sh
AppStopCmd=/mycluster/update/app2_stop.sh
AppCheckCmd=/mycluster/update/app2_check.sh
AppRestartAttempts=5
AppUptimeThreshold=300
AppFailureInterval=30

ノート:

「Oracle ClusterwareのTimesTen構成属性」を参照してください。

両方のマスター・ノードに恒久的な障害が発生した場合のリカバリの構成

両方のマスター・ノードに障害が発生し、その後復旧した場合、Oracle Clusterwareは、自動的にマスター・データベースをリカバリできます。

一時的な二重の障害から自動リカバリするには、次の条件が満たされている必要があります。

  • アクティブ・スタンバイ・ペアにRETURN TWOSAFEが指定されていない。

  • AutoRecoveryに設定されている。

  • RepBackupDirが共有記憶域のディレクトリを指定している。

  • RepBackupPeriod0より大きい値に設定されている。

両方のマスター・ノードに永続的な障害が発生した場合、Oracle Clusterwareは、自動的にマスター・データベースを2つの新しいノードにリカバリできます。次の条件が満たされている必要があります。

  • 高度な可用性(仮想IPアドレスおよび少なくとも4つのホスト)が構成されている。

  • アクティブ・スタンバイ・ペアがキャッシュ・グループをレプリケートしていない。

  • RETURN TWOSAFEが指定されていない。

  • AutoRecoveryに設定されている。

  • RepBackupDirが共有記憶域のディレクトリを指定している。

  • RepBackupPeriod0より大きい値に設定されている。

TimesTenは最初にアクティブ・データベースの全体バックアップを実行し、次に増分バックアップを実行します。オプションの属性RepFullBackupCycleを指定すると、TimesTenがその後の全体バックアップを実行するタイミングを管理できます。デフォルトでは、TimesTenは、増分バックアップを5回実行するたびに完全バックアップを1回実行します。

RepBackupDirおよびRepBackupPeriodをバックアップに構成している場合、TimesTenは、アクティブになるすべてのマスター・データベースのバックアップを実行します。データベースが再度アクティブにならないかぎり、かつてアクティブとして使用され今はスタンバイになっているデータベースに対して実行されたバックアップは削除されません。2つの完全なデータベース・バックアップ用に十分な共有記憶域が必要です。ttCWAdmin -restoreコマンドによって、正しいバックアップ・ファイルが自動的に選択されます。

増分バックアップでは、トランザクション・ログ・ファイルのログ・レコードの量が増えます。RepBackupPeriodおよびRepFullBackupCycleの値を十分に小さくし、トランザクション・ログ・ファイルのログ・レコードが大量にならないようにします。

この例では、自動リカバリの属性設定を示します。

[autorecoveryDSN]
MasterHosts=host1,host2,host3,host4
MasterVIP=192.168.1.1, 192.168.1.2
VIPInterface=eth0
VIPNetMask=255.255.255.0
AutoRecover=y
RepBackupDir=/shared_drive/dsbackup
RepBackupPeriod=3600

アクティブ・スタンバイ・ペアにキャッシュ・グループがある場合、または両方のマスター・ホストの障害から手動でリカバリする場合は、AutoRecovern(デフォルト)に設定されていることを確認します。手動リカバリでは、次のこと必要です。

  • RepBackupDirが共有記憶域のディレクトリを指定している

  • RepBackupPeriod0より大きい値に設定されている。

この例では、手動リカバリの属性設定を示します。AutoRecoverのデフォルト値はnであるため、このファイルには含まれていません。

[manrecoveryDSN]
MasterHosts=host1,host2,host3
MasterVIP=192.168.1.1, 192.168.1.2
VIPInterface=eth0
VIPNetMask=255.255.255.0
RepBackupDir=/shared_drive/dsbackup
RepBackupPeriod=3600

RepDDL属性の使用

RepDDL属性は、アクティブ・スタンバイ・ペアを作成するSQL文を表します。

RepDDL属性はオプションです。これは、アクティブ・スタンバイ・ペアから表、キャッシュ・グループおよび順序を除外する場合に使用できます。

RepDDLcluster.oracle.iniファイルに含める場合は、ReturnServiceAttributeMasterStoreAttributeまたはSubscriberStoreAttributecluster.oracle.iniファイルに指定しないでください。これらのレプリケーション設定は、RepDDL属性に含めるようにしてください。

RepDDLの値を指定する場合、データベース・ファイル名の接頭辞に<DSN>マクロを使用します。マスター・ホスト名を指定するには、<MASTERHOST[1]>および<MASTERHOST[2]>マクロを使用します。TimesTenは、構成で仮想IPアドレスが使用されているかどうに応じて、MasterHostsまたはMasterVIP属性の正しい値に置換します。同様に、サブスクライバ・ホスト名を指定するには、<SUBSCRIBERHOST[n]>マクロを使用します(ここで、nは、1からSubscriberHosts属性値の合計数までの数値であるか、仮想IPアドレスが使用されている場合は1からSubscriberVIP属性値の合計数までの数値です)。

RepDDL属性を使用して、アクティブ・スタンバイ・ペアから表、キャッシュ・グループおよび順序を除外します。

[excludeDSN]
MasterHosts=host1,host2,host3,host4
SubscriberHosts=host5,host6
MasterVIP=192.168.1.1, 192.168.1.2
SubscriberVIP=192.168.1.3
VIPInterface=eth0
VIPNetMask=255.255.255.0
RepDDL=CREATE ACTIVE STANDBY PAIR \
<DSN> ON <MASTERHOST[1]>, <DSN> ON <MASTERHOST[2]>
SUBSCRIBER <DSN> ON <SUBSCRIBERHOST[1]>\
EXCLUDE TABLE pat.salaries, \
EXCLUDE CACHE GROUP terry.salupdate, \
EXCLUDE SEQUENCE ttuser.empcount

レプリケーション・エージェントのトランスミッタは、次の方法でルート情報を取得します(優先順に示します)。

  1. RepDDL設定のROUTE句から(ROUTE句が指定されている場合)。高度な可用性を構成している場合は、ROUTE句を指定しないでください。

  2. ローカル・ホストとリモート・ホストのプライベート・ホスト名およびパブリック・ホスト名を提供するとともに、リモート・デーモンのポート番号を提供するOracle Clusterwareから。プライベート・ホスト名は、パブリック・ホスト名より優先されます。レプリケーション・エージェントのトランスミッタがIPCソケットに接続できない場合、Oracle Clusterwareがレプリケーション・スキームに関して保持している情報を使用してリモート・デーモンへの接続を試行します。

  3. アクティブ・ホストおよびスタンバイ・ホストから。失敗した場合、レプリケーション・エージェントはホスト名に基づいた接続方法を選択します。

この例では、RepDDLROUTE句を指定します。

[routeDSN]
MasterHosts=host1,host2,host3,host4
RepDDL=CREATE ACTIVE STANDBY PAIR \
<DSN> ON <MASTERHOST[1]>, <DSN> ON <MASTERHOST[2]>\
ROUTE MASTER <DSN> ON <MASTERHOST[1]>  SUBSCRIBER <DSN> ON <MASTERHOST[2]>\
MASTERIP "192.168.1.2" PRIORITY 1\
SUBSCRIBERIP "192.168.1.3" PRIORITY 1\ 
MASTERIP "10.0.0.1" PRIORITY 2\
SUBSCRIBERIP "10.0.0.2" PRIORITY 2\
MASTERIP "140.87.11.203" PRIORITY 3\
SUBSCRIBERIP "140.87.11.204" PRIORITY 3\
ROUTE MASTER <DSN> ON <MASTERHOST[2]>  SUBSCRIBER <DSN> ON <MASTERHOST[1]>\
MASTERIP "192.168.1.3" PRIORITY 1\
SUBSCRIBERIP "192.168.1.2" PRIORITY 1\ 
MASTERIP "10.0.0.2" PRIORITY 2\
SUBSCRIBERIP "10.0.0.1" PRIORITY 2\
MASTERIP "140.87.11.204" PRIORITY 3\
SUBSCRIBERIP "140.87.11.203" PRIORITY 3\